equal
deleted
inserted
replaced
24 #include "lm_types.h" |
24 #include "lm_types.h" |
25 #include "util.h" |
25 #include "util.h" |
26 |
26 |
27 void llm_callback_destroy (llm_callback_t *cb) |
27 void llm_callback_destroy (llm_callback_t *cb) |
28 { |
28 { |
29 D ("Destroying callback %X", (int) cb); |
29 D ("Destroying callback %p", cb); |
30 luaL_unref (cb->L, LUA_REGISTRYINDEX, cb->reference); |
30 luaL_unref (cb->L, LUA_REGISTRYINDEX, cb->reference); |
31 luaL_free (cb->L, cb); |
31 luaL_free (cb->L, cb); |
32 } |
32 } |
33 |
33 |
34 #define LLM_CHECK(WHAT, LWHAT, TYPE) \ |
34 #define LLM_CHECK(WHAT, LWHAT, TYPE) \ |
48 lua_pushlightuserdata (L, WHAT); /* 2 light userdata */ \ |
48 lua_pushlightuserdata (L, WHAT); /* 2 light userdata */ \ |
49 lua_rawget (L, -2); /* 2 object/nil */ \ |
49 lua_rawget (L, -2); /* 2 object/nil */ \ |
50 if (!lua_isnil (L, -1)) { /* 2 object */ \ |
50 if (!lua_isnil (L, -1)) { /* 2 object */ \ |
51 lua_remove (L, -2); /* 1 object */ \ |
51 lua_remove (L, -2); /* 1 object */ \ |
52 object = lua_touserdata (L, -1); \ |
52 object = lua_touserdata (L, -1); \ |
53 D ("Existing " #LWHAT " object %X requested", (int) object); \ |
53 D ("Existing " #LWHAT " object %p requested", object); \ |
54 return object; \ |
54 return object; \ |
55 } \ |
55 } \ |
56 /* 2 nil */ \ |
56 /* 2 nil */ \ |
57 lua_remove (L, -1); /* 1 registry table */ \ |
57 lua_remove (L, -1); /* 1 registry table */ \ |
58 object = lua_newuserdata (L, sizeof (llm_##WHAT##_t)); /* 2 userdata */ \ |
58 object = lua_newuserdata (L, sizeof (llm_##WHAT##_t)); /* 2 userdata */ \ |
62 lua_pushvalue (L, -2); /* 4 object */ \ |
62 lua_pushvalue (L, -2); /* 4 object */ \ |
63 lua_rawset (L, -4); /* 2 object */ \ |
63 lua_rawset (L, -4); /* 2 object */ \ |
64 lua_remove (L, -2); /* 1 object */ \ |
64 lua_remove (L, -2); /* 1 object */ \ |
65 object->WHAT = WHAT; \ |
65 object->WHAT = WHAT; \ |
66 lm_##LWHAT##_ref (WHAT); \ |
66 lm_##LWHAT##_ref (WHAT); \ |
67 D ("New " #LWHAT " object %X blessed", (int) object); \ |
67 D ("New " #LWHAT " object %p blessed", object); \ |
68 return object; \ |
68 return object; \ |
69 } |
69 } |
70 |
70 |
71 #define LLM_DEFINE(WHAT, LWHAT, TYPE) \ |
71 #define LLM_DEFINE(WHAT, LWHAT, TYPE) \ |
72 LLM_CHECK (WHAT, LWHAT, TYPE) \ |
72 LLM_CHECK (WHAT, LWHAT, TYPE) \ |