Exported<Actual>::Exported(lua_State *state, typename Exported<Actual>::Method *methods, lua_CFunction func) : luaState(state), methodList(methods) { lua_pushregistry(luaState, CLASS_REGISTRY); lua_newcppclass<Actual>(luaState, methodList, func); registerIndex = lua_tableinsert(luaState, -2); lua_pop(luaState, 1); }
static void traverseNodes(TidyDoc doc, lua_State *L, TidyNode node) { TidyNodeType nt = tidyNodeGetType ( node ); switch (nt) { case TidyNode_Text: if ( tidyNodeHasText (doc, node) ) { if ( push_node_text(L, doc, node) == 1 ) { lua_tableinsert(L); } } break; case TidyNode_Start: case TidyNode_StartEnd: lua_newtable(L); if ( push_node_attributes(L, node) == 1 ) { lua_pushstring(L, "attr"); lua_insert(L,-2); lua_rawset(L,-3); } lua_pushstring(L,"tag"); lua_pushstring(L, tidyNodeGetName (node)); lua_rawset(L,-3); traverseDeeper(doc, L, node); lua_tableinsert(L); break; case TidyNode_Root: traverseDeeper(doc, L, node); break; default: // ignore. keep gcc compiler happy. break; } }
int Exported<Actual>::registerObject(Actual *object) { lua_pushregistry(luaState, OBJECT_REGISTRY); // OBJECTS lua_boxobject<Actual>(luaState, object); // OBJECTS, object lua_pushregistry(luaState, CLASS_REGISTRY); // OBJECTS, object, CLASSES lua_pushnumber(luaState, registerIndex); // OBJECTS, object, CLASSES, classIndex lua_rawget(luaState, -2); // OBJECTS, object, CLASSES, classMeta lua_setmetatable(luaState, -3); // OBJECTS, object, CLASSES lua_pop(luaState, 1); // OBJECTS, object int result = lua_tableinsert(luaState, -2); // OBJECTS lua_pop(luaState, 1); // return result; }