aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pall <mike>2024-07-03 23:59:03 +0200
committerMike Pall <mike>2024-07-03 23:59:03 +0200
commit80384301109e1d769f67f7ad9ecf4931e6b599b9 (patch)
treea6ae2970dc1979cee95ff9869ec4d9d4f63aa3d9
parent6885efb73ea73b053804d4af9a475f14253645da (diff)
parent7a608e4425ce0777f5c980dad9f4fdc1bcce0b8c (diff)
downloadluajit-80384301109e1d769f67f7ad9ecf4931e6b599b9.tar.gz
luajit-80384301109e1d769f67f7ad9ecf4931e6b599b9.tar.bz2
luajit-80384301109e1d769f67f7ad9ecf4931e6b599b9.zip
Merge branch 'master' into v2.1
-rw-r--r--src/jit/bcsave.lua2
-rw-r--r--src/lib_ffi.c2
-rw-r--r--src/lj_crecord.c10
-rw-r--r--src/lj_parse.c6
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
1499void LJ_FASTCALL recff_cdata_arith(jit_State *J, RecordFFData *rd) 1499void 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*/
2518static int predict_next(LexState *ls, FuncState *fs, BCPos pc) 2518static 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);