mirror of https://github.com/rusefi/lua.git
new version by lhf
This commit is contained in:
parent
0789451458
commit
112c9d53ab
21
lundump.c
21
lundump.c
|
@ -1,10 +1,11 @@
|
|||
/*
|
||||
** $Id: lundump.c,v 1.7 1998/03/05 15:45:08 lhf Exp lhf $
|
||||
** $Id: lundump.c,v 1.9 1998/06/13 16:54:15 lhf Exp $
|
||||
** load bytecodes from files
|
||||
** See Copyright Notice in lua.h
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include "lauxlib.h"
|
||||
#include "lfunc.h"
|
||||
#include "lmem.h"
|
||||
|
@ -15,11 +16,7 @@
|
|||
#define LoadNative(t,D) LoadBlock(&t,sizeof(t),D)
|
||||
|
||||
/* LUA_NUMBER */
|
||||
/* if you change the definition of real, make sure you set ID_NUMBER
|
||||
* accordingly lundump.h, specially if sizeof(long)!=4.
|
||||
* for types other than the ones listed below, you'll have to write your own
|
||||
* dump and undump routines.
|
||||
*/
|
||||
/* see comment in lundump.h */
|
||||
|
||||
#if ID_NUMBER==ID_REAL4
|
||||
#define LoadNumber LoadFloat
|
||||
|
@ -65,20 +62,23 @@ static unsigned long LoadLong(ZIO* Z)
|
|||
return (hi<<16)|lo;
|
||||
}
|
||||
|
||||
#if ID_NUMBER==ID_REAL4
|
||||
/* LUA_NUMBER */
|
||||
/* assumes sizeof(long)==4 and sizeof(float)==4 (IEEE) */
|
||||
static float LoadFloat(ZIO* Z)
|
||||
{
|
||||
long l=LoadLong(Z);
|
||||
unsigned long l=LoadLong(Z);
|
||||
float f=*(float*)&l;
|
||||
return f;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if ID_NUMBER==ID_REAL8
|
||||
/* LUA_NUMBER */
|
||||
/* assumes sizeof(long)==4 and sizeof(double)==8 (IEEE) */
|
||||
static double LoadDouble(ZIO* Z)
|
||||
{
|
||||
long l[2];
|
||||
unsigned long l[2];
|
||||
double f;
|
||||
int x=1;
|
||||
if (*(char*)&x==1) /* little-endian */
|
||||
|
@ -94,10 +94,11 @@ static double LoadDouble(ZIO* Z)
|
|||
f=*(double*)l;
|
||||
return f;
|
||||
}
|
||||
#endif
|
||||
|
||||
static Byte* LoadCode(ZIO* Z)
|
||||
{
|
||||
long size=LoadLong(Z);
|
||||
unsigned long size=LoadLong(Z);
|
||||
unsigned int s=size;
|
||||
void* b;
|
||||
if (s!=size) luaL_verror("code too long (%ld bytes) in %s",size,zname(Z));
|
||||
|
@ -214,7 +215,7 @@ static void LoadHeader(ZIO* Z)
|
|||
f=LoadNumber(Z);
|
||||
if (f!=tf)
|
||||
luaL_verror("unknown number representation in %s: "
|
||||
"read %g; expected %g", /* LUA_NUMBER */
|
||||
"read " NUMBER_FMT "; expected " NUMBER_FMT "", /* LUA_NUMBER */
|
||||
zname(Z),(double)f,(double)tf);
|
||||
}
|
||||
|
||||
|
|
38
lundump.h
38
lundump.h
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
** $Id: lundump.h,v 1.5 1998/02/06 20:05:39 lhf Exp lhf $
|
||||
** $Id: lundump.h,v 1.6 1998/06/13 16:54:15 lhf Exp $
|
||||
** load pre-compiled Lua chunks
|
||||
** See Copyright Notice in lua.h
|
||||
*/
|
||||
|
@ -22,32 +22,36 @@ TProtoFunc* luaU_undump1(ZIO* Z); /* load one chunk */
|
|||
#define ID_STR 'S'
|
||||
#define ID_FUN 'F'
|
||||
|
||||
#define ID_INT4 'l'
|
||||
#define ID_REAL4 'f'
|
||||
#define ID_REAL8 'd'
|
||||
#define ID_NATIVE '?'
|
||||
/* number representation */
|
||||
#define ID_INT4 'l' /* 4-byte integers */
|
||||
#define ID_REAL4 'f' /* 4-byte reals */
|
||||
#define ID_REAL8 'd' /* 8-byte reals */
|
||||
#define ID_NATIVE '?' /* whatever your machine uses */
|
||||
|
||||
/*
|
||||
* use a multiple of PI for testing number representation.
|
||||
* multiplying by 10E8 gives notrivial integer values.
|
||||
* multiplying by 1E8 gives notrivial integer values.
|
||||
*/
|
||||
#define TEST_NUMBER 3.14159265358979323846E8
|
||||
|
||||
/* LUA_NUMBER */
|
||||
/* if you change the definition of real, make sure you set ID_NUMBER
|
||||
* accordingly, specially if sizeof(long)!=4.
|
||||
/* LUA_NUMBER
|
||||
* choose one below for the number representation in precompiled chunks.
|
||||
* the default is ID_REAL8 because the default for LUA_NUM_TYPE is double.
|
||||
* if your machine does not use IEEE 754, use ID_NATIVE.
|
||||
* the next version will support conversion to/from IEEE 754.
|
||||
*
|
||||
* if you change LUA_NUM_TYPE, make sure you set ID_NUMBER accordingly,
|
||||
* specially if sizeof(long)!=4.
|
||||
* for types other than the ones listed below, you'll have to write your own
|
||||
* dump and undump routines.
|
||||
*/
|
||||
|
||||
#if real==float
|
||||
#define ID_NUMBER ID_REAL4
|
||||
#elif real==double
|
||||
#define ID_NUMBER ID_REAL8
|
||||
#elif real==long
|
||||
#define ID_NUMBER ID_INT4
|
||||
#else
|
||||
#define ID_NUMBER ID_NATIVE
|
||||
#define ID_NUMBER ID_REAL8
|
||||
|
||||
#if 0
|
||||
#define ID_NUMBER ID_REAL4
|
||||
#define ID_NUMBER ID_INT4
|
||||
#define ID_NUMBER ID_NATIVE
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue