case LUA_TTHREAD:
sglua_copy_thread(src, dst);
break;
+
+ case LUA_TNONE:
+ XBT_ERROR("This index is acceptable but non-valid");
+ break;
}
XBT_DEBUG("%sData copied", sglua_get_spaces(indent));
* @param dst destination state
*/
static void sglua_copy_number(lua_State* src, lua_State* dst) {
- lua_pushnumber(dst, lua_tonumber(src, -1));
+ lua_Number n = lua_tonumber(src, -1);
+ if ( ((lua_Integer) n) == n) {
+ lua_pushinteger(dst, lua_tointeger(src, -1));
+ }
+ else
+ lua_pushnumber(dst, lua_tonumber(src, -1));
}
/**
/* L: table key */
XBT_DEBUG("__index of '%s' begins", key);
- /* want a global or a registry value? */
- int pseudo_index;
+ /* get the father */
+ lua_State* maestro = sglua_get_maestro(); /* maestro: */
+
+ /* want a global or a registry value?
+ get the value from maestro */
if (lua_compare(L, 1, LUA_REGISTRYINDEX, LUA_OPEQ)) {
- /* registry */
- pseudo_index = LUA_REGISTRYINDEX;
+ /* case: registry */
+ lua_getfield(maestro, LUA_REGISTRYINDEX, key); /* maestro: ... value */
XBT_DEBUG("Will get the value from the registry of maestro");
}
- else {
- /* global */
- pseudo_index = lua_getfield(L, LUA_REGISTRYINDEX, LUA_RIDX_GLOBALS);
+ else { /* case: global */
+ lua_getglobal(maestro, key); /* maestro: ... value */
XBT_DEBUG("Will get the value from the globals of maestro");
}
- /* get the father */
- lua_State* maestro = sglua_get_maestro();
-
- /* L: table key */
+ /* L: table key */
- /* get the value from maestro */
- lua_getfield(maestro, pseudo_index, key);
- /* maestro: ... value */
/* push the value onto the stack of L */
sglua_move_value(maestro, L);
lua_setmetatable(L, -2); /* thread newenv mt reg */
lua_pop(L, 1); /* thread newenv mt */
lua_setmetatable(L, -2); /* thread newenv */
- // TODO c.heinrich This needs to be re-implemented
- /*lua_setfenv(L, -2); [> thread <]*/
- lua_pop(L, 1); /* -- */
+ lua_pushvalue(L, LUA_REGISTRYINDEX); /* thread newenv reg */
+ lua_insert(L, -2); /* thread reg newenv */
+ lua_seti(L, -2, LUA_RIDX_GLOBALS); /* thread reg */
+ lua_pop(L, 2); /* -- */
/* create the table of known tables from maestro */
lua_pushstring(L, "simgrid.maestro_tables");