diff -r e617c9cf6dd3 -r 90073cbb535d lm_message.c --- a/lm_message.c Mon Feb 16 01:32:12 2009 +0200 +++ b/lm_message.c Fri Feb 20 23:07:43 2009 +0200 @@ -3,6 +3,7 @@ #include #include +#include "config.h" #include "util.h" #include "lm_types.h" @@ -31,6 +32,8 @@ { "stream:stream", LM_MESSAGE_TYPE_STREAM }, { "stream:error", LM_MESSAGE_TYPE_STREAM_ERROR }, { "stream:features", LM_MESSAGE_TYPE_STREAM_FEATURES }, + { "stream_error", LM_MESSAGE_TYPE_STREAM_ERROR }, + { "stream_features", LM_MESSAGE_TYPE_STREAM_FEATURES }, { NULL, 0 }, }; @@ -67,15 +70,14 @@ const char *to = luaL_checkstring (L, 1); int type = luaL_checkenum (L, 2, llm_message_type); LmMessage *message; - if (lua_gettop (L) > 2) { + if (lua_gettop (L) > 2) message = lm_message_new_with_sub_type (to, type, luaL_checkenum (L, 3, llm_message_sub_type)); - lua_pop (L, 1); - } else + else message = lm_message_new (to, type); - lua_pop (L, 2); llm_message_bless (L, message); lm_message_unref (message); + D ("Message %X created", (int) message); return 1; } @@ -87,7 +89,6 @@ { luaL_argcheck (L, lua_islightuserdata (L, 1), 1, "lm message lightuserdata expected"); llm_message_bless (L, lua_touserdata (L, 1)); - lua_remove (L, -2); return 1; } @@ -100,10 +101,12 @@ LmMessageNode *node = lm_message_get_node (object->message); llm_message_node_bless (L, node); // XXX lm_message_node_unref (node); - lua_remove (L, -2); return 1; } +// XXX: add node methods here to allow omitting of :node(): element +// BTW, we can jus adapt node methods to work on messages too and register them here also + /// message:type /// Returns two strings: message type and message sub type. /// R: message type, message sub type @@ -112,7 +115,6 @@ llm_message_t *object = luaL_checklm_message (L, 1); luaL_pushenum (L, lm_message_get_type (object->message), llm_message_type); luaL_pushenum (L, lm_message_get_sub_type (object->message), llm_message_sub_type); - lua_remove (L, -3); return 2; } @@ -123,15 +125,14 @@ { llm_message_t *object = luaL_checklm_message (L, 1); lua_pushlightuserdata (L, object->message); - lua_remove (L, -2); return 1; } static int llm_message_gc (lua_State *L) { - llm_message_t *object = luaL_checklm_message (L, 1); - lm_message_unref (object->message); - lua_pop (L, 1); + llm_message_t *message = luaL_checklm_message (L, 1); + D ("Message %X gc called", (int) message); + lm_message_unref (message->message); return 0; }