static void DumpString(const killa_TString* s, DumpState* D) { if (s==NULL) { size_t size=0; DumpVar(size,D); } else { size_t size=s->tsv.len+1; /* include trailing '\0' */ DumpVar(size,D); DumpBlock(killa_getstr(s),size*sizeof(char),D); } }
static void DumpString(const LuaString* s, DumpState* D) { if (s==NULL) { size_t size=0; DumpVar(size,D); } else { size_t size=s->getLen()+1; /* include trailing '\0' */ DumpVar(size,D); DumpBlock(s->c_str(),size*sizeof(char),D); } }
static void DumpString(const TString* s, DumpState* D) { if (s==NULL || getstr(s)==NULL) { size_t size=0; DumpVar(size,D); } else { size_t size=s->tsv.len+1; /* include trailing '\0' */ DumpVar(size,D); DumpBlock(getstr(s),size,D); } }
static void DumpString(const TString* s, DumpState* D) { if (s==NULL || getstr(s)==NULL) { // LOOM: This was using size_t whereas the LoadString in undump is using in32_t, this // will break bytecode compiled under 64 bit int32_t size=0; DumpVar(size,D); } else { // LOOM: This was using size_t whereas the LoadString in undump is using in32_t, this // will break bytecode compiled under 64 bit int32_t size=s->tsv.len+1; /* include trailing '\0' */ DumpVar(size,D); DumpBlock(getstr(s),size,D); } }
static void DumpNumber(lua_Number x, DumpState* D) { #if defined( LUA_NUMBER_INTEGRAL ) && !defined( LUA_CROSS_COMPILER ) DumpIntWithSize(x,D->target.sizeof_lua_Number,D); #else // #if defined( LUA_NUMBER_INTEGRAL ) && !defined( LUA_CROSS_COMPILER ) if (D->target.lua_Number_integral) { if (((float)(int)x)!=x) D->status=LUA_ERR_CC_NOTINTEGER; DumpIntWithSize(x,D->target.sizeof_lua_Number,D); } else { switch(D->target.sizeof_lua_Number) { /* do we need bounds checking? */ case 4: { float y=x; MaybeByteSwap((char*)&y,4,D); DumpVar(y,D); } break; case 8: { double y=x; // ARM FPA mode: keep endianness, but swap high and low parts of the // memory representation. This is the default compilation mode for ARM // targets with non-EABI gcc if(D->target.is_arm_fpa) { char *pnum=(char*)&y, temp[4]; memcpy(temp,pnum,4); memcpy(pnum,pnum+4,4); memcpy(pnum+4,temp,4); } MaybeByteSwap((char*)&y,8,D); DumpVar(y,D); } break; default: lua_assert(0); } } #endif // #if defined( LUA_NUMBER_INTEGRAL ) && !defined( LUA_CROSS_COMPILER ) }
static void DumpWString(TString* s, DumpState* D) { if (s==NULL || getwstr(s)==NULL) { size_t size=0; DumpVar(size,D); } else { size_t size=s->tsv.len+1; /* include trailing '\0' */ DumpVector(getwstr(s),size,2,D); } }
static void DumpString (const TString *s, DumpState *D) { if (s == NULL) DumpByte(0, D); else { size_t size = s->len + 1; /* include trailing '\0' */ if (size < 0xFF) DumpByte(cast_int(size), D); else { DumpByte(0xFF, D); DumpVar(size, D); } DumpVector(getstr(s), size - 1, D); /* no need to save '\0' */ } }
static void DumpSize(uint32_t x, DumpState* D) { /* dump unsigned integer */ switch(D->target.sizeof_strsize_t) { case 1: { if (x>0xFF) D->status=LUA_ERR_CC_INTOVERFLOW; DumpChar(x,D); } break; case 2: { if (x>0xFFFF) D->status=LUA_ERR_CC_INTOVERFLOW; uint16_t y=(uint16_t)x; MaybeByteSwap((char*)&y,2,D); DumpVar(y,D); } break; case 4: { /* Reduce bounds to avoid messing 32-bit compilers up */ if (x>0xFFFFFFFE) D->status=LUA_ERR_CC_INTOVERFLOW; uint32_t y=x; MaybeByteSwap((char*)&y,4,D); DumpVar(y,D); } break; default: lua_assert(0); } }
static void DumpIntWithSize(int x, int sizeof_int, DumpState* D) { /* dump signed integer */ switch(sizeof_int) { case 1: { if (x>0x7F || x<(-0x80)) D->status=LUA_ERR_CC_INTOVERFLOW; DumpChar(x,D); } break; case 2: { if (x>0x7FFF || x<(-0x8000)) D->status=LUA_ERR_CC_INTOVERFLOW; int16_t y=(int16_t)x; MaybeByteSwap((char*)&y,2,D); DumpVar(y,D); } break; case 4: { /* Need to reduce bounds by 1 to avoid messing 32-bit compilers up */ if (x>0x7FFFFFFE || x<(-0x7FFFFFFF)) D->status=LUA_ERR_CC_INTOVERFLOW; int32_t y=(int32_t)x; MaybeByteSwap((char*)&y,4,D); DumpVar(y,D); } break; default: lua_assert(0); } }
static void DumpInteger (lua_Integer x, DumpState *D) { DumpVar(x, D); }
static void DumpNumber (lua_Number x, DumpState *D) { DumpVar(x, D); }
static void DumpInt (int x, DumpState *D) { DumpVar(x, D); }
static void DumpByte (int y, DumpState *D) { lu_byte x = (lu_byte)y; DumpVar(x, D); }
static void DumpChar(int y, DumpState* D) { char x=(char)y; DumpVar(x,D); }
static void DumpNumber(ktap_number x, DumpState *D) { DumpVar(x,D); }
static void DumpInt(int x, DumpState* D) { int32_t i = x; DumpVar(i,D); }
static void DumpNumber(double x, DumpState* D) { DumpVar(x,D); }