misc/liblua/lundump.c
changeset 10017 de822cd3df3a
parent 2812 0a24853de796
equal deleted inserted replaced
10015:4feced261c68 10017:de822cd3df3a
    29 
    29 
    30 #ifdef LUAC_TRUST_BINARIES
    30 #ifdef LUAC_TRUST_BINARIES
    31 #define IF(c,s)
    31 #define IF(c,s)
    32 #define error(S,s)
    32 #define error(S,s)
    33 #else
    33 #else
    34 #define IF(c,s)		if (c) error(S,s)
    34 #define IF(c,s)     if (c) error(S,s)
    35 
    35 
    36 static void error(LoadState* S, const char* why)
    36 static void error(LoadState* S, const char* why)
    37 {
    37 {
    38  luaO_pushfstring(S->L,"%s: %s in precompiled chunk",S->name,why);
    38  luaO_pushfstring(S->L,"%s: %s in precompiled chunk",S->name,why);
    39  luaD_throw(S->L,LUA_ERRSYNTAX);
    39  luaD_throw(S->L,LUA_ERRSYNTAX);
    40 }
    40 }
    41 #endif
    41 #endif
    42 
    42 
    43 #define LoadMem(S,b,n,size)	LoadBlock(S,b,(n)*(size))
    43 #define LoadMem(S,b,n,size) LoadBlock(S,b,(n)*(size))
    44 #define	LoadByte(S)		(lu_byte)LoadChar(S)
    44 #define LoadByte(S)     (lu_byte)LoadChar(S)
    45 #define LoadVar(S,x)		LoadMem(S,&x,1,sizeof(x))
    45 #define LoadVar(S,x)        LoadMem(S,&x,1,sizeof(x))
    46 #define LoadVector(S,b,n,size)	LoadMem(S,b,n,size)
    46 #define LoadVector(S,b,n,size)  LoadMem(S,b,n,size)
    47 
    47 
    48 static void LoadBlock(LoadState* S, void* b, size_t size)
    48 static void LoadBlock(LoadState* S, void* b, size_t size)
    49 {
    49 {
    50  size_t r=luaZ_read(S->Z,b,size);
    50  size_t r=luaZ_read(S->Z,b,size);
    51  IF (r!=0, "unexpected end");
    51  IF (r!=0, "unexpected end");
    81   return NULL;
    81   return NULL;
    82  else
    82  else
    83  {
    83  {
    84   char* s=luaZ_openspace(S->L,S->b,size);
    84   char* s=luaZ_openspace(S->L,S->b,size);
    85   LoadBlock(S,s,size);
    85   LoadBlock(S,s,size);
    86   return luaS_newlstr(S->L,s,size-1);		/* remove trailing '\0' */
    86   return luaS_newlstr(S->L,s,size-1);       /* remove trailing '\0' */
    87  }
    87  }
    88 }
    88 }
    89 
    89 
    90 static void LoadCode(LoadState* S, Proto* f)
    90 static void LoadCode(LoadState* S, Proto* f)
    91 {
    91 {
   109   TValue* o=&f->k[i];
   109   TValue* o=&f->k[i];
   110   int t=LoadChar(S);
   110   int t=LoadChar(S);
   111   switch (t)
   111   switch (t)
   112   {
   112   {
   113    case LUA_TNIL:
   113    case LUA_TNIL:
   114    	setnilvalue(o);
   114     setnilvalue(o);
   115 	break;
   115     break;
   116    case LUA_TBOOLEAN:
   116    case LUA_TBOOLEAN:
   117    	setbvalue(o,LoadChar(S)!=0);
   117     setbvalue(o,LoadChar(S)!=0);
   118 	break;
   118     break;
   119    case LUA_TNUMBER:
   119    case LUA_TNUMBER:
   120 	setnvalue(o,LoadNumber(S));
   120     setnvalue(o,LoadNumber(S));
   121 	break;
   121     break;
   122    case LUA_TSTRING:
   122    case LUA_TSTRING:
   123 	setsvalue2n(S->L,o,LoadString(S));
   123     setsvalue2n(S->L,o,LoadString(S));
   124 	break;
   124     break;
   125    default:
   125    default:
   126 	error(S,"bad constant");
   126     error(S,"bad constant");
   127 	break;
   127     break;
   128   }
   128   }
   129  }
   129  }
   130  n=LoadInt(S);
   130  n=LoadInt(S);
   131  f->p=luaM_newvector(S->L,n,Proto*);
   131  f->p=luaM_newvector(S->L,n,Proto*);
   132  f->sizep=n;
   132  f->sizep=n;
   216  int x=1;
   216  int x=1;
   217  memcpy(h,LUA_SIGNATURE,sizeof(LUA_SIGNATURE)-1);
   217  memcpy(h,LUA_SIGNATURE,sizeof(LUA_SIGNATURE)-1);
   218  h+=sizeof(LUA_SIGNATURE)-1;
   218  h+=sizeof(LUA_SIGNATURE)-1;
   219  *h++=(char)LUAC_VERSION;
   219  *h++=(char)LUAC_VERSION;
   220  *h++=(char)LUAC_FORMAT;
   220  *h++=(char)LUAC_FORMAT;
   221  *h++=(char)*(char*)&x;				/* endianness */
   221  *h++=(char)*(char*)&x;             /* endianness */
   222  *h++=(char)sizeof(int);
   222  *h++=(char)sizeof(int);
   223  *h++=(char)sizeof(size_t);
   223  *h++=(char)sizeof(size_t);
   224  *h++=(char)sizeof(Instruction);
   224  *h++=(char)sizeof(Instruction);
   225  *h++=(char)sizeof(lua_Number);
   225  *h++=(char)sizeof(lua_Number);
   226  *h++=(char)(((lua_Number)0.5)==0);		/* is lua_Number integral? */
   226  *h++=(char)(((lua_Number)0.5)==0);     /* is lua_Number integral? */
   227 }
   227 }