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