diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1997-11-19 15:29:23 -0200 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1997-11-19 15:29:23 -0200 |
| commit | 592a3f289b428e3ee5cc595a266607ad7f5d94ff (patch) | |
| tree | 19a371157be240f7e0f579117d04d466e911afcd /lbuiltin.c | |
| parent | 9cdeb275e7c93007b2ece6f81aaeafe530076805 (diff) | |
| download | lua-592a3f289b428e3ee5cc595a266607ad7f5d94ff.tar.gz lua-592a3f289b428e3ee5cc595a266607ad7f5d94ff.tar.bz2 lua-592a3f289b428e3ee5cc595a266607ad7f5d94ff.zip | |
first implementation of centralized global state.
Diffstat (limited to 'lbuiltin.c')
| -rw-r--r-- | lbuiltin.c | 29 |
1 files changed, 15 insertions, 14 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lbuiltin.c,v 1.6 1997/11/04 15:27:53 roberto Exp roberto $ | 2 | ** $Id: lbuiltin.c,v 1.7 1997/11/07 18:19:13 roberto Exp roberto $ |
| 3 | ** Built-in functions | 3 | ** Built-in functions |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -15,6 +15,7 @@ | |||
| 15 | #include "lfunc.h" | 15 | #include "lfunc.h" |
| 16 | #include "lmem.h" | 16 | #include "lmem.h" |
| 17 | #include "lobject.h" | 17 | #include "lobject.h" |
| 18 | #include "lstate.h" | ||
| 18 | #include "lstring.h" | 19 | #include "lstring.h" |
| 19 | #include "ltable.h" | 20 | #include "ltable.h" |
| 20 | #include "ltm.h" | 21 | #include "ltm.h" |
| @@ -51,7 +52,7 @@ static void nextvar (void) | |||
| 51 | TObject *o = luaA_Address(luaL_nonnullarg(1)); | 52 | TObject *o = luaA_Address(luaL_nonnullarg(1)); |
| 52 | TaggedString *g; | 53 | TaggedString *g; |
| 53 | if (ttype(o) == LUA_T_NIL) | 54 | if (ttype(o) == LUA_T_NIL) |
| 54 | g = (TaggedString *)luaS_root.next; | 55 | g = (TaggedString *)L->rootglobal.next; |
| 55 | else { | 56 | else { |
| 56 | luaL_arg_check(ttype(o) == LUA_T_STRING, 1, "variable name expected"); | 57 | luaL_arg_check(ttype(o) == LUA_T_STRING, 1, "variable name expected"); |
| 57 | g = tsvalue(o); | 58 | g = tsvalue(o); |
| @@ -72,21 +73,21 @@ static void foreachvar (void) | |||
| 72 | { | 73 | { |
| 73 | TObject f = *luaA_Address(functionarg(1)); | 74 | TObject f = *luaA_Address(functionarg(1)); |
| 74 | GCnode *g; | 75 | GCnode *g; |
| 75 | StkId name = luaD_Cstack.base++; /* place to keep var name (to avoid GC) */ | 76 | StkId name = L->Cstack.base++; /* place to keep var name (to avoid GC) */ |
| 76 | ttype(luaD_stack.stack+name) = LUA_T_NIL; | 77 | ttype(L->stack.stack+name) = LUA_T_NIL; |
| 77 | luaD_stack.top++; | 78 | L->stack.top++; |
| 78 | for (g = luaS_root.next; g; g = g->next) { | 79 | for (g = L->rootglobal.next; g; g = g->next) { |
| 79 | TaggedString *s = (TaggedString *)g; | 80 | TaggedString *s = (TaggedString *)g; |
| 80 | if (s->u.globalval.ttype != LUA_T_NIL) { | 81 | if (s->u.globalval.ttype != LUA_T_NIL) { |
| 81 | ttype(luaD_stack.stack+name) = LUA_T_STRING; | 82 | ttype(L->stack.stack+name) = LUA_T_STRING; |
| 82 | tsvalue(luaD_stack.stack+name) = s; /* keep s on stack to avoid GC */ | 83 | tsvalue(L->stack.stack+name) = s; /* keep s on stack to avoid GC */ |
| 83 | luaA_pushobject(&f); | 84 | luaA_pushobject(&f); |
| 84 | pushstring(s); | 85 | pushstring(s); |
| 85 | luaA_pushobject(&s->u.globalval); | 86 | luaA_pushobject(&s->u.globalval); |
| 86 | luaD_call((luaD_stack.top-luaD_stack.stack)-2, 1); | 87 | luaD_call((L->stack.top-L->stack.stack)-2, 1); |
| 87 | if (ttype(luaD_stack.top-1) != LUA_T_NIL) | 88 | if (ttype(L->stack.top-1) != LUA_T_NIL) |
| 88 | return; | 89 | return; |
| 89 | luaD_stack.top--; | 90 | L->stack.top--; |
| 90 | } | 91 | } |
| 91 | } | 92 | } |
| 92 | } | 93 | } |
| @@ -115,10 +116,10 @@ static void foreach (void) | |||
| 115 | luaA_pushobject(&f); | 116 | luaA_pushobject(&f); |
| 116 | luaA_pushobject(ref(nd)); | 117 | luaA_pushobject(ref(nd)); |
| 117 | luaA_pushobject(val(nd)); | 118 | luaA_pushobject(val(nd)); |
| 118 | luaD_call((luaD_stack.top-luaD_stack.stack)-2, 1); | 119 | luaD_call((L->stack.top-L->stack.stack)-2, 1); |
| 119 | if (ttype(luaD_stack.top-1) != LUA_T_NIL) | 120 | if (ttype(L->stack.top-1) != LUA_T_NIL) |
| 120 | return; | 121 | return; |
| 121 | luaD_stack.top--; | 122 | L->stack.top--; |
| 122 | } | 123 | } |
| 123 | } | 124 | } |
| 124 | } | 125 | } |
