aboutsummaryrefslogtreecommitdiff
path: root/ldump.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2014-06-18 15:35:43 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2014-06-18 15:35:43 -0300
commit7021cc9bc8c216e941c5e5a49b34d58672b3f4c2 (patch)
treeec301c1861465cb214a0c36f95ef8170115385fb /ldump.c
parent04da0a40c0a541c32140ac952823a9d768cfaf8d (diff)
downloadlua-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.c27
1 files changed, 17 insertions, 10 deletions
diff --git a/ldump.c b/ldump.c
index e1f9fc3b..4155d314 100644
--- a/ldump.c
+++ b/ldump.c
@@ -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
92static void DumpFunction(const Proto *f, DumpState *D); 92static void DumpFunction(const Proto *f, TString *psource, DumpState *D);
93 93
94static void DumpConstants (const Proto *f, DumpState *D) { 94static 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
124static 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
159static void DumpFunction (const Proto *f, DumpState *D) { 162static 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