diff -r 8f502c1477ac -r 4cb715fed99b lm_message_node.c --- 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; }