diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2009-09-28 13:32:50 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2009-09-28 13:32:50 -0300 |
commit | 5938212748636d21d6f4b372481ab3b6dd6c7538 (patch) | |
tree | fa5d0a28dac1ff6c087585bc684534eb1ae82298 /ldump.c | |
parent | 1829911d7c1c16cf01dfdbfc8e7a26cfa10ec797 (diff) | |
download | lua-5938212748636d21d6f4b372481ab3b6dd6c7538.tar.gz lua-5938212748636d21d6f4b372481ab3b6dd6c7538.tar.bz2 lua-5938212748636d21d6f4b372481ab3b6dd6c7538.zip |
information about upvalues (where they come from) kept in Proto structure,
instead of sequence of pseudo-opcodes after OP_CLOSURE
Diffstat (limited to 'ldump.c')
-rw-r--r-- | ldump.c | 17 |
1 files changed, 14 insertions, 3 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: ldump.c,v 2.9 2006/09/11 14:07:24 roberto Exp roberto $ | 2 | ** $Id: ldump.c,v 2.10 2008/07/03 14:25:05 roberto Exp roberto $ |
3 | ** save precompiled Lua chunks | 3 | ** save precompiled Lua chunks |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -108,6 +108,17 @@ static void DumpConstants(const Proto* f, DumpState* D) | |||
108 | for (i=0; i<n; i++) DumpFunction(f->p[i],f->source,D); | 108 | for (i=0; i<n; i++) DumpFunction(f->p[i],f->source,D); |
109 | } | 109 | } |
110 | 110 | ||
111 | static void DumpUpvalues(const Proto* f, DumpState* D) | ||
112 | { | ||
113 | int i,n=f->sizeupvalues; | ||
114 | DumpInt(n,D); | ||
115 | for (i=0; i<n; i++) | ||
116 | { | ||
117 | DumpChar(f->upvalues[i].instack, D); | ||
118 | DumpChar(f->upvalues[i].idx, D); | ||
119 | } | ||
120 | } | ||
121 | |||
111 | static void DumpDebug(const Proto* f, DumpState* D) | 122 | static void DumpDebug(const Proto* f, DumpState* D) |
112 | { | 123 | { |
113 | int i,n; | 124 | int i,n; |
@@ -123,7 +134,7 @@ static void DumpDebug(const Proto* f, DumpState* D) | |||
123 | } | 134 | } |
124 | n= (D->strip) ? 0 : f->sizeupvalues; | 135 | n= (D->strip) ? 0 : f->sizeupvalues; |
125 | DumpInt(n,D); | 136 | DumpInt(n,D); |
126 | for (i=0; i<n; i++) DumpString(f->upvalues[i],D); | 137 | for (i=0; i<n; i++) DumpString(f->upvalues[i].name,D); |
127 | } | 138 | } |
128 | 139 | ||
129 | static void DumpFunction(const Proto* f, const TString* p, DumpState* D) | 140 | static void DumpFunction(const Proto* f, const TString* p, DumpState* D) |
@@ -131,12 +142,12 @@ static void DumpFunction(const Proto* f, const TString* p, DumpState* D) | |||
131 | DumpString((f->source==p || D->strip) ? NULL : f->source,D); | 142 | DumpString((f->source==p || D->strip) ? NULL : f->source,D); |
132 | DumpInt(f->linedefined,D); | 143 | DumpInt(f->linedefined,D); |
133 | DumpInt(f->lastlinedefined,D); | 144 | DumpInt(f->lastlinedefined,D); |
134 | DumpChar(f->nups,D); | ||
135 | DumpChar(f->numparams,D); | 145 | DumpChar(f->numparams,D); |
136 | DumpChar(f->is_vararg,D); | 146 | DumpChar(f->is_vararg,D); |
137 | DumpChar(f->maxstacksize,D); | 147 | DumpChar(f->maxstacksize,D); |
138 | DumpCode(f,D); | 148 | DumpCode(f,D); |
139 | DumpConstants(f,D); | 149 | DumpConstants(f,D); |
150 | DumpUpvalues(f,D); | ||
140 | DumpDebug(f,D); | 151 | DumpDebug(f,D); |
141 | } | 152 | } |
142 | 153 | ||