1 test failing now

This commit is contained in:
2026-02-07 12:50:26 -06:00
parent 31d67f6710
commit 32fb44857c

View File

@@ -31982,16 +31982,26 @@ static int mach_compile_expr(MachCompState *cs, cJSON *node, int dest) {
cJSON *elems = cJSON_GetObjectItem(node, "list");
int count = elems ? cJSON_GetArraySize(elems) : 0;
/* Reserve consecutive regs for elements starting at dest+1 */
/* Reserve consecutive regs for elements starting at arr_base+1.
If dest is below freereg, other temps occupy dest+1..freereg-1
so we must use a fresh base to avoid clobbering them. */
int save = cs->freereg;
cs->freereg = dest + 1;
int arr_base;
if (dest + 1 >= cs->freereg) {
arr_base = dest;
cs->freereg = dest + 1;
} else {
arr_base = mach_reserve_reg(cs);
}
for (int i = 0; i < count; i++) {
int er = mach_reserve_reg(cs);
cJSON *elem = cJSON_GetArrayItem(elems, i);
int r = mach_compile_expr(cs, elem, er);
if (r != er) mach_emit(cs, MACH_ABC(MACH_MOVE, er, r, 0));
}
mach_emit(cs, MACH_ABC(MACH_NEWARRAY, dest, count, 0));
mach_emit(cs, MACH_ABC(MACH_NEWARRAY, arr_base, count, 0));
if (arr_base != dest)
mach_emit(cs, MACH_ABC(MACH_MOVE, dest, arr_base, 0));
mach_free_reg_to(cs, save);
return dest;
}
@@ -32903,10 +32913,14 @@ static JSValue reg_vm_binop(JSContext *ctx, int op, JSValue a, JSValue b) {
/* Comparison ops allow mixed types — return false for mismatches */
if (op >= MACH_EQ && op <= MACH_GE) {
/* Fast path: bitwise-identical values (same object/pointer) */
if (a == b) {
if (op == MACH_EQ || op == MACH_LE || op == MACH_GE) return JS_TRUE;
if (op == MACH_NEQ) return JS_FALSE;
/* Fast path: identical values (chase pointers for forwarded objects) */
{
JSValue ca = JS_IsPtr(a) ? JS_MKPTR(chase(a)) : a;
JSValue cb = JS_IsPtr(b) ? JS_MKPTR(chase(b)) : b;
if (ca == cb) {
if (op == MACH_EQ || op == MACH_LE || op == MACH_GE) return JS_TRUE;
if (op == MACH_NEQ) return JS_FALSE;
}
}
if (JS_IsNumber(a) && JS_IsNumber(b)) {
double da, db;