Skip to content

Commit 7b18aaa

Browse files
committed
Expose ScriptEnvironmentPreparer to Rust
Signed-off-by: Delan Azabani <[email protected]>
1 parent 44c36b5 commit 7b18aaa

File tree

1 file changed

+19
-0
lines changed

1 file changed

+19
-0
lines changed

mozjs-sys/src/jsglue.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,21 @@ class RustJobQueue : public JS::JobQueue {
173173
}
174174
};
175175

176+
struct RustEnvironmentPreparer : public js::ScriptEnvironmentPreparer {
177+
JSContext* cx;
178+
explicit RustEnvironmentPreparer(JSContext* cx) : cx(cx) {}
179+
void invoke(JS::HandleObject global, Closure& closure) override {
180+
MOZ_ASSERT(JS_IsGlobalObject(global));
181+
MOZ_ASSERT(!JS_IsExceptionPending(cx));
182+
183+
AutoRealm ar(cx, global);
184+
AutoReportException are(cx);
185+
if (!closure(cx)) {
186+
return;
187+
}
188+
}
189+
}
190+
176191
struct JSExternalStringCallbacksTraps {
177192
void (*latin1Finalize)(const void* privateData, JS::Latin1Char* chars);
178193
void (*utf16Finalize)(const void* privateData, char16_t* chars);
@@ -1106,6 +1121,10 @@ JS::JobQueue* CreateJobQueue(const JobQueueTraps* aTraps, const void* aQueue,
11061121

11071122
void DeleteJobQueue(JS::JobQueue* queue) { delete queue; }
11081123

1124+
void InitScriptEnvironmentPreparer(JSContext* cx) {
1125+
js::SetScriptEnvironmentPreparer(cx, new RustEnvironmentPreparer(cx));
1126+
}
1127+
11091128
JSExternalStringCallbacks* CreateJSExternalStringCallbacks(
11101129
const JSExternalStringCallbacksTraps* aTraps, void* privateData) {
11111130
return new RustJSExternalStringCallbacks(*aTraps, privateData);

0 commit comments

Comments
 (0)