fixed text runner
This commit is contained in:
@@ -33267,11 +33267,14 @@ static JSValue JS_CallRegisterVM(JSContext *ctx, JSCodeRegister *code,
|
|||||||
JSValue arr = frame->slots[a];
|
JSValue arr = frame->slots[a];
|
||||||
JSValue val = frame->slots[b];
|
JSValue val = frame->slots[b];
|
||||||
if (!JS_IsArray(arr)) goto disrupt;
|
if (!JS_IsArray(arr)) goto disrupt;
|
||||||
JSValue arr_ref = arr;
|
JSGCRef arr_gc;
|
||||||
int rc = JS_ArrayPush(ctx, &arr_ref, val);
|
JS_PushGCRef(ctx, &arr_gc);
|
||||||
|
arr_gc.val = arr;
|
||||||
|
int rc = JS_ArrayPush(ctx, &arr_gc.val, val);
|
||||||
frame = (JSFrameRegister *)JS_VALUE_GET_PTR(frame_ref.val);
|
frame = (JSFrameRegister *)JS_VALUE_GET_PTR(frame_ref.val);
|
||||||
|
JS_PopGCRef(ctx, &arr_gc);
|
||||||
if (rc < 0) goto disrupt;
|
if (rc < 0) goto disrupt;
|
||||||
if (arr_ref != arr) frame->slots[a] = arr_ref;
|
if (arr_gc.val != arr) frame->slots[a] = arr_gc.val;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
26
vm_suite.ce
26
vm_suite.ce
@@ -4,27 +4,33 @@
|
|||||||
|
|
||||||
var passed = 0
|
var passed = 0
|
||||||
var failed = 0
|
var failed = 0
|
||||||
var errors = []
|
var error_names = []
|
||||||
|
var error_reasons = []
|
||||||
var fail_msg = ""
|
var fail_msg = ""
|
||||||
|
|
||||||
|
// pre-allocate 500 slots to avoid array growth during disruption handlers
|
||||||
|
for (var _i = 0; _i < 500; _i++) {
|
||||||
|
error_names[] = null
|
||||||
|
error_reasons[] = null
|
||||||
|
}
|
||||||
|
|
||||||
var fail = function(msg) {
|
var fail = function(msg) {
|
||||||
fail_msg = msg
|
fail_msg = msg
|
||||||
print("failed: " + msg)
|
|
||||||
disrupt
|
disrupt
|
||||||
}
|
}
|
||||||
|
|
||||||
var assert_eq = function(actual, expected, msg) {
|
var assert_eq = function(actual, expected, msg) {
|
||||||
if (actual != expected) fail(msg + " (expected=" + text(expected) + " got=" + text(actual) + ")")
|
if (actual != expected) fail(msg + " (got=" + text(actual) + ")")
|
||||||
}
|
}
|
||||||
|
|
||||||
var run = function(name, fn) {
|
var run = function(name, fn) {
|
||||||
fail_msg = ""
|
fail_msg = ""
|
||||||
fn()
|
fn()
|
||||||
passed = passed + 1
|
passed = passed + 1
|
||||||
print("passed " + name)
|
|
||||||
} disruption {
|
} disruption {
|
||||||
|
error_names[failed] = name
|
||||||
|
error_reasons[failed] = fail_msg == "" ? "disruption" : fail_msg
|
||||||
failed = failed + 1
|
failed = failed + 1
|
||||||
errors[] = name
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var should_disrupt = function(fn) {
|
var should_disrupt = function(fn) {
|
||||||
@@ -3367,10 +3373,10 @@ run("gc object from keys function under pressure", function() {
|
|||||||
// SUMMARY
|
// SUMMARY
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
|
|
||||||
print(`\nResults: ${passed} passed, ${failed} failed out of ${passed + failed}`)
|
print(text(passed) + " passed, " + text(failed) + " failed out of " + text(passed + failed))
|
||||||
if (failed > 0) {
|
if (failed > 0) {
|
||||||
print("Failed tests:")
|
print("")
|
||||||
arrfor(errors, function(name) {
|
for (var _j = 0; _j < failed; _j++) {
|
||||||
print(` - ${name}`)
|
print(" FAIL " + error_names[_j] + ": " + error_reasons[_j])
|
||||||
})
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user