diff options
author | Mike Pall <mike> | 2024-07-03 23:59:03 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2024-07-03 23:59:03 +0200 |
commit | 80384301109e1d769f67f7ad9ecf4931e6b599b9 (patch) | |
tree | a6ae2970dc1979cee95ff9869ec4d9d4f63aa3d9 | |
parent | 6885efb73ea73b053804d4af9a475f14253645da (diff) | |
parent | 7a608e4425ce0777f5c980dad9f4fdc1bcce0b8c (diff) | |
download | luajit-80384301109e1d769f67f7ad9ecf4931e6b599b9.tar.gz luajit-80384301109e1d769f67f7ad9ecf4931e6b599b9.tar.bz2 luajit-80384301109e1d769f67f7ad9ecf4931e6b599b9.zip |
Merge branch 'master' into v2.1
-rw-r--r-- | src/jit/bcsave.lua | 2 | ||||
-rw-r--r-- | src/lib_ffi.c | 2 | ||||
-rw-r--r-- | src/lj_crecord.c | 10 | ||||
-rw-r--r-- | src/lj_parse.c | 6 |
4 files changed, 10 insertions, 10 deletions
diff --git a/src/jit/bcsave.lua b/src/jit/bcsave.lua index 0d79a70e..48378819 100644 --- a/src/jit/bcsave.lua +++ b/src/jit/bcsave.lua | |||
@@ -511,7 +511,7 @@ typedef struct { | |||
511 | o.sym_entry.strx = 1 | 511 | o.sym_entry.strx = 1 |
512 | ffi.copy(o.space+1, symname) | 512 | ffi.copy(o.space+1, symname) |
513 | 513 | ||
514 | -- Write Macho-O object file. | 514 | -- Write Mach-O object file. |
515 | local fp = savefile(output, "wb") | 515 | local fp = savefile(output, "wb") |
516 | fp:write(ffi.string(o, mach_size)) | 516 | fp:write(ffi.string(o, mach_size)) |
517 | bcsave_tail(fp, output, s) | 517 | bcsave_tail(fp, output, s) |
diff --git a/src/lib_ffi.c b/src/lib_ffi.c index fb7f86f3..ddeb10c5 100644 --- a/src/lib_ffi.c +++ b/src/lib_ffi.c | |||
@@ -305,7 +305,7 @@ LJLIB_CF(ffi_meta___tostring) | |||
305 | p = *(void **)p; | 305 | p = *(void **)p; |
306 | } else if (ctype_isenum(ct->info)) { | 306 | } else if (ctype_isenum(ct->info)) { |
307 | msg = "cdata<%s>: %d"; | 307 | msg = "cdata<%s>: %d"; |
308 | p = (void *)(uintptr_t)*(uint32_t **)p; | 308 | p = (void *)(uintptr_t)*(uint32_t *)p; |
309 | } else { | 309 | } else { |
310 | if (ctype_isptr(ct->info)) { | 310 | if (ctype_isptr(ct->info)) { |
311 | p = cdata_getptr(p, ct->size); | 311 | p = cdata_getptr(p, ct->size); |
diff --git a/src/lj_crecord.c b/src/lj_crecord.c index 55d0b3ef..79159454 100644 --- a/src/lj_crecord.c +++ b/src/lj_crecord.c | |||
@@ -1498,7 +1498,8 @@ static TRef crec_arith_meta(jit_State *J, TRef *sp, CType **s, CTState *cts, | |||
1498 | 1498 | ||
1499 | void LJ_FASTCALL recff_cdata_arith(jit_State *J, RecordFFData *rd) | 1499 | void LJ_FASTCALL recff_cdata_arith(jit_State *J, RecordFFData *rd) |
1500 | { | 1500 | { |
1501 | CTState *cts = ctype_ctsG(J2G(J)); | 1501 | CTState *cts = ctype_cts(J->L); |
1502 | MMS mm = (MMS)rd->data; | ||
1502 | TRef sp[2]; | 1503 | TRef sp[2]; |
1503 | CType *s[2]; | 1504 | CType *s[2]; |
1504 | MSize i; | 1505 | MSize i; |
@@ -1548,6 +1549,8 @@ void LJ_FASTCALL recff_cdata_arith(jit_State *J, RecordFFData *rd) | |||
1548 | } | 1549 | } |
1549 | } | 1550 | } |
1550 | } else if (tref_isnil(tr)) { | 1551 | } else if (tref_isnil(tr)) { |
1552 | if (!(mm == MM_len || mm == MM_eq || mm == MM_lt || mm == MM_le)) | ||
1553 | lj_trace_err(J, LJ_TRERR_BADTYPE); | ||
1551 | tr = lj_ir_kptr(J, NULL); | 1554 | tr = lj_ir_kptr(J, NULL); |
1552 | ct = ctype_get(cts, CTID_P_VOID); | 1555 | ct = ctype_get(cts, CTID_P_VOID); |
1553 | } else if (tref_isinteger(tr)) { | 1556 | } else if (tref_isinteger(tr)) { |
@@ -1566,12 +1569,12 @@ void LJ_FASTCALL recff_cdata_arith(jit_State *J, RecordFFData *rd) | |||
1566 | ct = ctype_child(cts, cct); | 1569 | ct = ctype_child(cts, cct); |
1567 | tr = lj_ir_kint(J, (int32_t)ofs); | 1570 | tr = lj_ir_kint(J, (int32_t)ofs); |
1568 | } else { /* Interpreter will throw or return false. */ | 1571 | } else { /* Interpreter will throw or return false. */ |
1569 | ct = ctype_get(cts, CTID_P_VOID); | 1572 | lj_trace_err(J, LJ_TRERR_BADTYPE); |
1570 | } | 1573 | } |
1571 | } else if (ctype_isptr(ct->info)) { | 1574 | } else if (ctype_isptr(ct->info)) { |
1572 | tr = emitir(IRT(IR_ADD, IRT_PTR), tr, lj_ir_kintp(J, sizeof(GCstr))); | 1575 | tr = emitir(IRT(IR_ADD, IRT_PTR), tr, lj_ir_kintp(J, sizeof(GCstr))); |
1573 | } else { | 1576 | } else { |
1574 | ct = ctype_get(cts, CTID_P_VOID); | 1577 | lj_trace_err(J, LJ_TRERR_BADTYPE); |
1575 | } | 1578 | } |
1576 | } else if (!tref_isnum(tr)) { | 1579 | } else if (!tref_isnum(tr)) { |
1577 | tr = 0; | 1580 | tr = 0; |
@@ -1583,7 +1586,6 @@ void LJ_FASTCALL recff_cdata_arith(jit_State *J, RecordFFData *rd) | |||
1583 | } | 1586 | } |
1584 | { | 1587 | { |
1585 | TRef tr; | 1588 | TRef tr; |
1586 | MMS mm = (MMS)rd->data; | ||
1587 | if ((mm == MM_len || mm == MM_concat || | 1589 | if ((mm == MM_len || mm == MM_concat || |
1588 | (!(tr = crec_arith_int64(J, sp, s, mm)) && | 1590 | (!(tr = crec_arith_int64(J, sp, s, mm)) && |
1589 | !(tr = crec_arith_ptr(J, sp, s, mm)))) && | 1591 | !(tr = crec_arith_ptr(J, sp, s, mm)))) && |
diff --git a/src/lj_parse.c b/src/lj_parse.c index 5a44f8db..db3ce8e7 100644 --- a/src/lj_parse.c +++ b/src/lj_parse.c | |||
@@ -2517,11 +2517,9 @@ static void parse_for_num(LexState *ls, GCstr *varname, BCLine line) | |||
2517 | */ | 2517 | */ |
2518 | static int predict_next(LexState *ls, FuncState *fs, BCPos pc) | 2518 | static int predict_next(LexState *ls, FuncState *fs, BCPos pc) |
2519 | { | 2519 | { |
2520 | BCIns ins; | 2520 | BCIns ins = fs->bcbase[pc].ins; |
2521 | GCstr *name; | 2521 | GCstr *name; |
2522 | cTValue *o; | 2522 | cTValue *o; |
2523 | if (pc >= fs->bclim) return 0; | ||
2524 | ins = fs->bcbase[pc].ins; | ||
2525 | switch (bc_op(ins)) { | 2523 | switch (bc_op(ins)) { |
2526 | case BC_MOV: | 2524 | case BC_MOV: |
2527 | if (bc_d(ins) >= fs->nactvar) return 0; | 2525 | if (bc_d(ins) >= fs->nactvar) return 0; |
@@ -2570,7 +2568,7 @@ static void parse_for_iter(LexState *ls, GCstr *indexname) | |||
2570 | assign_adjust(ls, 3, expr_list(ls, &e), &e); | 2568 | assign_adjust(ls, 3, expr_list(ls, &e), &e); |
2571 | /* The iterator needs another 3 [4] slots (func [pc] | state ctl). */ | 2569 | /* The iterator needs another 3 [4] slots (func [pc] | state ctl). */ |
2572 | bcreg_bump(fs, 3+ls->fr2); | 2570 | bcreg_bump(fs, 3+ls->fr2); |
2573 | isnext = (nvars <= 5 && predict_next(ls, fs, exprpc)); | 2571 | isnext = (nvars <= 5 && fs->pc > exprpc && predict_next(ls, fs, exprpc)); |
2574 | var_add(ls, 3); /* Hidden control variables. */ | 2572 | var_add(ls, 3); /* Hidden control variables. */ |
2575 | lex_check(ls, TK_do); | 2573 | lex_check(ls, TK_do); |
2576 | loop = bcemit_AJ(fs, isnext ? BC_ISNEXT : BC_JMP, base, NO_JMP); | 2574 | loop = bcemit_AJ(fs, isnext ? BC_ISNEXT : BC_JMP, base, NO_JMP); |