summaryrefslogtreecommitdiff
path: root/ldo.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2011-02-07 15:14:50 -0200
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2011-02-07 15:14:50 -0200
commitf0797492875dec5bf7a23b9172809bc92c0c04cd (patch)
tree712c44cd08fc8ee3a12c11029dc50f1988f8628f /ldo.c
parentf8d677f94c3b4309be94698d33aeb0590a51eabc (diff)
downloadlua-f0797492875dec5bf7a23b9172809bc92c0c04cd.tar.gz
lua-f0797492875dec5bf7a23b9172809bc92c0c04cd.tar.bz2
lua-f0797492875dec5bf7a23b9172809bc92c0c04cd.zip
some reorganization of dynamic data structures used by the parser
Diffstat (limited to 'ldo.c')
-rw-r--r--ldo.c23
1 files changed, 10 insertions, 13 deletions
diff --git a/ldo.c b/ldo.c
index 519aa85a..1b4768b6 100644
--- a/ldo.c
+++ b/ldo.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: ldo.c,v 2.90 2010/10/25 19:01:37 roberto Exp roberto $ 2** $Id: ldo.c,v 2.91 2011/02/04 17:34:43 roberto Exp roberto $
3** Stack and Call structure of Lua 3** Stack and Call structure of Lua
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -615,10 +615,8 @@ int luaD_pcall (lua_State *L, Pfunc func, void *u,
615*/ 615*/
616struct SParser { /* data to `f_parser' */ 616struct SParser { /* data to `f_parser' */
617 ZIO *z; 617 ZIO *z;
618 Mbuffer buff; /* buffer to be used by the scanner */ 618 Mbuffer buff; /* dynamic structure used by the scanner */
619 Varlist varl; /* list of local variables (to be used by the parser) */ 619 Dyndata dyd; /* dynamic structures used by the parser */
620 Gotolist gtl; /* list of pending gotos (") */
621 Labellist labell; /* list of active labels (") */
622 const char *name; 620 const char *name;
623}; 621};
624 622
@@ -630,8 +628,7 @@ static void f_parser (lua_State *L, void *ud) {
630 int c = luaZ_lookahead(p->z); 628 int c = luaZ_lookahead(p->z);
631 tf = (c == LUA_SIGNATURE[0]) 629 tf = (c == LUA_SIGNATURE[0])
632 ? luaU_undump(L, p->z, &p->buff, p->name) 630 ? luaU_undump(L, p->z, &p->buff, p->name)
633 : luaY_parser(L, p->z, &p->buff, &p->varl, 631 : luaY_parser(L, p->z, &p->buff, &p->dyd, p->name);
634 &p->gtl, &p->labell, p->name);
635 setptvalue2s(L, L->top, tf); 632 setptvalue2s(L, L->top, tf);
636 incr_top(L); 633 incr_top(L);
637 cl = luaF_newLclosure(L, tf); 634 cl = luaF_newLclosure(L, tf);
@@ -646,15 +643,15 @@ int luaD_protectedparser (lua_State *L, ZIO *z, const char *name) {
646 int status; 643 int status;
647 L->nny++; /* cannot yield during parsing */ 644 L->nny++; /* cannot yield during parsing */
648 p.z = z; p.name = name; 645 p.z = z; p.name = name;
649 p.varl.actvar = NULL; p.varl.nactvar = p.varl.actvarsize = 0; 646 p.dyd.actvar.arr = NULL; p.dyd.actvar.size = 0;
650 p.gtl.gt = NULL; p.gtl.ngt = p.gtl.gtsize = 0; 647 p.dyd.gt.arr = NULL; p.dyd.gt.size = 0;
651 p.labell.label = NULL; p.labell.nlabel = p.labell.labelsize = 0; 648 p.dyd.label.arr = NULL; p.dyd.label.size = 0;
652 luaZ_initbuffer(L, &p.buff); 649 luaZ_initbuffer(L, &p.buff);
653 status = luaD_pcall(L, f_parser, &p, savestack(L, L->top), L->errfunc); 650 status = luaD_pcall(L, f_parser, &p, savestack(L, L->top), L->errfunc);
654 luaZ_freebuffer(L, &p.buff); 651 luaZ_freebuffer(L, &p.buff);
655 luaM_freearray(L, p.varl.actvar, p.varl.actvarsize); 652 luaM_freearray(L, p.dyd.actvar.arr, p.dyd.actvar.size);
656 luaM_freearray(L, p.gtl.gt, p.gtl.gtsize); 653 luaM_freearray(L, p.dyd.gt.arr, p.dyd.gt.size);
657 luaM_freearray(L, p.labell.label, p.labell.labelsize); 654 luaM_freearray(L, p.dyd.label.arr, p.dyd.label.size);
658 L->nny--; 655 L->nny--;
659 return status; 656 return status;
660} 657}