Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Don't protect access to the metatable from Lua.
authorChristophe Thiéry <christopho128@gmail.com>
Thu, 10 Nov 2011 13:13:31 +0000 (14:13 +0100)
committerChristophe Thiéry <christopho128@gmail.com>
Thu, 10 Nov 2011 16:00:16 +0000 (17:00 +0100)
Lua code can never change the metatable of a userdata anyway
(setmetatable is possible only for a table).
getmetatable is now allowed for tasks and hosts: it's harmless and lets
people extend them.

src/bindings/lua/simgrid_lua.c

index 9de044a..3496588 100644 (file)
@@ -858,12 +858,6 @@ static void register_task_functions(lua_State* L) {
   // writing doesn't work
   lua_setfield(L, -2, "__index");
                                   /* simgrid.task mt */
-  lua_pushliteral(L, "__metatable");
-                                  /* simgrid.task mt "__metatable" */
-  lua_pushnumber(L, 0);
-                                  /* simgrid.task mt "__metatable" 0 */
-  /* protect the metatable from Lua code (by setting any value to __metatable) */
-  lua_rawset(L, -3);              /* simgrid.task mt */
   lua_pop(L, 2);
                                   /* -- */
 }
@@ -896,12 +890,6 @@ static void register_host_functions(lua_State* L) {
   // FIXME: cannot work currently, same problem as tasks
   lua_setfield(L, -2, "__index");
                                   /* simgrid.host mt */
-  lua_pushliteral(L, "__metatable");
-                                  /* simgrid.host mt "__metatable" */
-  lua_pushnumber(L, 0);
-                                  /* simgrid.host mt "__metatable" 0 */
-  /* protect the metatable from Lua code (by setting any value to __metatable) */
-  lua_rawset(L, -3);              /* simgrid.host mt */
   lua_pop(L, 2);
                                   /* -- */
 }