add lua_clonefunction for lua 5.3

This commit is contained in:
Cloud Wu
2015-01-22 14:13:26 +08:00
parent 93da2dbfc9
commit b891146397
15 changed files with 246 additions and 160 deletions

View File

@@ -100,7 +100,7 @@ static TString *LoadString (LoadState *S) {
}
static void LoadCode (LoadState *S, Proto *f) {
static void LoadCode (LoadState *S, SharedProto *f) {
int n = LoadInt(S);
f->code = luaM_newvector(S->L, n, Instruction);
f->sizecode = n;
@@ -115,7 +115,7 @@ static void LoadConstants (LoadState *S, Proto *f) {
int i;
int n = LoadInt(S);
f->k = luaM_newvector(S->L, n, TValue);
f->sizek = n;
f->sp->sizek = n;
for (i = 0; i < n; i++)
setnilvalue(&f->k[i]);
for (i = 0; i < n; i++) {
@@ -149,17 +149,17 @@ static void LoadProtos (LoadState *S, Proto *f) {
int i;
int n = LoadInt(S);
f->p = luaM_newvector(S->L, n, Proto *);
f->sizep = n;
f->sp->sizep = n;
for (i = 0; i < n; i++)
f->p[i] = NULL;
for (i = 0; i < n; i++) {
f->p[i] = luaF_newproto(S->L);
LoadFunction(S, f->p[i], f->source);
f->p[i] = luaF_newproto(S->L, NULL);
LoadFunction(S, f->p[i], f->sp->source);
}
}
static void LoadUpvalues (LoadState *S, Proto *f) {
static void LoadUpvalues (LoadState *S, SharedProto *f) {
int i, n;
n = LoadInt(S);
f->upvalues = luaM_newvector(S->L, n, Upvaldesc);
@@ -173,7 +173,7 @@ static void LoadUpvalues (LoadState *S, Proto *f) {
}
static void LoadDebug (LoadState *S, Proto *f) {
static void LoadDebug (LoadState *S, SharedProto *f) {
int i, n;
n = LoadInt(S);
f->lineinfo = luaM_newvector(S->L, n, int);
@@ -195,7 +195,8 @@ static void LoadDebug (LoadState *S, Proto *f) {
}
static void LoadFunction (LoadState *S, Proto *f, TString *psource) {
static void LoadFunction (LoadState *S, Proto *fp, TString *psource) {
SharedProto *f = fp->sp;
f->source = LoadString(S);
if (f->source == NULL) /* no source in dump? */
f->source = psource; /* reuse parent's source */
@@ -205,9 +206,9 @@ static void LoadFunction (LoadState *S, Proto *f, TString *psource) {
f->is_vararg = LoadByte(S);
f->maxstacksize = LoadByte(S);
LoadCode(S, f);
LoadConstants(S, f);
LoadConstants(S, fp);
LoadUpvalues(S, f);
LoadProtos(S, f);
LoadProtos(S, fp);
LoadDebug(S, f);
}
@@ -268,7 +269,7 @@ LClosure *luaU_undump(lua_State *L, ZIO *Z, Mbuffer *buff,
cl = luaF_newLclosure(L, LoadByte(&S));
setclLvalue(L, L->top, cl);
incr_top(L);
cl->p = luaF_newproto(L);
cl->p = luaF_newproto(L, NULL);
LoadFunction(&S, cl->p, NULL);
lua_assert(cl->nupvalues == cl->p->sizeupvalues);
luai_verifycode(L, buff, cl->p);