lm_message_node.c
changeset 14 4cb715fed99b
parent 12 63f06a23c235
child 16 09b375e9ce32
--- a/lm_message_node.c	Sat Mar 14 17:01:53 2009 +0200
+++ b/lm_message_node.c	Mon Mar 23 05:47:09 2009 +0200
@@ -61,6 +61,8 @@
 
 /// message_node:children
 /// Gets first child node (raw access used).
+/// Note: this method is deprecated and soon will be removed.
+/// Use child without arguments instead.
 /// R: lm message node object or nil
 int children_lm_node (lua_State *L)
 {
@@ -105,26 +107,30 @@
 
 /// message_node:child
 /// Gets or creates child node object with given name.
-/// A: string (name), string (optional value)
+/// If name is omitted, first child node is returned.
+/// A: string (name, optional), string (optional value)
 /// R: lm message node object or nil
 int child_lm_node (lua_State *L)
 {
 	LmMessageNode *node = luaL_checkLmMessageNode (L, 1);
-	const char *name = luaL_checkstring (L, 2);
 	LmMessageNode *child;
+	int            top  = lua_gettop (L);
+	if (top > 1) {
+		const char *name = luaL_checkstring (L, 2);
 
-	if (lua_gettop (L) > 2) // Add
-		child = lm_message_node_add_child (node, name,
-						   luaL_checkstring (L, 3));
-	else { // Get
-		child = lm_message_node_get_child (node, name);
-		if (!child) {
-			lua_pushnil (L);
-			return 1;
-		}
-	}
-	bless_lm_node (L, child);
-	// XXX lm_message_node_unref (child);
+		if (top > 2) // Add
+			child = lm_message_node_add_child (node, name,
+							   luaL_checkstring (L, 3));
+		else // Get
+			child = lm_message_node_get_child (node, name);
+	} else
+		child = node->children;
+
+	if (child)
+		bless_lm_node (L, child);
+		// XXX lm_message_node_unref (child); // may be necessary on _get/_add'ed nodes
+	else
+		lua_pushnil (L);
 	return 1;
 }