--- 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;
}