summaryrefslogtreecommitdiff
path: root/ldump.c
diff options
context:
space:
mode:
Diffstat (limited to 'ldump.c')
-rw-r--r--ldump.c32
1 files changed, 23 insertions, 9 deletions
diff --git a/ldump.c b/ldump.c
index 0a3b9453..f62eb2c1 100644
--- a/ldump.c
+++ b/ldump.c
@@ -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
21typedef struct { 21typedef 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 27static void DumpBlock(const void* b, size_t size, DumpState* D)
28static 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
91static 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
92static void DumpFunction(const Proto* f, const TString* p, DumpState* D); 103static void DumpFunction(const Proto* f, const TString* p, DumpState* D);
93 104
94static void DumpConstants(const Proto* f, DumpState* D) 105static 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
151void luaU_dump(lua_State *L, const Proto* Main, lua_Chunkwriter w, void* data) 163/*
164** dump function as precompiled chunk
165*/
166void 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