static void LoadCode(LoadState* S, Proto* f) { int n=LoadInt(S); Align4(S); if (!luaZ_direct_mode(S->Z)) { f->code=luaM_newvector(S->L,n,Instruction); LoadVector(S,f->code,n,sizeof(Instruction)); } else { f->code=(Instruction*)luaZ_get_crt_address(S->Z); LoadVector(S,NULL,n,sizeof(Instruction)); } f->sizecode=n; }
static TString* LoadString(LoadState* S) { int32_t size; LoadVar(S,size); if (size==0) return NULL; else { char* s; if (!luaZ_direct_mode(S->Z)) { s = luaZ_openspace(S->L,S->b,size); LoadBlock(S,s,size); return luaS_newlstr(S->L,s,size-1); /* remove trailing zero */ } else { s = (char*)luaZ_get_crt_address(S->Z); LoadBlock(S,NULL,size); return luaS_newrolstr(S->L,s,size-1); } } }
for (i=0; i<n; i++) f->p[i]=LoadFunction(S,f->source); } static void LoadDebug(LoadState* S, Proto* f) { int i,n; n=LoadInt(S); Align4(S); #ifdef LUA_OPTIMIZE_DEBUG if(n) { if (!luaZ_direct_mode(S->Z)) { f->packedlineinfo=luaM_newvector(S->L,n,unsigned char); LoadBlock(S,f->packedlineinfo,n); } else { f->packedlineinfo=(unsigned char*)luaZ_get_crt_address(S->Z); LoadBlock(S,NULL,n); } } else { f->packedlineinfo=NULL; } #else if (!luaZ_direct_mode(S->Z)) { f->lineinfo=luaM_newvector(S->L,n,int); LoadVector(S,f->lineinfo,n,sizeof(int)); } else { f->lineinfo=(int*)luaZ_get_crt_address(S->Z); LoadVector(S,NULL,n,sizeof(int)); } f->sizelineinfo=n; #endif