diff options
Diffstat (limited to 'src/ldump.c')
-rw-r--r-- | src/ldump.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/src/ldump.c b/src/ldump.c index c9d3d487..f95381ab 100644 --- a/src/ldump.c +++ b/src/ldump.c @@ -1,5 +1,5 @@ /* -** $Id: ldump.c,v 2.8.1.1 2007/12/27 13:02:25 roberto Exp $ +** $Id: ldump.c,v 2.12 2009/09/30 15:38:37 roberto Exp $ ** save precompiled Lua chunks ** See Copyright Notice in lua.h */ @@ -24,7 +24,7 @@ typedef struct { } DumpState; #define DumpMem(b,n,size,D) DumpBlock(b,(n)*(size),D) -#define DumpVar(x,D) DumpMem(&x,1,sizeof(x),D) +#define DumpVar(x,D) DumpMem(&x,1,sizeof(x),D) static void DumpBlock(const void* b, size_t size, DumpState* D) { @@ -60,7 +60,7 @@ static void DumpVector(const void* b, int n, size_t size, DumpState* D) static void DumpString(const TString* s, DumpState* D) { - if (s==NULL || getstr(s)==NULL) + if (s==NULL) { size_t size=0; DumpVar(size,D); @@ -108,6 +108,17 @@ static void DumpConstants(const Proto* f, DumpState* D) for (i=0; i<n; i++) DumpFunction(f->p[i],f->source,D); } +static void DumpUpvalues(const Proto* f, DumpState* D) +{ + int i,n=f->sizeupvalues; + DumpInt(n,D); + for (i=0; i<n; i++) + { + DumpChar(f->upvalues[i].instack, D); + DumpChar(f->upvalues[i].idx, D); + } +} + static void DumpDebug(const Proto* f, DumpState* D) { int i,n; @@ -123,7 +134,7 @@ static void DumpDebug(const Proto* f, DumpState* D) } n= (D->strip) ? 0 : f->sizeupvalues; DumpInt(n,D); - for (i=0; i<n; i++) DumpString(f->upvalues[i],D); + for (i=0; i<n; i++) DumpString(f->upvalues[i].name,D); } static void DumpFunction(const Proto* f, const TString* p, DumpState* D) @@ -131,12 +142,13 @@ static void DumpFunction(const Proto* f, const TString* p, DumpState* D) DumpString((f->source==p || D->strip) ? NULL : f->source,D); DumpInt(f->linedefined,D); DumpInt(f->lastlinedefined,D); - DumpChar(f->nups,D); DumpChar(f->numparams,D); DumpChar(f->is_vararg,D); DumpChar(f->maxstacksize,D); + DumpChar(f->envreg,D); DumpCode(f,D); DumpConstants(f,D); + DumpUpvalues(f,D); DumpDebug(f,D); } |