Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Normative: Propagate active ScriptOrModule with JobCallback Record #3195

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 26 additions & 4 deletions spec.html
Original file line number Diff line number Diff line change
Expand Up @@ -12009,6 +12009,17 @@ <h1>JobCallback Records</h1>
The function to invoke when the Job is invoked.
</td>
</tr>
<tr>
<td>
[[ScriptOrModule]]
</td>
<td>
a Script Record or a Module Record
</td>
<td>
The script or module in which the Job was created.
</td>
</tr>
<tr>
<td>
[[HostDefined]]
Expand All @@ -12034,11 +12045,12 @@ <h1>
</dl>
<p>An implementation of HostMakeJobCallback must conform to the following requirements:</p>
<ul>
<li>It must return a JobCallback Record whose [[Callback]] field is _callback_.</li>
<li>It must return a JobCallback Record whose [[Callback]] field is _callback_, and [[ScriptOrModule]] field is the result of GetActiveScriptOrModule().</li>
</ul>
<p>The default implementation of HostMakeJobCallback performs the following steps when called:</p>
<emu-alg>
1. Return the JobCallback Record { [[Callback]]: _callback_, [[HostDefined]]: ~empty~ }.
1. Let _scriptOrModule_ be GetActiveScriptOrModule().
1. Return the JobCallback Record { [[Callback]]: _callback_, [[ScriptOrModule]]: _scriptOrModule_, [[HostDefined]]: ~empty~ }.
</emu-alg>
<p>ECMAScript hosts that are not web browsers must use the default implementation of HostMakeJobCallback.</p>
<emu-note>
Expand All @@ -12058,6 +12070,7 @@ <h1>
</dl>
<p>An implementation of HostCallJobCallback must conform to the following requirements:</p>
<ul>
<li>It must perform implementation-defined steps such that _jobCallback_.[[ScriptOrModule]] is the <emu-xref href="#job-activescriptormodule">active script or module</emu-xref> at the time of _job_'s invocation.</li>
<li>It must perform and return the result of Call(_jobCallback_.[[Callback]], _V_, _argumentsList_).</li>
</ul>
<emu-note>
Expand All @@ -12066,7 +12079,17 @@ <h1>
<p>The default implementation of HostCallJobCallback performs the following steps when called:</p>
<emu-alg>
1. Assert: IsCallable(_jobCallback_.[[Callback]]) is *true*.
1. Return ? Call(_jobCallback_.[[Callback]], _V_, _argumentsList_).
1. Let _callerContext_ be the running execution context.
1. If _callerContext_ is not already suspended, suspend _callerContext_.
1. Let _jobContext_ be a new execution context.
1. Let _scriptOrModule_ be _jobCallback_.[[ScriptOrModule]].
1. If _scriptOrModule_ is not *null*, then
1. Set the Realm of _jobContext_ to _scriptOrModule_.[[Realm]].
1. Set the ScriptOrModule of _jobContext_ to _scriptOrModule_.
1. Perform any necessary implementation-defined initialization of _jobContext_.
1. Let _result_ be Completion(Call(_jobCallback_.[[Callback]], _V_, _argumentsList_)).
1. Remove _jobContext_ from the execution context stack and restore _callerContext_ as the running execution context.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In #2962, we change this phrasing. Depending on the order these land, the latter PR will need to account for the former.

1. Return ? _result_.
</emu-alg>
<p>ECMAScript hosts that are not web browsers must use the default implementation of HostCallJobCallback.</p>
</emu-clause>
Expand Down Expand Up @@ -12100,7 +12123,6 @@ <h1>
<p>An implementation of HostEnqueuePromiseJob must conform to the requirements in <emu-xref href="#sec-jobs"></emu-xref> as well as the following:</p>
<ul>
<li>If _realm_ is not *null*, each time _job_ is invoked the implementation must perform implementation-defined steps such that execution is prepared to evaluate ECMAScript code at the time of _job_'s invocation.</li>
<li>Let _scriptOrModule_ be GetActiveScriptOrModule() at the time HostEnqueuePromiseJob is invoked. If _realm_ is not *null*, each time _job_ is invoked the implementation must perform implementation-defined steps such that _scriptOrModule_ is the active script or module at the time of _job_'s invocation.</li>
<li>Jobs must run in the same order as the HostEnqueuePromiseJob invocations that scheduled them.</li>
</ul>

Expand Down
Loading