Lines Matching defs:script
9 #include "dlua-script-private.h"
51 struct dlua_script *script =
55 p_free(script->pool, ptr);
58 return p_realloc(script->pool, ptr, osize, nsize);
64 struct dlua_script *script =
67 i_stream_skip(script->in, script->last_read);
68 if (i_stream_read_more(script->in, &data, size_r) == -1 &&
69 script->in->stream_errno != 0) {
71 script->filename,
72 i_stream_get_error(script->in)));
76 script->last_read = *size_r;
82 struct dlua_script *script;
83 for(script = dlua_scripts; script != NULL; script = script->next)
84 if (script->L == L)
85 return script;
89 int dlua_script_init(struct dlua_script *script, const char **error_r)
93 if (script->init)
95 script->init = TRUE;
98 lua_getglobal(script->L, LUA_SCRIPT_INIT_FN);
100 if (lua_isfunction(script->L, -1)) {
101 ret = lua_pcall(script->L, 0, 1, 0);
104 lua_tostring(script->L, -1));
106 } else if (lua_isnumber(script->L, -1)) {
107 ret = lua_tointeger(script->L, -1);
116 lua_pop(script->L, 1);
122 pool_t pool = pool_allocfree_create(t_strdup_printf("lua script %s", name));
123 struct dlua_script *script = p_new(pool, struct dlua_script, 1);
124 script->pool = pool;
125 script->filename = p_strdup(pool, name);
129 script->L = lua_newstate(dlua_alloc, script);
130 i_assert(script->L != NULL);
131 script->ref = 1;
132 luaL_openlibs(script->L);
134 return script;
137 static int dlua_run_script(struct dlua_script *script, const char **error_r)
139 int err = lua_pcall(script->L, 0, 0, 0);
142 script->filename,
143 lua_tostring(script->L, -1));
144 lua_pop(script->L,1);
153 struct dlua_script *script;
154 for(script = dlua_scripts; script != NULL; script = script->next)
155 if (strcmp(script->filename, filename)==0)
156 return script;
161 dlua_script_create_finish(struct dlua_script *script, struct dlua_script **script_r,
164 if (dlua_run_script(script, error_r) < 0) {
165 dlua_script_unref(&script);
169 DLLIST_PREPEND(&dlua_scripts, script);
171 *script_r = script;
179 struct dlua_script *script;
188 if ((script = dlua_script_find_previous_script(fn)) != NULL) {
189 dlua_script_ref(script);
190 *script_r = script;
194 script = dlua_create_script(fn);
195 if ((err = luaL_loadstring(script->L, str)) != 0) {
198 dlua_script_unref(&script);
202 return dlua_script_create_finish(script, script_r, error_r);
208 struct dlua_script *script;
211 if ((script = dlua_script_find_previous_script(file)) != NULL) {
212 dlua_script_ref(script);
213 *script_r = script;
227 script = dlua_create_script(file);
228 if ((err = luaL_loadfile(script->L, file)) != 0) {
231 dlua_script_unref(&script);
235 return dlua_script_create_finish(script, script_r, error_r);
241 struct dlua_script *script;
247 if ((script = dlua_script_find_previous_script(filename)) != NULL) {
248 dlua_script_ref(script);
249 *script_r = script;
253 script = dlua_create_script(filename);
254 script->in = is;
255 script->filename = p_strdup(script->pool, filename);
256 if ((err = lua_load(script->L, dlua_reader, script, filename, 0)) < 0) {
259 dlua_script_unref(&script);
263 return dlua_script_create_finish(script, script_r, error_r);
266 static void dlua_script_destroy(struct dlua_script *script)
271 lua_getglobal(script->L, LUA_SCRIPT_DEINIT_FN);
272 if (lua_isfunction(script->L, -1)) {
273 ret = lua_pcall(script->L, 0, 0, 0);
276 lua_tostring(script->L, -1));
277 lua_pop(script->L, 1);
280 lua_pop(script->L, 1);
282 lua_close(script->L);
284 pool_unref(&script->pool);
287 void dlua_script_ref(struct dlua_script *script)
289 i_assert(script->ref > 0);
290 script->ref++;
295 struct dlua_script *script = *_script;
298 if (script == NULL) return;
300 i_assert(script->ref > 0);
301 if (--script->ref > 0)
304 dlua_script_destroy(script);
307 bool dlua_script_has_function(struct dlua_script *script, const char *fn)
309 i_assert(script != NULL);
310 lua_getglobal(script->L, fn);
311 bool ret = lua_isfunction(script->L, -1);
312 lua_pop(script->L, 1);
316 void dlua_setmembers(struct dlua_script *script,
319 i_assert(script != NULL);
320 i_assert(lua_istable(script->L, idx));
324 lua_pushstring(script->L, values->v.s);
327 lua_pushnumber(script->L, values->v.i);
330 lua_pushnumber(script->L, values->v.d);
333 lua_pushboolean(script->L, values->v.b ? 1 : 0);
336 lua_pushnil(script->L);
341 lua_setfield(script->L, idx-1, values->name);