diff options
Diffstat (limited to 'src/lj_parse.c')
-rw-r--r-- | src/lj_parse.c | 14 |
1 files changed, 1 insertions, 13 deletions
diff --git a/src/lj_parse.c b/src/lj_parse.c index f4116380..e326432a 100644 --- a/src/lj_parse.c +++ b/src/lj_parse.c | |||
@@ -1517,23 +1517,11 @@ static void fs_fixup_var(LexState *ls, GCproto *pt, uint8_t *p, size_t ofsvar) | |||
1517 | 1517 | ||
1518 | #endif | 1518 | #endif |
1519 | 1519 | ||
1520 | /* Check if bytecode op returns. */ | ||
1521 | static int bcopisret(BCOp op) | ||
1522 | { | ||
1523 | switch (op) { | ||
1524 | case BC_CALLMT: case BC_CALLT: | ||
1525 | case BC_RETM: case BC_RET: case BC_RET0: case BC_RET1: | ||
1526 | return 1; | ||
1527 | default: | ||
1528 | return 0; | ||
1529 | } | ||
1530 | } | ||
1531 | |||
1532 | /* Fixup return instruction for prototype. */ | 1520 | /* Fixup return instruction for prototype. */ |
1533 | static void fs_fixup_ret(FuncState *fs) | 1521 | static void fs_fixup_ret(FuncState *fs) |
1534 | { | 1522 | { |
1535 | BCPos lastpc = fs->pc; | 1523 | BCPos lastpc = fs->pc; |
1536 | if (lastpc <= fs->lasttarget || !bcopisret(bc_op(fs->bcbase[lastpc-1].ins))) { | 1524 | if (lastpc <= fs->lasttarget || !bc_isret_or_tail(bc_op(fs->bcbase[lastpc-1].ins))) { |
1537 | if ((fs->bl->flags & FSCOPE_UPVAL)) | 1525 | if ((fs->bl->flags & FSCOPE_UPVAL)) |
1538 | bcemit_AJ(fs, BC_UCLO, 0, 0); | 1526 | bcemit_AJ(fs, BC_UCLO, 0, 0); |
1539 | bcemit_AD(fs, BC_RET0, 0, 1); /* Need final return. */ | 1527 | bcemit_AD(fs, BC_RET0, 0, 1); /* Need final return. */ |