diff options
author | Cre3per <12541974+Cre3per@users.noreply.github.com> | 2022-10-16 21:16:46 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-16 21:16:46 +0200 |
commit | cf1be5e76fc8d62357f1f4a51e610bd4f07a7927 (patch) | |
tree | 5b200fc717787bea2eeee27d0459d563220b55fa | |
parent | 5252ff5dbd1e2adc9e38407be7ea50549612c543 (diff) |
fix: add error cause in recursive cause tail (#16306)
-rw-r--r-- | cli/tests/integration/run_tests.rs | 6 | ||||
-rw-r--r-- | cli/tests/testdata/error_cause_recursive_tail.ts | 5 | ||||
-rw-r--r-- | cli/tests/testdata/error_cause_recursive_tail.ts.out | 12 | ||||
-rw-r--r-- | core/error.rs | 6 |
4 files changed, 26 insertions, 3 deletions
diff --git a/cli/tests/integration/run_tests.rs b/cli/tests/integration/run_tests.rs index f9daa7aa7..004acb469 100644 --- a/cli/tests/integration/run_tests.rs +++ b/cli/tests/integration/run_tests.rs @@ -3374,6 +3374,12 @@ itest!(error_cause { exit_code: 1, }); +itest!(error_cause_recursive_tail { + args: "run error_cause_recursive_tail.ts", + output: "error_cause_recursive_tail.ts.out", + exit_code: 1, +}); + itest!(error_cause_recursive { args: "run run/error_cause_recursive.ts", output: "run/error_cause_recursive.ts.out", diff --git a/cli/tests/testdata/error_cause_recursive_tail.ts b/cli/tests/testdata/error_cause_recursive_tail.ts new file mode 100644 index 000000000..51e7fa6d9 --- /dev/null +++ b/cli/tests/testdata/error_cause_recursive_tail.ts @@ -0,0 +1,5 @@ +const foo = new Error("foo"); +const bar = new Error("bar", { cause: foo }); +const baz = new Error("baz", { cause: bar }); +foo.cause = bar; +throw baz; diff --git a/cli/tests/testdata/error_cause_recursive_tail.ts.out b/cli/tests/testdata/error_cause_recursive_tail.ts.out new file mode 100644 index 000000000..6aaecdb80 --- /dev/null +++ b/cli/tests/testdata/error_cause_recursive_tail.ts.out @@ -0,0 +1,12 @@ +[WILDCARD] +error: Uncaught Error: baz +const baz = new Error("baz", { cause: bar }); + ^ + at file:///[WILDCARD]/error_cause_recursive_tail.ts:3:13 +Caused by: Error: bar + at file:///[WILDCARD]/error_cause_recursive_tail.ts:2:13 +Caused by: Error: foo + at file:///[WILDCARD]/error_cause_recursive_tail.ts:1:13 +Caused by: Error: bar + at file:///[WILDCARD]/error_cause_recursive_tail.ts:2:13 +[WILDCARD] diff --git a/core/error.rs b/core/error.rs index 7af6ad375..626f9b6f2 100644 --- a/core/error.rs +++ b/core/error.rs @@ -209,7 +209,7 @@ impl JsError { fn inner_from_v8_exception<'a>( scope: &'a mut v8::HandleScope, exception: v8::Local<'a, v8::Value>, - mut seen: HashSet<v8::Local<'a, v8::Value>>, + mut seen: HashSet<v8::Local<'a, v8::Object>>, ) -> Self { // Create a new HandleScope because we're creating a lot of new local // handles below. @@ -254,10 +254,10 @@ impl JsError { } }); let cause = cause.and_then(|cause| { - if cause.is_undefined() || seen.contains(&cause) { + if cause.is_undefined() || seen.contains(&exception) { None } else { - seen.insert(cause); + seen.insert(exception); Some(Box::new(JsError::inner_from_v8_exception( scope, cause, seen, ))) |