void luaV_setglobal(TaggedString *ts) { TObject *oldvalue = &ts->globalval; TObject *im = luaT_getimbyObj(oldvalue, IM_SETGLOBAL); if (ttype(im) == LUA_T_NIL) // default behavior */ luaS_rawsetglobal(ts, --lua_state->stack.top); else { // WARNING: caller must assure stack space Stack *S = &lua_state->stack; TObject newvalue = *(S->top - 1); ttype(S->top - 1) = LUA_T_STRING; tsvalue(S->top - 1) = ts; *S->top++ = *oldvalue; *S->top++ = newvalue; luaD_callTM(im, 3, 0); } }
void lua_rawsetglobal (char *name) { TaggedString *ts = luaS_new(name); checkCparams(1); luaS_rawsetglobal(ts, --L->stack.top); }