forked from enlightenment/efl
parent
30add22439
commit
b02d727737
|
@ -247,6 +247,9 @@ collections {
|
||||||
text = edje.text_class("test_text_class", "Sans:style=Bold", 8);
|
text = edje.text_class("test_text_class", "Sans:style=Bold", 8);
|
||||||
print("lua::text_class= " .. text.font .. " size " .. text.size);
|
print("lua::text_class= " .. text.font .. " size " .. text.size);
|
||||||
|
|
||||||
|
--// Do something bad, just to see what happens.
|
||||||
|
--// edje.color_class(nil);
|
||||||
|
|
||||||
--// shutdown func - generally empty or not there. everything garbage collected for you
|
--// shutdown func - generally empty or not there. everything garbage collected for you
|
||||||
function shutdown ()
|
function shutdown ()
|
||||||
print("lua::shutdown ... " .. D.val);
|
print("lua::shutdown ... " .. D.val);
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
// FIXME: Review error behaviour when lua throws errors.
|
|
||||||
|
|
||||||
// FIXME: Some error checking would be nice.
|
// FIXME: Some error checking would be nice.
|
||||||
|
|
||||||
|
|
||||||
|
@ -133,7 +131,10 @@ static lua_State *lstate = NULL;
|
||||||
#endif
|
#endif
|
||||||
static const char *_elua_key = "key";
|
static const char *_elua_key = "key";
|
||||||
static const char *_elua_objs = "objs";
|
static const char *_elua_objs = "objs";
|
||||||
|
/* This is not needed, pcalls don't longjmp(), that's why they are protected.
|
||||||
static jmp_buf panic_jmp;
|
static jmp_buf panic_jmp;
|
||||||
|
*/
|
||||||
|
static int panics = 0;
|
||||||
static int _log_domain = -1;
|
static int _log_domain = -1;
|
||||||
static int _log_count = 0;
|
static int _log_count = 0;
|
||||||
|
|
||||||
|
@ -232,10 +233,26 @@ _elua_alloc(void *ud, void *ptr, size_t osize, size_t nsize)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
_elua_custom_panic(lua_State *L __UNUSED__)
|
_elua_custom_panic(lua_State *L) // Stack usage [-0, +0, m]
|
||||||
{
|
{
|
||||||
ERR("Lua Panic!!!!");
|
// If we somehow manage to have multiple panics, it's likely due to being out
|
||||||
return 1;
|
// of memory in the following lua_tostring() call.
|
||||||
|
panics++;
|
||||||
|
if (panics)
|
||||||
|
{
|
||||||
|
EINA_LOG_DOM_CRIT(_edje_default_log_dom, "Lua PANICS!!!!!");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
EINA_LOG_DOM_CRIT(_edje_default_log_dom,
|
||||||
|
"Lua PANIC!!!!!: %s", lua_tostring(L, -1)); // Stack usage [-0, +0, m]
|
||||||
|
}
|
||||||
|
// The docs say that this will cause an exit(EXIT_FAILURE) if we return,
|
||||||
|
// and that we we should long jump some where to avoid that. This is only
|
||||||
|
// called for things not called from a protected environment. We always
|
||||||
|
// use pcalls though, except for the library load calls. If we can't load
|
||||||
|
// the standard libraries, then perhaps a crash is the right thing.
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Really only used to manage the pointer to our edje.
|
// Really only used to manage the pointer to our edje.
|
||||||
|
@ -1062,7 +1079,7 @@ _elua_messagesend(lua_State *L) // Stack usage [-2, +2, ev] plus [-2, +2] for e
|
||||||
|
|
||||||
//-------------
|
//-------------
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
_elua_animator_cb(void *data) // Stack usage [-2, +2, e]
|
_elua_animator_cb(void *data) // Stack usage [-2, +2, em]
|
||||||
{
|
{
|
||||||
Edje_Lua_Animator *ela = data;
|
Edje_Lua_Animator *ela = data;
|
||||||
lua_State *L;
|
lua_State *L;
|
||||||
|
@ -1071,18 +1088,20 @@ _elua_animator_cb(void *data) // Stack usage [-2,
|
||||||
if (!ela->obj.ed) return 0;
|
if (!ela->obj.ed) return 0;
|
||||||
L = ela->obj.ed->L;
|
L = ela->obj.ed->L;
|
||||||
if (!L) return 0;
|
if (!L) return 0;
|
||||||
|
/* This is not needed, pcalls don't longjmp(), that's why they are protected.
|
||||||
if (setjmp(panic_jmp) == 1)
|
if (setjmp(panic_jmp) == 1)
|
||||||
{
|
{
|
||||||
LE("Animator callback panic");
|
LE("Animator callback panic");
|
||||||
_edje_lua2_error(L, err);
|
_edje_lua2_error(L, err); // Stack usage [-0, +0, m]
|
||||||
_elua_obj_free(L, (Edje_Lua_Obj *)ela);
|
_elua_obj_free(L, (Edje_Lua_Obj *)ela);
|
||||||
_elua_gc(L); // Stack usage [-0, +0, e]
|
_elua_gc(L); // Stack usage [-0, +0, e]
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
lua_rawgeti(L, LUA_REGISTRYINDEX, ela->fn_ref); // Stack usage [-0, +1, -]
|
lua_rawgeti(L, LUA_REGISTRYINDEX, ela->fn_ref); // Stack usage [-0, +1, -]
|
||||||
if ((err = lua_pcall(L, 0, 1, 0))) // Stack usage [-1, +1, -]
|
if ((err = lua_pcall(L, 0, 1, 0))) // Stack usage [-1, +1, -]
|
||||||
{
|
{
|
||||||
_edje_lua2_error(L, err);
|
_edje_lua2_error(L, err); // Stack usage [-0, +0, m]
|
||||||
_elua_obj_free(L, (Edje_Lua_Obj *)ela);
|
_elua_obj_free(L, (Edje_Lua_Obj *)ela);
|
||||||
_elua_gc(L); // Stack usage [-0, +0, e]
|
_elua_gc(L); // Stack usage [-0, +0, e]
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1147,7 +1166,7 @@ _elua_animator(lua_State *L) // Stack usage [-8,
|
||||||
}
|
}
|
||||||
|
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
_elua_timer_cb(void *data) // Stack usage [-2, +2, e]
|
_elua_timer_cb(void *data) // Stack usage [-2, +2, em]
|
||||||
{
|
{
|
||||||
Edje_Lua_Timer *elt = data;
|
Edje_Lua_Timer *elt = data;
|
||||||
lua_State *L;
|
lua_State *L;
|
||||||
|
@ -1156,19 +1175,21 @@ _elua_timer_cb(void *data) // Stack usage [-2,
|
||||||
if (!elt->obj.ed) return 0;
|
if (!elt->obj.ed) return 0;
|
||||||
L = elt->obj.ed->L;
|
L = elt->obj.ed->L;
|
||||||
if (!L) return 0;
|
if (!L) return 0;
|
||||||
lua_rawgeti(L, LUA_REGISTRYINDEX, elt->fn_ref); // Stack usage [-0, +1, -]
|
/* This is not needed, pcalls don't longjmp(), that's why they are protected.
|
||||||
if (setjmp(panic_jmp) == 1)
|
if (setjmp(panic_jmp) == 1)
|
||||||
{
|
{
|
||||||
LE("Timer callback panic");
|
LE("Timer callback panic");
|
||||||
_edje_lua2_error(L, err);
|
_edje_lua2_error(L, err); // Stack usage [-0, +0, m]
|
||||||
_elua_obj_free(L, (Edje_Lua_Obj *)elt);
|
_elua_obj_free(L, (Edje_Lua_Obj *)elt);
|
||||||
_elua_gc(L); // Stack usage [-0, +0, e]
|
_elua_gc(L); // Stack usage [-0, +0, e]
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
lua_rawgeti(L, LUA_REGISTRYINDEX, elt->fn_ref); // Stack usage [-0, +1, -]
|
||||||
if ((err = lua_pcall(L, 0, 1, 0))) // Stack usage [-1, +1, -]
|
if ((err = lua_pcall(L, 0, 1, 0))) // Stack usage [-1, +1, -]
|
||||||
{
|
{
|
||||||
_edje_lua2_error(L, err);
|
_edje_lua2_error(L, err);
|
||||||
_elua_obj_free(L, (Edje_Lua_Obj *)elt);
|
_elua_obj_free(L, (Edje_Lua_Obj *)elt); // Stack usage [-0, +0, m]
|
||||||
_elua_gc(L); // Stack usage [-0, +0, e]
|
_elua_gc(L); // Stack usage [-0, +0, e]
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1232,7 +1253,7 @@ _elua_timer(lua_State *L) // Stack usage [-8,
|
||||||
}
|
}
|
||||||
|
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
_elua_transition_cb(void *data) // Stack usage [-3, +3, e]
|
_elua_transition_cb(void *data) // Stack usage [-3, +3, em]
|
||||||
{
|
{
|
||||||
Edje_Lua_Transition *elt = data;
|
Edje_Lua_Transition *elt = data;
|
||||||
lua_State *L;
|
lua_State *L;
|
||||||
|
@ -1244,20 +1265,22 @@ _elua_transition_cb(void *data) // Stack usage [-3,
|
||||||
if (!L) return 0;
|
if (!L) return 0;
|
||||||
t = (ecore_loop_time_get() - elt->start) / elt->transition;
|
t = (ecore_loop_time_get() - elt->start) / elt->transition;
|
||||||
if (t > 1.0) t = 1.0;
|
if (t > 1.0) t = 1.0;
|
||||||
lua_rawgeti(L, LUA_REGISTRYINDEX, elt->fn_ref); // Stack usage [-0, +1, -]
|
/* This is not needed, pcalls don't longjmp(), that's why they are protected.
|
||||||
lua_pushnumber(L, t); // Stack usage [-0, +1, -]
|
|
||||||
if (setjmp(panic_jmp) == 1)
|
if (setjmp(panic_jmp) == 1)
|
||||||
{
|
{
|
||||||
LE("Transition callback panic");
|
LE("Transition callback panic");
|
||||||
_edje_lua2_error(L, err);
|
_edje_lua2_error(L, err); // Stack usage [-0, +0, m]
|
||||||
_elua_obj_free(L, (Edje_Lua_Obj *)elt);
|
_elua_obj_free(L, (Edje_Lua_Obj *)elt);
|
||||||
_elua_gc(L); // Stack usage [-0, +0, e]
|
_elua_gc(L); // Stack usage [-0, +0, e]
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
lua_rawgeti(L, LUA_REGISTRYINDEX, elt->fn_ref); // Stack usage [-0, +1, -]
|
||||||
|
lua_pushnumber(L, t); // Stack usage [-0, +1, -]
|
||||||
if ((err = lua_pcall(L, 1, 1, 0))) // Stack usage [-2, +1, -]
|
if ((err = lua_pcall(L, 1, 1, 0))) // Stack usage [-2, +1, -]
|
||||||
{
|
{
|
||||||
_edje_lua2_error(L, err);
|
_edje_lua2_error(L, err);
|
||||||
_elua_obj_free(L, (Edje_Lua_Obj *)elt);
|
_elua_obj_free(L, (Edje_Lua_Obj *)elt); // Stack usage [-0, +0, m]
|
||||||
_elua_gc(L); // Stack usage [-0, +0, e]
|
_elua_gc(L); // Stack usage [-0, +0, e]
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -3379,13 +3402,15 @@ _edje_lua2_script_init(Edje *ed) // Stack usage
|
||||||
lua_tostring(L, -1)); // Stack usage [-0, +0, m]
|
lua_tostring(L, -1)); // Stack usage [-0, +0, m]
|
||||||
}
|
}
|
||||||
free(data);
|
free(data);
|
||||||
|
/* This is not needed, pcalls don't longjmp(), that's why they are protected.
|
||||||
if (setjmp(panic_jmp) == 1)
|
if (setjmp(panic_jmp) == 1)
|
||||||
{
|
{
|
||||||
ERR("Lua script init panic");
|
ERR("Lua script init panic");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
if ((err = lua_pcall(L, 0, 0, 0))) // Stack usage [-1, +0, -]
|
if ((err = lua_pcall(L, 0, 0, 0))) // Stack usage [-1, +0, -]
|
||||||
_edje_lua2_error(L, err);
|
_edje_lua2_error(L, err); // Stack usage [-0, +0, m]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3443,7 +3468,7 @@ _edje_lua2_script_unload(Edje_Part_Collection *edc __UNUSED__) // Stack usage [
|
||||||
|
|
||||||
void
|
void
|
||||||
_edje_lua2_error_full(const char *file, const char *fnc, int line,
|
_edje_lua2_error_full(const char *file, const char *fnc, int line,
|
||||||
lua_State *L, int err_code)
|
lua_State *L, int err_code) // Stack usage [-0, +0, m]
|
||||||
{
|
{
|
||||||
const char *err_type;
|
const char *err_type;
|
||||||
|
|
||||||
|
@ -3467,7 +3492,7 @@ _edje_lua2_error_full(const char *file, const char *fnc, int line,
|
||||||
}
|
}
|
||||||
eina_log_print
|
eina_log_print
|
||||||
(_edje_default_log_dom, EINA_LOG_LEVEL_ERR, file, fnc, line,
|
(_edje_default_log_dom, EINA_LOG_LEVEL_ERR, file, fnc, line,
|
||||||
"Lua %s error: %s", err_type, lua_tostring(L, -1));
|
"Lua %s error: %s", err_type, lua_tostring(L, -1)); // Stack usage [-0, +0, m]
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -3488,7 +3513,7 @@ If a function called "shutdown" exists in a lua edje group, then it is called wh
|
||||||
that edje gets deleted.
|
that edje gets deleted.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
_edje_lua2_script_func_shutdown(Edje *ed) // Stack usage [-1, +1, e]
|
_edje_lua2_script_func_shutdown(Edje *ed) // Stack usage [-1, +1, em]
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
|
@ -3496,7 +3521,7 @@ _edje_lua2_script_func_shutdown(Edje *ed) // Stack usage [-1, +1, e]
|
||||||
if (!lua_isnil(ed->L, -1)) // Stack usage [-0, +0, -]
|
if (!lua_isnil(ed->L, -1)) // Stack usage [-0, +0, -]
|
||||||
{
|
{
|
||||||
if ((err = lua_pcall(ed->L, 0, 0, 0))) // Stack usage [-1, +0, -]
|
if ((err = lua_pcall(ed->L, 0, 0, 0))) // Stack usage [-1, +0, -]
|
||||||
_edje_lua2_error(ed->L, err);
|
_edje_lua2_error(ed->L, err); // Stack usage [-0, +0, m]
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
lua_pop(ed->L, 1); // Stack usage [-n, +0, -]
|
lua_pop(ed->L, 1); // Stack usage [-n, +0, -]
|
||||||
|
|
Loading…
Reference in New Issue