diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1997-09-26 12:02:26 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1997-09-26 12:02:26 -0300 |
commit | a580480b07cdf7201306b246deeb2fe84f2c25a9 (patch) | |
tree | 30e9d4798228156eea5be2589834f1ff2db4355e /lvm.c | |
parent | 0dd6d1080e7f58eb17cb8a2ad3fc5801ed7c0532 (diff) | |
download | lua-a580480b07cdf7201306b246deeb2fe84f2c25a9.tar.gz lua-a580480b07cdf7201306b246deeb2fe84f2c25a9.tar.bz2 lua-a580480b07cdf7201306b246deeb2fe84f2c25a9.zip |
new implementation for globals: Global value is stored in TaggedString
Diffstat (limited to 'lvm.c')
-rw-r--r-- | lvm.c | 21 |
1 files changed, 10 insertions, 11 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lvm.c,v 1.4 1997/09/22 20:53:20 roberto Exp roberto $ | 2 | ** $Id: lvm.c,v 1.5 1997/09/24 19:43:11 roberto Exp roberto $ |
3 | ** Lua virtual machine | 3 | ** Lua virtual machine |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -12,7 +12,6 @@ | |||
12 | #include "ldo.h" | 12 | #include "ldo.h" |
13 | #include "lfunc.h" | 13 | #include "lfunc.h" |
14 | #include "lgc.h" | 14 | #include "lgc.h" |
15 | #include "lglobal.h" | ||
16 | #include "lmem.h" | 15 | #include "lmem.h" |
17 | #include "lopcodes.h" | 16 | #include "lopcodes.h" |
18 | #include "lstring.h" | 17 | #include "lstring.h" |
@@ -155,17 +154,17 @@ void luaV_settable (TObject *t, int mode) | |||
155 | } | 154 | } |
156 | 155 | ||
157 | 156 | ||
158 | void luaV_getglobal (Word n) | 157 | void luaV_getglobal (TaggedString *ts) |
159 | { | 158 | { |
160 | /* WARNING: caller must assure stack space */ | 159 | /* WARNING: caller must assure stack space */ |
161 | TObject *value = &luaG_global[n].object; | 160 | TObject *value = &ts->u.globalval; |
162 | TObject *im = luaT_getimbyObj(value, IM_GETGLOBAL); | 161 | TObject *im = luaT_getimbyObj(value, IM_GETGLOBAL); |
163 | if (ttype(im) == LUA_T_NIL) { /* default behavior */ | 162 | if (ttype(im) == LUA_T_NIL) { /* default behavior */ |
164 | *luaD_stack.top++ = *value; | 163 | *luaD_stack.top++ = *value; |
165 | } | 164 | } |
166 | else { | 165 | else { |
167 | ttype(luaD_stack.top) = LUA_T_STRING; | 166 | ttype(luaD_stack.top) = LUA_T_STRING; |
168 | tsvalue(luaD_stack.top) = luaG_global[n].varname; | 167 | tsvalue(luaD_stack.top) = ts; |
169 | luaD_stack.top++; | 168 | luaD_stack.top++; |
170 | *luaD_stack.top++ = *value; | 169 | *luaD_stack.top++ = *value; |
171 | luaD_callTM(im, 2, 1); | 170 | luaD_callTM(im, 2, 1); |
@@ -173,17 +172,17 @@ void luaV_getglobal (Word n) | |||
173 | } | 172 | } |
174 | 173 | ||
175 | 174 | ||
176 | void luaV_setglobal (Word n) | 175 | void luaV_setglobal (TaggedString *ts) |
177 | { | 176 | { |
178 | TObject *oldvalue = &luaG_global[n].object; | 177 | TObject *oldvalue = &ts->u.globalval; |
179 | TObject *im = luaT_getimbyObj(oldvalue, IM_SETGLOBAL); | 178 | TObject *im = luaT_getimbyObj(oldvalue, IM_SETGLOBAL); |
180 | if (ttype(im) == LUA_T_NIL) /* default behavior */ | 179 | if (ttype(im) == LUA_T_NIL) /* default behavior */ |
181 | s_object(n) = *(--luaD_stack.top); | 180 | luaS_rawsetglobal(ts, --luaD_stack.top); |
182 | else { | 181 | else { |
183 | /* WARNING: caller must assure stack space */ | 182 | /* WARNING: caller must assure stack space */ |
184 | TObject newvalue = *(luaD_stack.top-1); | 183 | TObject newvalue = *(luaD_stack.top-1); |
185 | ttype(luaD_stack.top-1) = LUA_T_STRING; | 184 | ttype(luaD_stack.top-1) = LUA_T_STRING; |
186 | tsvalue(luaD_stack.top-1) = luaG_global[n].varname; | 185 | tsvalue(luaD_stack.top-1) = ts; |
187 | *luaD_stack.top++ = *oldvalue; | 186 | *luaD_stack.top++ = *oldvalue; |
188 | *luaD_stack.top++ = newvalue; | 187 | *luaD_stack.top++ = newvalue; |
189 | luaD_callTM(im, 3, 0); | 188 | luaD_callTM(im, 3, 0); |
@@ -334,7 +333,7 @@ StkId luaV_execute (Closure *cl, StkId base) | |||
334 | case GETGLOBAL9: | 333 | case GETGLOBAL9: |
335 | aux -= GETGLOBAL0; | 334 | aux -= GETGLOBAL0; |
336 | getglobal: | 335 | getglobal: |
337 | luaV_getglobal(luaG_findsymbol(tsvalue(&consts[aux]))); | 336 | luaV_getglobal(tsvalue(&consts[aux])); |
338 | break; | 337 | break; |
339 | 338 | ||
340 | case GETTABLE: | 339 | case GETTABLE: |
@@ -396,7 +395,7 @@ StkId luaV_execute (Closure *cl, StkId base) | |||
396 | case SETGLOBALB: | 395 | case SETGLOBALB: |
397 | aux = *pc++; | 396 | aux = *pc++; |
398 | setglobal: | 397 | setglobal: |
399 | luaV_setglobal(luaG_findsymbol(tsvalue(&consts[aux]))); | 398 | luaV_setglobal(tsvalue(&consts[aux])); |
400 | break; | 399 | break; |
401 | 400 | ||
402 | case SETTABLE0: | 401 | case SETTABLE0: |