Просмотр исходного кода

Make the following safe in lua: delete(nil); double delete(); delete() followed by GC

mcc 13 лет назад
Родитель
Сommit
fec6e15a43
1 измененных файлов с 4 добавлено и 3 удалено
  1. 4 3
      Bindings/Scripts/create_lua_library/create_lua_library.py

+ 4 - 3
Bindings/Scripts/create_lua_library/create_lua_library.py

@@ -724,14 +724,15 @@ def createLUABindings(inputPath, prefix, mainInclude, libSmallName, libName, api
 				cppRegisterOut += "\t\t{\"delete_%s\", %s_delete_%s},\n" % (ckey, libName, ckey)
 				wrappersHeaderOut += "static int %s_delete_%s(lua_State *L) {\n" % (libName, ckey)
 				wrappersHeaderOut += "\tluaL_checktype(L, 1, LUA_TUSERDATA);\n"
-				wrappersHeaderOut += "\t%s *inst = (%s*) *((PolyBase**)lua_touserdata(L, 1));\n" % (ckey, ckey)
-				wrappersHeaderOut += "\tdelete inst;\n"
+				wrappersHeaderOut += "\tPolyBase **inst = (PolyBase**)lua_touserdata(L, 1);\n"
+				wrappersHeaderOut += "\tdelete ((%s*) *inst);\n" % (ckey)
+				wrappersHeaderOut += "\t*inst = NULL;\n"
 				wrappersHeaderOut += "\treturn 0;\n"
 				wrappersHeaderOut += "}\n\n"
 
 				# Delete method (Lua side)
 				luaClassBindingOut += "function %s:__delete()\n" % (ckey)
-				luaClassBindingOut += "\t%s.delete_%s(self.__ptr)\n" % (libName, ckey)
+				luaClassBindingOut += "\tif self then %s.delete_%s(self.__ptr) end\n" % (libName, ckey)
 				luaClassBindingOut += "end\n"
 					
 				# Add class to lua index file