aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuiz Henrique de Figueiredo <lhf@tecgraf.puc-rio.br>1996-03-11 19:01:46 -0300
committerLuiz Henrique de Figueiredo <lhf@tecgraf.puc-rio.br>1996-03-11 19:01:46 -0300
commit5eff5d3eac37a7596550a881d1db470fef0c1648 (patch)
treeaead9b53a7f6621c67b9b9345164e30400331f70
parent8ad8426c43ff848682cb26269bdf80c21c372483 (diff)
downloadlua-5eff5d3eac37a7596550a881d1db470fef0c1648.tar.gz
lua-5eff5d3eac37a7596550a881d1db470fef0c1648.tar.bz2
lua-5eff5d3eac37a7596550a881d1db470fef0c1648.zip
moved some includes from undump.h
LoadString now uses luaI_buffer added LoadNewString needs tf->marked=0 luaI_undump now returns int and aborts if luaI_dorun fails
-rw-r--r--undump.c60
1 files changed, 30 insertions, 30 deletions
diff --git a/undump.c b/undump.c
index e7a8ebd9..26becc99 100644
--- a/undump.c
+++ b/undump.c
@@ -3,10 +3,13 @@
3** load bytecodes from files 3** load bytecodes from files
4*/ 4*/
5 5
6char* rcs_undump="$Id: undump.c,v 1.10 1996/03/06 21:40:10 lhf Exp lhf $"; 6char* rcs_undump="$Id: undump.c,v 1.11 1996/03/08 21:44:12 lhf Exp lhf $";
7 7
8#include <stdio.h> 8#include <stdio.h>
9#include <string.h> 9#include <string.h>
10#include "opcode.h"
11#include "mem.h"
12#include "table.h"
10#include "undump.h" 13#include "undump.h"
11 14
12static int swapword=0; 15static int swapword=0;
@@ -16,7 +19,9 @@ static TFunc* lastF=NULL;
16 19
17static void warn(char* s) /* TODO: remove */ 20static void warn(char* s) /* TODO: remove */
18{ 21{
22#if 0
19 fprintf(stderr,"undump: %s\n",s); 23 fprintf(stderr,"undump: %s\n",s);
24#endif
20} 25}
21 26
22static void FixCode(Byte* code, Byte* end) /* swap words */ 27static void FixCode(Byte* code, Byte* end) /* swap words */
@@ -160,13 +165,6 @@ static int LoadWord(FILE* D)
160 return w; 165 return w;
161} 166}
162 167
163static char* LoadBlock(int size, FILE* D)
164{
165 char* b=luaI_malloc(size);
166 fread(b,size,1,D);
167 return b;
168}
169
170static int LoadSize(FILE* D) 168static int LoadSize(FILE* D)
171{ 169{
172 Word hi=LoadWord(D); 170 Word hi=LoadWord(D);
@@ -176,8 +174,23 @@ static int LoadSize(FILE* D)
176 return s; 174 return s;
177} 175}
178 176
177static char* LoadBlock(int size, FILE* D)
178{
179 char* b=luaI_malloc(size);
180 fread(b,size,1,D);
181 return b;
182}
183
179static char* LoadString(FILE* D) 184static char* LoadString(FILE* D)
180{ 185{
186 int size=LoadWord(D);
187 char *b=luaI_buffer(size);
188 fread(b,size,1,D);
189 return b;
190}
191
192static char* LoadNewString(FILE* D)
193{
181 return LoadBlock(LoadWord(D),D); 194 return LoadBlock(LoadWord(D),D);
182} 195}
183 196
@@ -190,7 +203,7 @@ static void LoadFunction(FILE* D)
190 tf->lineDefined=LoadWord(D); 203 tf->lineDefined=LoadWord(D);
191 if (IsMain(tf)) /* new main */ 204 if (IsMain(tf)) /* new main */
192 { 205 {
193 tf->fileName=LoadString(D); 206 tf->fileName=LoadNewString(D);
194 Main=lastF=tf; 207 Main=lastF=tf;
195 } 208 }
196 else /* fix PUSHFUNCTION */ 209 else /* fix PUSHFUNCTION */
@@ -204,9 +217,7 @@ static void LoadFunction(FILE* D)
204 *p++=c.m.c1; *p++=c.m.c2; *p++=c.m.c3; *p++=c.m.c4; 217 *p++=c.m.c1; *p++=c.m.c2; *p++=c.m.c3; *p++=c.m.c4;
205 lastF=lastF->next=tf; 218 lastF=lastF->next=tf;
206 } 219 }
207#if 0 220 tf->marked=0;
208 tf->marked=0; /* TODO: is this ok? */
209#endif
210 tf->code=LoadBlock(tf->size,D); 221 tf->code=LoadBlock(tf->size,D);
211 if (swapword || swapfloat) FixCode(tf->code,tf->code+tf->size); 222 if (swapword || swapfloat) FixCode(tf->code,tf->code+tf->size);
212 while (1) /* unthread */ 223 while (1) /* unthread */
@@ -216,14 +227,14 @@ static void LoadFunction(FILE* D)
216 { 227 {
217 int i=LoadWord(D); 228 int i=LoadWord(D);
218 char* s=LoadString(D); 229 char* s=LoadString(D);
219 int v=luaI_findsymbolbyname(s); /* TODO: free s? */ 230 int v=luaI_findsymbolbyname(s);
220 Unthread(tf->code,i,v); 231 Unthread(tf->code,i,v);
221 } 232 }
222 else if (c==ID_STR) /* constant string */ 233 else if (c==ID_STR) /* constant string */
223 { 234 {
224 int i=LoadWord(D); 235 int i=LoadWord(D);
225 char* s=LoadString(D); 236 char* s=LoadString(D);
226 int v=luaI_findconstantbyname(s); /* TODO: free s? */ 237 int v=luaI_findconstantbyname(s);
227 Unthread(tf->code,i,v); 238 Unthread(tf->code,i,v);
228 } 239 }
229 else 240 else
@@ -303,25 +314,14 @@ TFunc* luaI_undump1(FILE* D)
303/* 314/*
304** load and run all chunks in a file 315** load and run all chunks in a file
305*/ 316*/
306void luaI_undump(FILE* D) 317int luaI_undump(FILE* D)
307{ 318{
308 TFunc* m; 319 TFunc* m;
309 while ((m=luaI_undump1(D))) 320 while ((m=luaI_undump1(D)))
310 { 321 {
311#if 0 322 int status=luaI_dorun(m);
312 luaI_dorun(m); 323 luaI_freefunc(m);
313 luaI_freefunc(m); /* TODO: free others? */ 324 if (status!=0) return status;
314#endif
315 } 325 }
316} 326 return 0;
317
318char* luaI_buffer(int n)
319{
320 static int size=0;
321 static char* buffer=NULL;
322 if (buffer==NULL)
323 buffer=luaI_malloc(n);
324 else if (n>size)
325 buffer=luaI_realloc(buffer,size=n);
326 return buffer;
327} 327}