]> git.kaiwu.me - quickjs.git/commitdiff
added Error cause
authorFabrice Bellard <fabrice@bellard.org>
Tue, 2 Jan 2024 15:08:08 +0000 (16:08 +0100)
committerFabrice Bellard <fabrice@bellard.org>
Tue, 2 Jan 2024 15:08:08 +0000 (16:08 +0100)
TODO
quickjs-atom.h
quickjs.c
test262.conf

diff --git a/TODO b/TODO
index f17eb1978f9e54e03ea639acf914caf7af081668..aba5731c8b56b473e95c096509985cc46c14d426 100644 (file)
--- a/TODO
+++ b/TODO
@@ -63,5 +63,5 @@ Optimization ideas:
 Test262o:   0/11262 errors, 463 excluded
 Test262o commit: 7da91bceb9ce7613f87db47ddd1292a2dda58b42 (es5-tests branch)
 
-Result: 16/76773 errors, 1497 excluded, 8204 skipped
+Result: 16/76783 errors, 1497 excluded, 8199 skipped
 Test262 commit: 6cbb6da9473c56d95358d8e679c5a6d2b4574efb
index e931c31f3c67d96a9bcd65168d7bb9c7d06306ec..f62a7c40eb966945f4438e46bfb522b9178558f6 100644 (file)
@@ -82,6 +82,7 @@ DEF(length, "length")
 DEF(fileName, "fileName")
 DEF(lineNumber, "lineNumber")
 DEF(message, "message")
+DEF(cause, "cause")
 DEF(errors, "errors")
 DEF(stack, "stack")
 DEF(name, "name")
index 719fde128b159a06a1fa6fa4dba8450732018ee0..7eaee1a5fd8b4c51be80ec1ce63b7fb5556af069 100644 (file)
--- a/quickjs.c
+++ b/quickjs.c
@@ -38204,7 +38204,8 @@ static JSValue js_error_constructor(JSContext *ctx, JSValueConst new_target,
                                     int argc, JSValueConst *argv, int magic)
 {
     JSValue obj, msg, proto;
-    JSValueConst message;
+    JSValueConst message, options;
+    int arg_index;
 
     if (JS_IsUndefined(new_target))
         new_target = JS_GetActiveFunction(ctx);
@@ -38230,12 +38231,9 @@ static JSValue js_error_constructor(JSContext *ctx, JSValueConst new_target,
     JS_FreeValue(ctx, proto);
     if (JS_IsException(obj))
         return obj;
-    if (magic == JS_AGGREGATE_ERROR) {
-        message = argv[1];
-    } else {
-        message = argv[0];
-    }
+    arg_index = (magic == JS_AGGREGATE_ERROR);
 
+    message = argv[arg_index++];
     if (!JS_IsUndefined(message)) {
         msg = JS_ToString(ctx, message);
         if (unlikely(JS_IsException(msg)))
@@ -38244,6 +38242,22 @@ static JSValue js_error_constructor(JSContext *ctx, JSValueConst new_target,
                                JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE);
     }
 
+    if (arg_index < argc) {
+        options = argv[arg_index];
+        if (JS_IsObject(options)) {
+            int present = JS_HasProperty(ctx, options, JS_ATOM_cause);
+            if (present < 0)
+                goto exception;
+            if (present) {
+                JSValue cause = JS_GetProperty(ctx, options, JS_ATOM_cause);
+                if (JS_IsException(cause))
+                    goto exception;
+                JS_DefinePropertyValue(ctx, obj, JS_ATOM_cause, cause,
+                                       JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE);
+            }
+        }
+    }
+
     if (magic == JS_AGGREGATE_ERROR) {
         JSValue error_list = iterator_to_array(ctx, argv[0]);
         if (JS_IsException(error_list))
index 6dca0fe10899f1561884f5b8d3043d2be0e04ce7..4dc69873ae477f40877e9d3966fd019d462f0344 100644 (file)
@@ -102,7 +102,7 @@ default-parameters
 destructuring-assignment
 destructuring-binding
 dynamic-import
-error-cause=skip
+error-cause
 exponentiation
 export-star-as-namespace-from-module
 FinalizationGroup=skip