lm_message_node.c
changeset 6 90073cbb535d
parent 0 84fdfb0344c9
child 7 5db1448eb857
--- 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 <lauxlib.h>
 #include <loudmouth/loudmouth.h>
 
+#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;
 }