rendered paste bodyint typel_mtindex(lua_State *state) { typel_inst *inst = lua_touserdata(state, 1); typel_class *type = inst->type; char *attrname = lua_tostring(state, 2); int result = 0; if(!inst->self) { lua_pushnil(state); return 1; } if(type->getattr) result = type->getattr(state, inst->self, attrname); if(!result) { // the attribute was not handled by the getattr method // next, try the prototype table sl_pushref(state, type->protoref); lua_getfield(state, -1, attrname); if(lua_isnil(state, -1)) { lua_pop(state, 2); // clean up the stack // then try the data table associated with the instance //lua_pushvalue(state,-1 sl_pushref(state, inst->dataref); lua_getfield(state, -1, attrname); if(lua_isnil(state, -1)) { // there is no such attribute; push nil lua_pop(state, 1); lua_pushnil(state); } } lua_replace(state, -2); } return 1;}int typel_mtnewindex(lua_State *state) { typel_inst *inst = lua_touserdata(state, 1); typel_class *type = inst->type; char *attrname = lua_tostring(state, 2); if(!inst->self) { return 0; } int result = 0; if(type->setattr) result = type->setattr(state, inst->self, attrname); if(!result) { /* TODO: error */ } return 0;}