summaryrefslogtreecommitdiff
path: root/src/lj_parse.c
diff options
context:
space:
mode:
authorMike Pall <mike>2011-06-09 13:54:40 +0200
committerMike Pall <mike>2011-06-09 13:54:40 +0200
commitb6a7fc5330040564d507eb836ea524acf1c8a759 (patch)
tree656de84811ed3ccba248f55f8eae2a83b39fa435 /src/lj_parse.c
parent96cc99bd6a3f3316202f3d943d82500d8293577a (diff)
downloadluajit2-b6a7fc5330040564d507eb836ea524acf1c8a759.tar.gz
Cleanup prototype flags.
Diffstat (limited to 'src/lj_parse.c')
-rw-r--r--src/lj_parse.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/src/lj_parse.c b/src/lj_parse.c
index bd9d9a7a..f0bb4419 100644
--- a/src/lj_parse.c
+++ b/src/lj_parse.c
@@ -513,6 +513,7 @@ static void expr_toreg_nobranch(FuncState *fs, ExpDesc *e, BCReg reg)
ins = BCINS_AD(BC_KNUM, reg, const_num(fs, e));
#if LJ_HASFFI
} else if (e->k == VKCDATA) {
+ fs->flags |= PROTO_FFI;
ins = BCINS_AD(BC_KCDATA, reg,
const_gc(fs, obj2gco(cdataV(&e->u.nval)), LJ_TCDATA));
#endif
@@ -1120,7 +1121,7 @@ static void fs_fixup_bc(FuncState *fs, GCproto *pt, BCIns *bc, MSize n)
BCInsLine *base = fs->bcbase;
MSize i;
pt->sizebc = n;
- bc[0] = BCINS_AD((fs->flags & PROTO_IS_VARARG) ? BC_FUNCV : BC_FUNCF,
+ bc[0] = BCINS_AD((fs->flags & PROTO_VARARG) ? BC_FUNCV : BC_FUNCF,
fs->framesize, 0);
for (i = 1; i < n; i++)
bc[i] = base[i].ins;
@@ -1336,7 +1337,7 @@ static void fs_fixup_ret(FuncState *fs)
{
BCPos lastpc = fs->pc;
if (lastpc <= fs->lasttarget || !bcopisret(bc_op(fs->bcbase[lastpc-1].ins))) {
- if (fs->flags & PROTO_HAS_FNEW)
+ if (fs->flags & PROTO_CHILD)
bcemit_AJ(fs, BC_UCLO, 0, 0);
bcemit_AD(fs, BC_RET0, 0, 1); /* Need final return. */
}
@@ -1615,7 +1616,7 @@ static BCReg parse_params(LexState *ls, int needself)
var_new(ls, nparams++, lex_str(ls));
} else if (ls->token == TK_dots) {
lj_lex_next(ls);
- fs->flags |= PROTO_IS_VARARG;
+ fs->flags |= PROTO_VARARG;
break;
} else {
err_syntax(ls, LJ_ERR_XPARAM);
@@ -1652,10 +1653,13 @@ static void parse_body(LexState *ls, ExpDesc *e, int needself, BCLine line)
/* Store new prototype in the constant array of the parent. */
expr_init(e, VRELOCABLE,
bcemit_AD(pfs, BC_FNEW, 0, const_gc(pfs, obj2gco(pt), LJ_TPROTO)));
- if (!(pfs->flags & PROTO_HAS_FNEW)) {
+#if LJ_HASFFI
+ pfs->flags |= (fs.flags & PROTO_FFI);
+#endif
+ if (!(pfs->flags & PROTO_CHILD)) {
if (pfs->flags & PROTO_HAS_RETURN)
pfs->flags |= PROTO_FIXUP_RETURN;
- pfs->flags |= PROTO_HAS_FNEW;
+ pfs->flags |= PROTO_CHILD;
}
lj_lex_next(ls);
}
@@ -1781,7 +1785,7 @@ static void expr_simple(LexState *ls, ExpDesc *v)
case TK_dots: { /* Vararg. */
FuncState *fs = ls->fs;
BCReg base;
- checkcond(ls, fs->flags & PROTO_IS_VARARG, LJ_ERR_XDOTS);
+ checkcond(ls, fs->flags & PROTO_VARARG, LJ_ERR_XDOTS);
bcreg_reserve(fs, 1);
base = fs->freereg-1;
expr_init(v, VCALL, bcemit_ABC(fs, BC_VARG, base, 2, fs->numparams));
@@ -2018,7 +2022,7 @@ static void parse_return(LexState *ls)
}
}
}
- if (fs->flags & PROTO_HAS_FNEW)
+ if (fs->flags & PROTO_CHILD)
bcemit_AJ(fs, BC_UCLO, 0, 0); /* May need to close upvalues first. */
bcemit_INS(fs, ins);
}
@@ -2491,7 +2495,7 @@ GCproto *lj_parse(LexState *ls)
fs.numparams = 0;
fs.bcbase = NULL;
fs.bclim = 0;
- fs.flags |= PROTO_IS_VARARG; /* Main chunk is always a vararg func. */
+ fs.flags |= PROTO_VARARG; /* Main chunk is always a vararg func. */
bcemit_AD(&fs, BC_FUNCV, 0, 0); /* Placeholder. */
lj_lex_next(ls); /* Read-ahead first token. */
parse_chunk(ls);