aboutsummaryrefslogtreecommitdiff
path: root/src/lj_parse.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lj_parse.c')
-rw-r--r--src/lj_parse.c14
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. */
1521static 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. */
1533static void fs_fixup_ret(FuncState *fs) 1521static 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. */