diff -r e617c9cf6dd3 -r 90073cbb535d lm_message_node.c --- a/lm_message_node.c Mon Feb 16 01:32:12 2009 +0200 +++ b/lm_message_node.c Fri Feb 20 23:07:43 2009 +0200 @@ -3,6 +3,7 @@ #include #include +#include "config.h" #include "lm_types.h" /// lm.message_node @@ -17,7 +18,6 @@ { luaL_argcheck (L, lua_islightuserdata (L, 1), 1, "loudmouth message node lightuserdata expected"); llm_message_node_bless (L, lua_touserdata (L, 1)); - lua_remove (L, -2); return 1; } @@ -28,7 +28,6 @@ { llm_message_node_t *object = luaL_checklm_message_node (L, 1); lua_pushstring (L, object->message_node->name); - lua_remove (L, -2); return 1; } @@ -43,7 +42,6 @@ llm_message_node_bless (L, node); else lua_pushnil (L); - lua_remove (L, -2); return 1; } @@ -58,7 +56,6 @@ llm_message_node_bless (L, node); else lua_pushnil (L); - lua_remove (L, -2); return 1; } @@ -73,7 +70,6 @@ llm_message_node_bless (L, node); else lua_pushnil (L); - lua_remove (L, -2); return 1; } @@ -88,27 +84,23 @@ llm_message_node_bless (L, node); else lua_pushnil (L); - lua_remove (L, -2); return 1; } /// message_node:value /// Gets or sets a value of message node. /// A: string (optional value) -/// R: string (if called without arguments) +/// R: string (if called without arguments) or lm message node object static int llm_message_node_value (lua_State *L) { llm_message_node_t *object = luaL_checklm_message_node (L, 1); if (lua_gettop (L) > 1) { // Set const char *value = luaL_checkstring (L, 2); lm_message_node_set_value (object->message_node, value); - lua_pop (L, 2); - return 0; - } else { // Get + lua_pop (L, 1); + } else // Get lua_pushstring (L, lm_message_node_get_value (object->message_node)); - lua_remove (L, -2); - return 1; - } + return 1; } /// message_node:child @@ -121,11 +113,10 @@ const char *name = luaL_checkstring (L, 2); LmMessageNode *child; - if (lua_gettop (L) > 2) { // Add + if (lua_gettop (L) > 2) // Add child = lm_message_node_add_child (object->message_node, name, luaL_checkstring (L, 3)); - lua_pop (L, 1); - } else { // Get + else { // Get child = lm_message_node_get_child (object->message_node, name); if (!child) { lua_pushnil (L); @@ -134,8 +125,6 @@ } llm_message_node_bless (L, child); // XXX lm_message_node_unref (child); - lua_remove (L, -2); - lua_remove (L, -2); return 1; } @@ -156,8 +145,6 @@ llm_message_node_bless (L, child); // XXX lm_message_node_unref (child); } - lua_remove (L, -2); - lua_remove (L, -2); return 1; } @@ -165,40 +152,33 @@ /// Gets or sets raw mode flag for node. /// When set, value of node will not be escaped. /// A: boolean (optional) -/// V: boolean (if called with no apguments) +/// V: boolean (if called with no apguments) or lm message node object static int llm_message_node_raw (lua_State *L) { llm_message_node_t *object = luaL_checklm_message_node (L, 1); if (lua_gettop (L) > 1) { // Set luaL_checktype (L, 2, LUA_TBOOLEAN); lm_message_node_set_raw_mode (object->message_node, lua_toboolean (L, 2)); - lua_pop (L, 2); - return 0; - } else { // Get + lua_pop (L, 1); + } else // Get lua_pushboolean (L, lm_message_node_get_raw_mode (object->message_node)); - lua_remove (L, -2); - return 1; - } + return 1; } /// message_node:attribute /// Gets or sets value of node attribute with a given name. /// A: string (name), string (optional value) -/// R: string (when called with one aprgument) +/// R: string (when called with one aprgument) or lm message node object static int llm_message_node_attribute (lua_State *L) { llm_message_node_t *object = luaL_checklm_message_node (L, 1); const char *name = luaL_checkstring (L, 2); if (lua_gettop (L) > 2) { // Set lm_message_node_set_attribute (object->message_node, name, luaL_checkstring (L, 3)); - lua_pop (L, 3); - return 0; - } else { // Get + lua_pop (L, 2); + } else // Get lua_pushstring (L, lm_message_node_get_attribute (object->message_node, name)); - lua_remove (L, -2); - lua_remove (L, -2); - return 1; - } + return 1; } /// message_node:xml @@ -208,7 +188,6 @@ { llm_message_node_t *object = luaL_checklm_message_node (L, 1); lua_pushstring (L, lm_message_node_to_string (object->message_node)); - lua_remove (L, -2); return 1; } @@ -219,15 +198,14 @@ { llm_message_node_t *object = luaL_checklm_message_node (L, 1); lua_pushlightuserdata (L, object->message_node); - lua_remove (L, -2); return 1; } static int llm_message_node_gc (lua_State *L) { llm_message_node_t *object = luaL_checklm_message_node (L, 1); + D ("Message node %X gc called", (int) object); lm_message_node_unref (object->message_node); - lua_pop (L, 1); return 0; }