summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cli/tests/088_dynamic_import_already_evaluating.ts2
-rw-r--r--cli/tests/088_dynamic_import_already_evaluating.ts.out4
-rw-r--r--cli/tests/088_dynamic_import_target.ts3
-rw-r--r--cli/tests/integration_tests.rs5
-rw-r--r--core/runtime.rs12
5 files changed, 17 insertions, 9 deletions
diff --git a/cli/tests/088_dynamic_import_already_evaluating.ts b/cli/tests/088_dynamic_import_already_evaluating.ts
new file mode 100644
index 000000000..272163a5d
--- /dev/null
+++ b/cli/tests/088_dynamic_import_already_evaluating.ts
@@ -0,0 +1,2 @@
+import("./088_dynamic_import_target.ts").then(() => console.log(3));
+import("./088_dynamic_import_target.ts").then(() => console.log(3));
diff --git a/cli/tests/088_dynamic_import_already_evaluating.ts.out b/cli/tests/088_dynamic_import_already_evaluating.ts.out
new file mode 100644
index 000000000..a36dd11e7
--- /dev/null
+++ b/cli/tests/088_dynamic_import_already_evaluating.ts.out
@@ -0,0 +1,4 @@
+[WILDCARD]1
+2
+3
+3
diff --git a/cli/tests/088_dynamic_import_target.ts b/cli/tests/088_dynamic_import_target.ts
new file mode 100644
index 000000000..226f1851a
--- /dev/null
+++ b/cli/tests/088_dynamic_import_target.ts
@@ -0,0 +1,3 @@
+console.log(1);
+await new Promise((r) => setTimeout(r, 100));
+console.log(2);
diff --git a/cli/tests/integration_tests.rs b/cli/tests/integration_tests.rs
index 6589eb135..5f8d5d403 100644
--- a/cli/tests/integration_tests.rs
+++ b/cli/tests/integration_tests.rs
@@ -2841,6 +2841,11 @@ console.log("finish");
output: "087_no_check_imports_not_used_as_values.ts.out",
});
+ itest!(_088_dynamic_import_already_evaluating {
+ args: "run --allow-read 088_dynamic_import_already_evaluating.ts",
+ output: "088_dynamic_import_already_evaluating.ts.out",
+ });
+
itest!(js_import_detect {
args: "run --quiet --reload js_import_detect.ts",
output: "js_import_detect.ts.out",
diff --git a/core/runtime.rs b/core/runtime.rs
index f358cf05e..04c6ca1af 100644
--- a/core/runtime.rs
+++ b/core/runtime.rs
@@ -784,15 +784,9 @@ impl JsRuntime {
module.get_status()
};
- // Since the same module might be dynamically imported more than once,
- // we short-circuit is it is already evaluated.
- if status == v8::ModuleStatus::Evaluated {
- self.dyn_import_done(load_id, id);
- return Ok(());
- }
-
- if status != v8::ModuleStatus::Instantiated {
- return Ok(());
+ match status {
+ v8::ModuleStatus::Instantiated | v8::ModuleStatus::Evaluated => {}
+ _ => return Ok(()),
}
// IMPORTANT: Top-level-await is enabled, which means that return value