diff options
author | Jakub Łabor <jacob.labor@gmail.com> | 2022-10-07 14:38:06 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-07 14:38:06 +0200 |
commit | 7c3df66be77df98a46549e72ba4a07d8b06ed6c3 (patch) | |
tree | 1aeb5f49852964f83323996d50b75133aa525f34 | |
parent | a5d55fe6eaa9ba32908cdff5a88215dd2466d415 (diff) |
feat(core): Reorder extension initialization (#16136)
-rw-r--r-- | core/runtime.rs | 5 | ||||
-rw-r--r-- | runtime/ops/io.rs | 12 |
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() |