aboutsummaryrefslogtreecommitdiff
path: root/lparser.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2000-02-11 14:52:54 -0200
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2000-02-11 14:52:54 -0200
commit52aad0ab5937d4df6fe07aedbf9987f2f792698c (patch)
tree9598361f6d635751fe3eb93c66acd1520f2619af /lparser.c
parent74f1c3d025c6d8a714454470a953f383a1c6a641 (diff)
downloadlua-52aad0ab5937d4df6fe07aedbf9987f2f792698c.tar.gz
lua-52aad0ab5937d4df6fe07aedbf9987f2f792698c.tar.bz2
lua-52aad0ab5937d4df6fe07aedbf9987f2f792698c.zip
removing implementation for better error messages (must rethink it...)
Diffstat (limited to 'lparser.c')
-rw-r--r--lparser.c45
1 files changed, 4 insertions, 41 deletions
diff --git a/lparser.c b/lparser.c
index 7c702a4d..09e7dd53 100644
--- a/lparser.c
+++ b/lparser.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lparser.c,v 1.56 2000/01/25 18:44:21 roberto Exp roberto $ 2** $Id: lparser.c,v 1.57 2000/01/28 16:53:00 roberto Exp roberto $
3** LL(1) Parser and code generator for Lua 3** LL(1) Parser and code generator for Lua
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -63,8 +63,6 @@ typedef enum {
63typedef struct vardesc { 63typedef struct vardesc {
64 varkind k; 64 varkind k;
65 int info; 65 int info;
66 varkind prev_k; /* for debug information (NAMEs) */
67 int prev_info;
68} vardesc; 66} vardesc;
69 67
70 68
@@ -386,31 +384,6 @@ static void check_debugline (LexState *ls) {
386} 384}
387 385
388 386
389static void code_setname (LexState *ls, const vardesc *v) {
390 if (ls->L->debug) {
391 switch (v->prev_k) {
392 case VGLOBAL:
393 code_oparg(ls, SETNAME, v->prev_info, 0);
394 code_byte(ls, -LUA_T_NGLOBAL);
395 break;
396 case VLOCAL: {
397 TaggedString *varname = ls->fs->localvar[v->prev_info];
398 code_oparg(ls, SETNAME, string_constant(ls, ls->fs, varname), 0);
399 code_byte(ls, -LUA_T_NLOCAL);
400 break;
401 }
402 case VDOT:
403 code_oparg(ls, SETNAME, v->prev_info, 0);
404 code_byte(ls, -LUA_T_NDOT);
405 break;
406 default: /* VINDEXED or VEXP: no debug information */
407 code_oparg(ls, SETNAME, 0, 0);
408 code_byte(ls, -LUA_T_NIL);
409 }
410 }
411}
412
413
414static void adjuststack (LexState *ls, int n) { 387static void adjuststack (LexState *ls, int n) {
415 if (n > 0) 388 if (n > 0)
416 code_oparg(ls, POP, n, -n); 389 code_oparg(ls, POP, n, -n);
@@ -485,19 +458,15 @@ static void lua_pushvar (LexState *ls, vardesc *var) {
485 assertglobal(ls, var->info); /* make sure that there is a global */ 458 assertglobal(ls, var->info); /* make sure that there is a global */
486 break; 459 break;
487 case VDOT: 460 case VDOT:
488 code_setname(ls, var);
489 code_oparg(ls, GETDOTTED, var->info, 0); 461 code_oparg(ls, GETDOTTED, var->info, 0);
490 break; 462 break;
491 case VINDEXED: 463 case VINDEXED:
492 code_setname(ls, var);
493 code_opcode(ls, GETTABLE, -1); 464 code_opcode(ls, GETTABLE, -1);
494 break; 465 break;
495 case VEXP: 466 case VEXP:
496 close_exp(ls, var->info, 1); /* function must return 1 value */ 467 close_exp(ls, var->info, 1); /* function must return 1 value */
497 break; 468 break;
498 } 469 }
499 var->prev_k = var->k; /* save previous var kind and info */
500 var->prev_info = var->info;
501 var->k = VEXP; 470 var->k = VEXP;
502 var->info = 0; /* now this is a closed expression */ 471 var->info = 0; /* now this is a closed expression */
503} 472}
@@ -513,7 +482,6 @@ static void storevar (LexState *ls, const vardesc *var) {
513 assertglobal(ls, var->info); /* make sure that there is a global */ 482 assertglobal(ls, var->info); /* make sure that there is a global */
514 break; 483 break;
515 case VINDEXED: 484 case VINDEXED:
516 code_setname(ls, var);
517 code_opcode(ls, SETTABLEPOP, -3); 485 code_opcode(ls, SETTABLEPOP, -3);
518 break; 486 break;
519 default: 487 default:
@@ -749,7 +717,7 @@ static void explist (LexState *ls, listdesc *d) {
749} 717}
750 718
751 719
752static int funcparams (LexState *ls, int slf, vardesc *v) { 720static int funcparams (LexState *ls, int slf) {
753 FuncState *fs = ls->fs; 721 FuncState *fs = ls->fs;
754 int slevel = fs->stacksize - slf - 1; /* where is func in the stack */ 722 int slevel = fs->stacksize - slf - 1; /* where is func in the stack */
755 switch (ls->token) { 723 switch (ls->token) {
@@ -776,7 +744,6 @@ static int funcparams (LexState *ls, int slf, vardesc *v) {
776 luaY_error(ls, "function arguments expected"); 744 luaY_error(ls, "function arguments expected");
777 break; 745 break;
778 } 746 }
779 code_setname(ls, v);
780 code_byte(ls, CALL); 747 code_byte(ls, CALL);
781 code_byte(ls, 0); /* save space for nresult */ 748 code_byte(ls, 0); /* save space for nresult */
782 code_byte(ls, (Byte)slevel); 749 code_byte(ls, (Byte)slevel);
@@ -808,19 +775,16 @@ static void var_or_func_tail (LexState *ls, vardesc *v) {
808 next(ls); 775 next(ls);
809 name = checkname(ls); 776 name = checkname(ls);
810 lua_pushvar(ls, v); /* `v' must be on stack */ 777 lua_pushvar(ls, v); /* `v' must be on stack */
811 code_setname(ls, v);
812 code_oparg(ls, PUSHSELF, name, 1); 778 code_oparg(ls, PUSHSELF, name, 1);
813 v->prev_k = VDOT; /* ':' is syntactic sugar for '.' */
814 v->prev_info = name;
815 v->k = VEXP; 779 v->k = VEXP;
816 v->info = funcparams(ls, 1, v); 780 v->info = funcparams(ls, 1);
817 break; 781 break;
818 } 782 }
819 783
820 case '(': case STRING: case '{': /* var_or_func_tail -> funcparams */ 784 case '(': case STRING: case '{': /* var_or_func_tail -> funcparams */
821 lua_pushvar(ls, v); /* `v' must be on stack */ 785 lua_pushvar(ls, v); /* `v' must be on stack */
822 v->k = VEXP; 786 v->k = VEXP;
823 v->info = funcparams(ls, 0, v); 787 v->info = funcparams(ls, 0);
824 break; 788 break;
825 789
826 default: return; /* should be follow... */ 790 default: return; /* should be follow... */
@@ -1203,7 +1167,6 @@ static int assignment (LexState *ls, vardesc *v, int nvars) {
1203 storevar(ls, v); 1167 storevar(ls, v);
1204 } 1168 }
1205 else { /* indexed var with values in between*/ 1169 else { /* indexed var with values in between*/
1206 code_setname(ls, v);
1207 code_oparg(ls, SETTABLE, left+(nvars-1), -1); 1170 code_oparg(ls, SETTABLE, left+(nvars-1), -1);
1208 left += 2; /* table&index are not popped, because they aren't on top */ 1171 left += 2; /* table&index are not popped, because they aren't on top */
1209 } 1172 }