diff options
Diffstat (limited to 'src/lj_record.c')
-rw-r--r-- | src/lj_record.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/lj_record.c b/src/lj_record.c index 7336e0ac..003910a9 100644 --- a/src/lj_record.c +++ b/src/lj_record.c | |||
@@ -1826,6 +1826,18 @@ void lj_record_ins(jit_State *J) | |||
1826 | J->maxslot = bc_a(pc[1]); /* Shrink used slots. */ | 1826 | J->maxslot = bc_a(pc[1]); /* Shrink used slots. */ |
1827 | break; | 1827 | break; |
1828 | 1828 | ||
1829 | case BC_ISTYPE: case BC_ISNUM: | ||
1830 | /* These coercions need to correspond with lj_meta_istype(). */ | ||
1831 | if (LJ_DUALNUM && rc == ~LJ_TNUMX+1) | ||
1832 | ra = lj_opt_narrow_toint(J, ra); | ||
1833 | else if (rc == ~LJ_TNUMX+2) | ||
1834 | ra = lj_ir_tonum(J, ra); | ||
1835 | else if (rc == ~LJ_TSTR+1) | ||
1836 | ra = lj_ir_tostr(J, ra); | ||
1837 | /* else: type specialization suffices. */ | ||
1838 | J->base[bc_a(ins)] = ra; | ||
1839 | break; | ||
1840 | |||
1829 | /* -- Unary ops --------------------------------------------------------- */ | 1841 | /* -- Unary ops --------------------------------------------------------- */ |
1830 | 1842 | ||
1831 | case BC_NOT: | 1843 | case BC_NOT: |
@@ -1937,6 +1949,10 @@ void lj_record_ins(jit_State *J) | |||
1937 | ix.idxchain = LJ_MAX_IDXCHAIN; | 1949 | ix.idxchain = LJ_MAX_IDXCHAIN; |
1938 | rc = lj_record_idx(J, &ix); | 1950 | rc = lj_record_idx(J, &ix); |
1939 | break; | 1951 | break; |
1952 | case BC_TGETR: case BC_TSETR: | ||
1953 | ix.idxchain = 0; | ||
1954 | rc = lj_record_idx(J, &ix); | ||
1955 | break; | ||
1940 | 1956 | ||
1941 | case BC_TNEW: | 1957 | case BC_TNEW: |
1942 | rc = rec_tnew(J, rc); | 1958 | rc = rec_tnew(J, rc); |