details (by lhf)

This commit is contained in:
Roberto Ierusalimschy 1998-06-25 13:48:44 -03:00
parent 8f31eda649
commit 07008b5d45
2 changed files with 38 additions and 28 deletions

View File

@ -1,11 +1,10 @@
/* /*
** $Id: lundump.c,v 1.9 1998/06/13 16:54:15 lhf Exp $ ** $Id: lundump.c,v 1.10 1998/06/25 15:50:09 lhf Exp $
** load bytecodes from files ** load bytecodes from files
** See Copyright Notice in lua.h ** See Copyright Notice in lua.h
*/ */
#include <stdio.h> #include <stdio.h>
#include "lauxlib.h" #include "lauxlib.h"
#include "lfunc.h" #include "lfunc.h"
#include "lmem.h" #include "lmem.h"
@ -13,21 +12,12 @@
#include "lundump.h" #include "lundump.h"
#define LoadBlock(b,size,Z) ezread(Z,b,size) #define LoadBlock(b,size,Z) ezread(Z,b,size)
#define LoadNative(t,D) LoadBlock(&t,sizeof(t),D) #define LoadNative(t,Z) LoadBlock(&t,sizeof(t),Z)
/* LUA_NUMBER */ #if ID_NUMBER==ID_NATIVE
/* see comment in lundump.h */ #define doLoadNumber(f,Z) LoadNative(f,Z)
#if ID_NUMBER==ID_REAL4
#define LoadNumber LoadFloat
#elif ID_NUMBER==ID_REAL8
#define LoadNumber LoadDouble
#elif ID_NUMBER==ID_INT4
#define LoadNumber LoadLong
#elif ID_NUMBER==ID_NATIVE
#define LoadNumber LoadNative
#else #else
#define LoadNumber LoadWhat #define doLoadNumber(f,Z) f=LoadNumber(Z)
#endif #endif
static void unexpectedEOZ(ZIO* Z) static void unexpectedEOZ(ZIO* Z)
@ -150,11 +140,7 @@ static void LoadConstants(TProtoFunc* tf, ZIO* Z)
{ {
case ID_NUM: case ID_NUM:
ttype(o)=LUA_T_NUMBER; ttype(o)=LUA_T_NUMBER;
#if ID_NUMBER==ID_NATIVE doLoadNumber(nvalue(o),Z);
LoadNative(nvalue(o),Z)
#else
nvalue(o)=LoadNumber(Z);
#endif
break; break;
case ID_STR: case ID_STR:
ttype(o)=LUA_T_STRING; ttype(o)=LUA_T_STRING;
@ -200,19 +186,19 @@ static void LoadHeader(ZIO* Z)
luaL_verror( luaL_verror(
"%s too new: version=0x%02x; expected at most 0x%02x", "%s too new: version=0x%02x; expected at most 0x%02x",
zname(Z),version,VERSION); zname(Z),version,VERSION);
if (version<0x31) /* major change in 3.1 */ if (version<VERSION0) /* check last major change */
luaL_verror( luaL_verror(
"%s too old: version=0x%02x; expected at least 0x%02x", "%s too old: version=0x%02x; expected at least 0x%02x",
zname(Z),version,0x31); zname(Z),version,VERSION0);
id=ezgetc(Z); /* test number representation */ id=ezgetc(Z); /* test number representation */
sizeofR=ezgetc(Z); sizeofR=ezgetc(Z);
if (id!=ID_NUMBER || sizeofR!=sizeof(real)) if (id!=ID_NUMBER || sizeofR!=sizeof(real))
{ {
luaL_verror("unknown number representation in %s: " luaL_verror("unknown number signature in %s: "
"read 0x%02x %d; expected 0x%02x %d", "read 0x%02x%02x; expected 0x%02x%02x",
zname(Z),id,sizeofR,ID_NUMBER,sizeof(real)); zname(Z),id,sizeofR,ID_NUMBER,sizeof(real));
} }
f=LoadNumber(Z); doLoadNumber(f,Z);
if (f!=tf) if (f!=tf)
luaL_verror("unknown number representation in %s: " luaL_verror("unknown number representation in %s: "
"read " NUMBER_FMT "; expected " NUMBER_FMT "", /* LUA_NUMBER */ "read " NUMBER_FMT "; expected " NUMBER_FMT "", /* LUA_NUMBER */

View File

@ -1,5 +1,5 @@
/* /*
** $Id: lundump.h,v 1.6 1998/06/13 16:54:15 lhf Exp $ ** $Id: lundump.h,v 1.7 1998/06/25 15:50:09 lhf Exp $
** load pre-compiled Lua chunks ** load pre-compiled Lua chunks
** See Copyright Notice in lua.h ** See Copyright Notice in lua.h
*/ */
@ -14,6 +14,7 @@ TProtoFunc* luaU_undump1(ZIO* Z); /* load one chunk */
#define SIGNATURE "Lua" #define SIGNATURE "Lua"
#define VERSION 0x31 /* last format change was in 3.1 */ #define VERSION 0x31 /* last format change was in 3.1 */
#define VERSION0 0x31 /* last major change was in 3.1 */
#define IsMain(f) (f->lineDefined==0) #define IsMain(f) (f->lineDefined==0)
@ -46,12 +47,35 @@ TProtoFunc* luaU_undump1(ZIO* Z); /* load one chunk */
* dump and undump routines. * dump and undump routines.
*/ */
#define ID_NUMBER ID_REAL8 #ifndef ID_NUMBER
#define ID_NUMBER ID_NATIVE
#endif
#if 0 #if 0
#define ID_NUMBER ID_REAL4
#define ID_NUMBER ID_INT4 #define ID_NUMBER ID_INT4
#define ID_NUMBER ID_REAL4
#define ID_NUMBER ID_REAL8
#define ID_NUMBER ID_NATIVE #define ID_NUMBER ID_NATIVE
#endif #endif
#endif #endif
#if ID_NUMBER==ID_REAL4
#define DumpNumber DumpFloat
#define LoadNumber LoadFloat
#define SIZEOF_NUMBER 4
#elif ID_NUMBER==ID_REAL8
#define DumpNumber DumpDouble
#define LoadNumber LoadDouble
#define SIZEOF_NUMBER 8
#elif ID_NUMBER==ID_INT4
#define DumpNumber DumpLong
#define LoadNumber LoadLong
#define SIZEOF_NUMBER 4
#elif ID_NUMBER==ID_NATIVE
#define DumpNumber DumpNative
#define LoadNumber LoadNative
#define SIZEOF_NUMBER sizeof(real)
#else
#error bad ID_NUMBER
#endif