diff options
Diffstat (limited to 'ldump.c')
-rw-r--r-- | ldump.c | 32 |
1 files changed, 23 insertions, 9 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: ldump.c,v 1.1 2002/10/25 21:31:28 roberto Exp roberto $ | 2 | ** $Id: ldump.c,v 1.3 2003/01/10 11:08:45 lhf Exp $ |
3 | ** save bytecodes | 3 | ** save bytecodes |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -19,13 +19,12 @@ | |||
19 | #define DumpLiteral(s,D) DumpBlock("" s,(sizeof(s))-1,D) | 19 | #define DumpLiteral(s,D) DumpBlock("" s,(sizeof(s))-1,D) |
20 | 20 | ||
21 | typedef struct { | 21 | typedef struct { |
22 | lua_State *L; | 22 | lua_State* L; |
23 | lua_Chunkwriter write; | 23 | lua_Chunkwriter write; |
24 | void *data; | 24 | void* data; |
25 | } DumpState; | 25 | } DumpState; |
26 | 26 | ||
27 | 27 | static void DumpBlock(const void* b, size_t size, DumpState* D) | |
28 | static void DumpBlock(const void *b, size_t size, DumpState* D) | ||
29 | { | 28 | { |
30 | lua_unlock(D->L); | 29 | lua_unlock(D->L); |
31 | (*D->write)(D->L,b,size,D->data); | 30 | (*D->write)(D->L,b,size,D->data); |
@@ -89,6 +88,18 @@ static void DumpLines(const Proto* f, DumpState* D) | |||
89 | DumpVector(f->lineinfo,f->sizelineinfo,sizeof(*f->lineinfo),D); | 88 | DumpVector(f->lineinfo,f->sizelineinfo,sizeof(*f->lineinfo),D); |
90 | } | 89 | } |
91 | 90 | ||
91 | static void DumpUpvalues(const Proto* f, DumpState* D) | ||
92 | { | ||
93 | if (f->upvalues==NULL) | ||
94 | DumpInt(0,D); | ||
95 | else | ||
96 | { | ||
97 | int i,n=f->nupvalues; | ||
98 | DumpInt(n,D); | ||
99 | for (i=0; i<n; i++) DumpString(f->upvalues[i],D); | ||
100 | } | ||
101 | } | ||
102 | |||
92 | static void DumpFunction(const Proto* f, const TString* p, DumpState* D); | 103 | static void DumpFunction(const Proto* f, const TString* p, DumpState* D); |
93 | 104 | ||
94 | static void DumpConstants(const Proto* f, DumpState* D) | 105 | static void DumpConstants(const Proto* f, DumpState* D) |
@@ -122,12 +133,13 @@ static void DumpFunction(const Proto* f, const TString* p, DumpState* D) | |||
122 | { | 133 | { |
123 | DumpString((f->source==p) ? NULL : f->source,D); | 134 | DumpString((f->source==p) ? NULL : f->source,D); |
124 | DumpInt(f->lineDefined,D); | 135 | DumpInt(f->lineDefined,D); |
125 | DumpByte(f->nupvalues,D); | 136 | DumpInt(f->nupvalues,D); |
126 | DumpByte(f->numparams,D); | 137 | DumpByte(f->numparams,D); |
127 | DumpByte(f->is_vararg,D); | 138 | DumpByte(f->is_vararg,D); |
128 | DumpByte(f->maxstacksize,D); | 139 | DumpByte(f->maxstacksize,D); |
129 | DumpLocals(f,D); | ||
130 | DumpLines(f,D); | 140 | DumpLines(f,D); |
141 | DumpLocals(f,D); | ||
142 | DumpUpvalues(f,D); | ||
131 | DumpConstants(f,D); | 143 | DumpConstants(f,D); |
132 | DumpCode(f,D); | 144 | DumpCode(f,D); |
133 | } | 145 | } |
@@ -148,7 +160,10 @@ static void DumpHeader(DumpState* D) | |||
148 | DumpNumber(TEST_NUMBER,D); | 160 | DumpNumber(TEST_NUMBER,D); |
149 | } | 161 | } |
150 | 162 | ||
151 | void luaU_dump(lua_State *L, const Proto* Main, lua_Chunkwriter w, void* data) | 163 | /* |
164 | ** dump function as precompiled chunk | ||
165 | */ | ||
166 | void luaU_dump (lua_State* L, const Proto* Main, lua_Chunkwriter w, void* data) | ||
152 | { | 167 | { |
153 | DumpState D; | 168 | DumpState D; |
154 | D.L=L; | 169 | D.L=L; |
@@ -157,4 +172,3 @@ void luaU_dump(lua_State *L, const Proto* Main, lua_Chunkwriter w, void* data) | |||
157 | DumpHeader(&D); | 172 | DumpHeader(&D); |
158 | DumpFunction(Main,NULL,&D); | 173 | DumpFunction(Main,NULL,&D); |
159 | } | 174 | } |
160 | |||