aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2005-08-22 15:54:32 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2005-08-22 15:54:32 -0300
commit43ad0637ca376d22f8b64924b965d7316283ade7 (patch)
tree75570899a27161d8021bd7ff34c8635de04a7f97
parent027e9e99ca99cb572398d18d1c61a1ea2e804b71 (diff)
downloadlua-43ad0637ca376d22f8b64924b965d7316283ade7.tar.gz
lua-43ad0637ca376d22f8b64924b965d7316283ade7.tar.bz2
lua-43ad0637ca376d22f8b64924b965d7316283ade7.zip
small optimizations
-rw-r--r--lparser.c34
1 files changed, 17 insertions, 17 deletions
diff --git a/lparser.c b/lparser.c
index 2b85c1a9..aad41483 100644
--- a/lparser.c
+++ b/lparser.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lparser.c,v 2.31 2005/07/11 14:01:37 roberto Exp roberto $ 2** $Id: lparser.c,v 2.32 2005/08/17 18:32:09 roberto Exp roberto $
3** Lua Parser 3** Lua Parser
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -239,35 +239,35 @@ static void markupval (FuncState *fs, int level) {
239} 239}
240 240
241 241
242static void singlevaraux (FuncState *fs, TString *n, expdesc *var, int base) { 242static int singlevaraux (FuncState *fs, TString *n, expdesc *var, int base) {
243 if (fs == NULL) /* no more levels? */ 243 if (fs == NULL) { /* no more levels? */
244 init_exp(var, VGLOBAL, NO_REG); /* default is global variable */ 244 init_exp(var, VGLOBAL, NO_REG); /* default is global variable */
245 return VGLOBAL;
246 }
245 else { 247 else {
246 int v = searchvar(fs, n); /* look up at current level */ 248 int v = searchvar(fs, n); /* look up at current level */
247 if (v >= 0) { 249 if (v >= 0) {
248 init_exp(var, VLOCAL, v); 250 init_exp(var, VLOCAL, v);
249 if (!base) 251 if (!base)
250 markupval(fs, v); /* local will be used as an upval */ 252 markupval(fs, v); /* local will be used as an upval */
253 return VLOCAL;
251 } 254 }
252 else { /* not found at current level; try upper one */ 255 else { /* not found at current level; try upper one */
253 singlevaraux(fs->prev, n, var, 0); 256 if (singlevaraux(fs->prev, n, var, 0) == VGLOBAL)
254 if (var->k == VGLOBAL) { 257 return VGLOBAL;
255 if (base) 258 var->info = indexupvalue(fs, n, var); /* else was LOCAL or UPVAL */
256 var->info = luaK_stringK(fs, n); /* info points to global name */ 259 var->k = VUPVAL; /* upvalue in this level */
257 } 260 return VUPVAL;
258 else { /* LOCAL or UPVAL */
259 var->info = indexupvalue(fs, n, var);
260 var->k = VUPVAL; /* upvalue in this level */
261 }
262 } 261 }
263 } 262 }
264} 263}
265 264
266 265
267static TString *singlevar (LexState *ls, expdesc *var, int base) { 266static void singlevar (LexState *ls, expdesc *var) {
268 TString *varname = str_checkname(ls); 267 TString *varname = str_checkname(ls);
269 singlevaraux(ls->fs, varname, var, base); 268 FuncState *fs = ls->fs;
270 return varname; 269 if (singlevaraux(fs, varname, var, 1) == VGLOBAL)
270 var->info = luaK_stringK(fs, varname); /* info points to global name */
271} 271}
272 272
273 273
@@ -694,7 +694,7 @@ static void prefixexp (LexState *ls, expdesc *v) {
694 return; 694 return;
695 } 695 }
696 case TK_NAME: { 696 case TK_NAME: {
697 singlevar(ls, v, 1); 697 singlevar(ls, v);
698 return; 698 return;
699 } 699 }
700 default: { 700 default: {
@@ -1214,7 +1214,7 @@ static void localstat (LexState *ls) {
1214static int funcname (LexState *ls, expdesc *v) { 1214static int funcname (LexState *ls, expdesc *v) {
1215 /* funcname -> NAME {field} [`:' NAME] */ 1215 /* funcname -> NAME {field} [`:' NAME] */
1216 int needself = 0; 1216 int needself = 0;
1217 singlevar(ls, v, 1); 1217 singlevar(ls, v);
1218 while (ls->t.token == '.') 1218 while (ls->t.token == '.')
1219 field(ls, v); 1219 field(ls, v);
1220 if (ls->t.token == ':') { 1220 if (ls->t.token == ':') {