summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Łabor <jacob.labor@gmail.com>2022-10-07 14:38:06 +0200
committerGitHub <noreply@github.com>2022-10-07 14:38:06 +0200
commit7c3df66be77df98a46549e72ba4a07d8b06ed6c3 (patch)
tree1aeb5f49852964f83323996d50b75133aa525f34
parenta5d55fe6eaa9ba32908cdff5a88215dd2466d415 (diff)
feat(core): Reorder extension initialization (#16136)
-rw-r--r--core/runtime.rs5
-rw-r--r--runtime/ops/io.rs12
2 files changed, 12 insertions, 5 deletions
diff --git a/core/runtime.rs b/core/runtime.rs
index 7c70d4366..f6d688186 100644
--- a/core/runtime.rs
+++ b/core/runtime.rs
@@ -466,14 +466,15 @@ impl JsRuntime {
extensions: options.extensions,
};
+ // Init resources and ops before extensions to make sure they are
+ // available during the initialization process.
+ js_runtime.init_extension_ops().unwrap();
// TODO(@AaronO): diff extensions inited in snapshot and those provided
// for now we assume that snapshot and extensions always match
if !has_startup_snapshot {
let realm = js_runtime.global_realm();
js_runtime.init_extension_js(&realm).unwrap();
}
- // Init extension ops
- js_runtime.init_extension_ops().unwrap();
// Init callbacks (opresolve)
let global_realm = js_runtime.global_realm();
js_runtime.init_cbs(&global_realm);
diff --git a/runtime/ops/io.rs b/runtime/ops/io.rs
index ce2ed252f..18c7fb5e5 100644
--- a/runtime/ops/io.rs
+++ b/runtime/ops/io.rs
@@ -124,7 +124,8 @@ pub fn init_stdio(stdio: Stdio) -> Extension {
.take()
.expect("Extension only supports being used once.");
let t = &mut state.resource_table;
- t.add(StdFileResource::stdio(
+
+ let rid = t.add(StdFileResource::stdio(
match stdio.stdin {
StdioPipe::Inherit => StdFileResourceInner {
kind: StdFileResourceKind::Stdin,
@@ -134,7 +135,9 @@ pub fn init_stdio(stdio: Stdio) -> Extension {
},
"stdin",
));
- t.add(StdFileResource::stdio(
+ assert_eq!(rid, 0, "stdin must have ResourceId 0");
+
+ let rid = t.add(StdFileResource::stdio(
match stdio.stdout {
StdioPipe::Inherit => StdFileResourceInner {
kind: StdFileResourceKind::Stdout,
@@ -144,7 +147,9 @@ pub fn init_stdio(stdio: Stdio) -> Extension {
},
"stdout",
));
- t.add(StdFileResource::stdio(
+ assert_eq!(rid, 1, "stdout must have ResourceId 1");
+
+ let rid = t.add(StdFileResource::stdio(
match stdio.stderr {
StdioPipe::Inherit => StdFileResourceInner {
kind: StdFileResourceKind::Stderr,
@@ -154,6 +159,7 @@ pub fn init_stdio(stdio: Stdio) -> Extension {
},
"stderr",
));
+ assert_eq!(rid, 2, "stderr must have ResourceId 2");
Ok(())
})
.build()