diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2014-06-18 15:35:43 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2014-06-18 15:35:43 -0300 |
commit | 7021cc9bc8c216e941c5e5a49b34d58672b3f4c2 (patch) | |
tree | ec301c1861465cb214a0c36f95ef8170115385fb /ldump.c | |
parent | 04da0a40c0a541c32140ac952823a9d768cfaf8d (diff) | |
download | lua-7021cc9bc8c216e941c5e5a49b34d58672b3f4c2.tar.gz lua-7021cc9bc8c216e941c5e5a49b34d58672b3f4c2.tar.bz2 lua-7021cc9bc8c216e941c5e5a49b34d58672b3f4c2.zip |
allows different 'source' for each prototype, but inherits it from
parent when they are equal (only possible case for chunks created
by the parser)
Diffstat (limited to 'ldump.c')
-rw-r--r-- | ldump.c | 27 |
1 files changed, 17 insertions, 10 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: ldump.c,v 2.30 2014/06/18 13:21:12 roberto Exp roberto $ | 2 | ** $Id: ldump.c,v 2.31 2014/06/18 13:54:31 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 | */ |
@@ -89,7 +89,7 @@ static void DumpCode (const Proto *f, DumpState *D) { | |||
89 | } | 89 | } |
90 | 90 | ||
91 | 91 | ||
92 | static void DumpFunction(const Proto *f, DumpState *D); | 92 | static void DumpFunction(const Proto *f, TString *psource, DumpState *D); |
93 | 93 | ||
94 | static void DumpConstants (const Proto *f, DumpState *D) { | 94 | static void DumpConstants (const Proto *f, DumpState *D) { |
95 | int i; | 95 | int i; |
@@ -118,12 +118,15 @@ static void DumpConstants (const Proto *f, DumpState *D) { | |||
118 | lua_assert(0); | 118 | lua_assert(0); |
119 | } | 119 | } |
120 | } | 120 | } |
121 | n = f->sizep; | 121 | } |
122 | |||
123 | |||
124 | static void DumpProtos (const Proto *f, DumpState *D) { | ||
125 | int i; | ||
126 | int n = f->sizep; | ||
122 | DumpInt(n, D); | 127 | DumpInt(n, D); |
123 | for (i = 0; i < n; i++) { | 128 | for (i = 0; i < n; i++) |
124 | lua_assert(f->source == f->p[i]->source); /* same source for all protos */ | 129 | DumpFunction(f->p[i], f->source, D); |
125 | DumpFunction(f->p[i], D); | ||
126 | } | ||
127 | } | 130 | } |
128 | 131 | ||
129 | 132 | ||
@@ -156,7 +159,11 @@ static void DumpDebug (const Proto *f, DumpState *D) { | |||
156 | } | 159 | } |
157 | 160 | ||
158 | 161 | ||
159 | static void DumpFunction (const Proto *f, DumpState *D) { | 162 | static void DumpFunction (const Proto *f, TString *psource, DumpState *D) { |
163 | if (D->strip || f->source == psource) | ||
164 | DumpString(NULL, D); /* no debug info or same source as its parent */ | ||
165 | else | ||
166 | DumpString(f->source, D); | ||
160 | DumpInt(f->linedefined, D); | 167 | DumpInt(f->linedefined, D); |
161 | DumpInt(f->lastlinedefined, D); | 168 | DumpInt(f->lastlinedefined, D); |
162 | DumpByte(f->numparams, D); | 169 | DumpByte(f->numparams, D); |
@@ -165,6 +172,7 @@ static void DumpFunction (const Proto *f, DumpState *D) { | |||
165 | DumpCode(f, D); | 172 | DumpCode(f, D); |
166 | DumpConstants(f, D); | 173 | DumpConstants(f, D); |
167 | DumpUpvalues(f, D); | 174 | DumpUpvalues(f, D); |
175 | DumpProtos(f, D); | ||
168 | DumpDebug(f, D); | 176 | DumpDebug(f, D); |
169 | } | 177 | } |
170 | 178 | ||
@@ -197,8 +205,7 @@ int luaU_dump(lua_State *L, const Proto *f, lua_Writer w, void *data, | |||
197 | D.status = 0; | 205 | D.status = 0; |
198 | DumpHeader(&D); | 206 | DumpHeader(&D); |
199 | DumpByte(f->sizeupvalues, &D); | 207 | DumpByte(f->sizeupvalues, &D); |
200 | DumpString((D.strip) ? NULL : f->source, &D); | 208 | DumpFunction(f, NULL, &D); |
201 | DumpFunction(f, &D); | ||
202 | return D.status; | 209 | return D.status; |
203 | } | 210 | } |
204 | 211 | ||