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

PerformEval: Also pass xStr to ParseText. #22

Merged
merged 1 commit into from
Dec 5, 2024
Merged
Show file tree
Hide file tree
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
4 changes: 2 additions & 2 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -2999,7 +2999,7 @@
</ul></div><div id="menu-toggle"><svg xmlns="http://www.w3.org/2000/svg" style="width:100%; height:100%; stroke:currentColor" viewBox="0 0 120 120" width="54" height="54">
<title>Menu</title>
<path stroke-width="10" stroke-linecap="round" d="M30,60 h60 M30,30 m0,5 h60 M30,90 m0,-5 h60"></path>
</svg></div><div id="menu-spacer" class="menu-spacer"></div><div id="menu"><div id="menu-search"><input type="text" id="menu-search-box" placeholder="Search..."><div id="menu-search-results" class="inactive"></div></div><div id="menu-pins"><div class="menu-pane-header">Pins<button class="unpin-all">clear</button></div><ul id="menu-pins-list"></ul></div><div class="menu-pane-header">Table of Contents</div><div id="menu-toc"><ol class="toc"><li><span class="item-toggle-none"></span><a href="#sec-hostgetcodeforeval" title="HostGetCodeForEval ( argument )"><span class="secnum">1</span> HostGetCodeForEval ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="#sec-hostensurecancompilestrings" title="HostEnsureCanCompileStrings ( calleeRealm, parameterStrings, bodyString, direct, codeString, compilationType, parameterArgs, bodyArg )"><span class="secnum">2</span> HostEnsureCanCompileStrings ( <var>calleeRealm</var>, <var>parameterStrings</var>, <var>bodyString</var>, <del><var>direct</var></del>, <ins><var>codeString</var></ins>, <ins><var>compilationType</var></ins>, <ins><var>parameterArgs</var></ins>, <ins><var>bodyArg</var></ins> )</a></li><li><span class="item-toggle-none"></span><a href="#sec-performeval" title="PerformEval ( x, strictCaller, direct )"><span class="secnum">3</span> PerformEval ( <var>x</var>, <var>strictCaller</var>, <var>direct</var> )</a></li><li><span class="item-toggle-none"></span><a href="#sec-createdynamicfunction" title="CreateDynamicFunction ( constructor, newTarget, kind, parameterArgs, bodyArg )"><span class="secnum">4</span> CreateDynamicFunction ( <var>constructor</var>, <var>newTarget</var>, <var>kind</var>, <var>parameterArgs</var>, <var>bodyArg</var> )</a></li><li><span class="item-toggle">+</span><a href="#sec-host-layering-points" title="Host Layering Points"><span class="secnum">A</span> Host Layering Points</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="#sec-host-hooks-summary" title="Host Hooks"><span class="secnum">A.1</span> Host Hooks</a></li></ol></li></ol></div></div><div id="spec-container"><h1 class="version">Stage 3 Draft / November 20, 2024</h1><h1 class="title">Dynamic Code Brand Checks</h1>
</svg></div><div id="menu-spacer" class="menu-spacer"></div><div id="menu"><div id="menu-search"><input type="text" id="menu-search-box" placeholder="Search..."><div id="menu-search-results" class="inactive"></div></div><div id="menu-pins"><div class="menu-pane-header">Pins<button class="unpin-all">clear</button></div><ul id="menu-pins-list"></ul></div><div class="menu-pane-header">Table of Contents</div><div id="menu-toc"><ol class="toc"><li><span class="item-toggle-none"></span><a href="#sec-hostgetcodeforeval" title="HostGetCodeForEval ( argument )"><span class="secnum">1</span> HostGetCodeForEval ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="#sec-hostensurecancompilestrings" title="HostEnsureCanCompileStrings ( calleeRealm, parameterStrings, bodyString, direct, codeString, compilationType, parameterArgs, bodyArg )"><span class="secnum">2</span> HostEnsureCanCompileStrings ( <var>calleeRealm</var>, <var>parameterStrings</var>, <var>bodyString</var>, <del><var>direct</var></del>, <ins><var>codeString</var></ins>, <ins><var>compilationType</var></ins>, <ins><var>parameterArgs</var></ins>, <ins><var>bodyArg</var></ins> )</a></li><li><span class="item-toggle-none"></span><a href="#sec-performeval" title="PerformEval ( x, strictCaller, direct )"><span class="secnum">3</span> PerformEval ( <var>x</var>, <var>strictCaller</var>, <var>direct</var> )</a></li><li><span class="item-toggle-none"></span><a href="#sec-createdynamicfunction" title="CreateDynamicFunction ( constructor, newTarget, kind, parameterArgs, bodyArg )"><span class="secnum">4</span> CreateDynamicFunction ( <var>constructor</var>, <var>newTarget</var>, <var>kind</var>, <var>parameterArgs</var>, <var>bodyArg</var> )</a></li><li><span class="item-toggle">+</span><a href="#sec-host-layering-points" title="Host Layering Points"><span class="secnum">A</span> Host Layering Points</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="#sec-host-hooks-summary" title="Host Hooks"><span class="secnum">A.1</span> Host Hooks</a></li></ol></li></ol></div></div><div id="spec-container"><h1 class="version">Stage 3 Draft / November 27, 2024</h1><h1 class="title">Dynamic Code Brand Checks</h1>

<emu-clause id="sec-hostgetcodeforeval" type="host-defined abstract operation" aoid="HostGetCodeForEval">
<h1><span class="secnum">1</span> HostGetCodeForEval ( <var>argument</var> )</h1>
Expand Down Expand Up @@ -3030,7 +3030,7 @@ <h1><span class="secnum">2</span> HostEnsureCanCompileStrings ( <var>calleeRealm
<emu-clause id="sec-performeval" type="abstract operation" oldids="sec-performeval-rules-outside-functions,sec-performeval-rules-outside-methods,sec-performeval-rules-outside-constructors" aoid="PerformEval"><span id="sec-performeval-rules-outside-constructors"></span><span id="sec-performeval-rules-outside-methods"></span><span id="sec-performeval-rules-outside-functions"></span>
<h1><span class="secnum">3</span> PerformEval ( <var>x</var>, <var>strictCaller</var>, <var>direct</var> )</h1>
<p>The abstract operation PerformEval takes arguments <var>x</var> (an ECMAScript language value), <var>strictCaller</var> (a Boolean), and <var>direct</var> (<emu-const>direct-eval</emu-const> or <emu-const>indirect-eval</emu-const>) and returns either a normal completion containing an ECMAScript language value or a throw completion. It performs the following steps when called:</p>
<emu-alg><ol><li>Assert: If <var>direct</var> is <emu-const>indirect-eval</emu-const>, then <var>strictCaller</var> is also <emu-val>false</emu-val>.</li><li><ins>If <var>x</var> is a String, then</ins><ol><li><ins>Let <var>xStr</var> be <var>x</var>.</ins></li></ol></li><li><ins>Else if <var>x</var> is an Object, then</ins><ol><li><ins>Let <var>code</var> be <emu-xref aoid="HostGetCodeForEval" id="_ref_0"><a href="#sec-hostgetcodeforeval">HostGetCodeForEval</a></emu-xref>(<var>x</var>).</ins></li><li><ins>If <var>code</var> is a String, let <var>xStr</var> be <var>code</var>.</ins></li><li><ins>Else, return <var>x</var>.</ins></li></ol></li><li><ins>Else,</ins><ol><li><ins>Return <var>x</var>.</ins></li></ol></li><li><del>If <var>x</var> is not a String, return <var>x</var>.</del></li><li>Let <var>evalRealm</var> be the current Realm Record.</li><li>NOTE: In the case of a direct eval, <var>evalRealm</var> is the realm of both the caller of <code>eval</code> and of the <code>eval</code> function itself.</li><li>Perform ?&nbsp;<emu-xref aoid="HostEnsureCanCompileStrings" id="_ref_1"><a href="#sec-hostensurecancompilestrings">HostEnsureCanCompileStrings</a></emu-xref>(<var>evalRealm</var>, «&nbsp;», <del><var>x</var></del> <ins><var>xStr</var>, <var>xStr</var>,</ins> <var>direct</var><ins>, «&nbsp;», <var>x</var></ins>).<br></li><li>...</li></ol></emu-alg>
<emu-alg><ol><li>Assert: If <var>direct</var> is <emu-const>indirect-eval</emu-const>, then <var>strictCaller</var> is also <emu-val>false</emu-val>.</li><li><ins>If <var>x</var> is a String, then</ins><ol><li><ins>Let <var>xStr</var> be <var>x</var>.</ins></li></ol></li><li><ins>Else if <var>x</var> is an Object, then</ins><ol><li><ins>Let <var>code</var> be <emu-xref aoid="HostGetCodeForEval" id="_ref_0"><a href="#sec-hostgetcodeforeval">HostGetCodeForEval</a></emu-xref>(<var>x</var>).</ins></li><li><ins>If <var>code</var> is a String, let <var>xStr</var> be <var>code</var>.</ins></li><li><ins>Else, return <var>x</var>.</ins></li></ol></li><li><ins>Else,</ins><ol><li><ins>Return <var>x</var>.</ins></li></ol></li><li><del>If <var>x</var> is not a String, return <var>x</var>.</del></li><li>Let <var>evalRealm</var> be the current Realm Record.</li><li>NOTE: In the case of a direct eval, <var>evalRealm</var> is the realm of both the caller of <code>eval</code> and of the <code>eval</code> function itself.</li><li>Perform ?&nbsp;<emu-xref aoid="HostEnsureCanCompileStrings" id="_ref_1"><a href="#sec-hostensurecancompilestrings">HostEnsureCanCompileStrings</a></emu-xref>(<var>evalRealm</var>, «&nbsp;», <del><var>x</var></del> <ins><var>xStr</var>, <var>xStr</var>,</ins> <var>direct</var><ins>, «&nbsp;», <var>x</var></ins>).<br></li><li>Let <var>inFunction</var> be <emu-val>false</emu-val>.</li><li>Let <var>inMethod</var> be <emu-val>false</emu-val>.</li><li>Let <var>inDerivedConstructor</var> be <emu-val>false</emu-val>.</li><li>Let <var>inClassFieldInitializer</var> be <emu-val>false</emu-val>.</li><li>If <var>direct</var> is <emu-const>direct-eval</emu-const>, then<ol><li>Let <var>thisEnvRec</var> be GetThisEnvironment().</li><li>If <var>thisEnvRec</var> is a Function Environment Record, then<ol><li>Let <var>F</var> be <var>thisEnvRec</var>.<var class="field">[[FunctionObject]]</var>.</li><li>Set <var>inFunction</var> to <emu-val>true</emu-val>.</li><li>Set <var>inMethod</var> to <var>thisEnvRec</var>.HasSuperBinding().</li><li>If <var>F</var>.<var class="field">[[ConstructorKind]]</var> is <emu-const>derived</emu-const>, set <var>inDerivedConstructor</var> to <emu-val>true</emu-val>.</li><li>Let <var>classFieldInitializerName</var> be <var>F</var>.<var class="field">[[ClassFieldInitializerName]]</var>.</li><li>If <var>classFieldInitializerName</var> is not <emu-const>empty</emu-const>, set <var>inClassFieldInitializer</var> to <emu-val>true</emu-val>.</li></ol></li></ol></li><li>Perform the following substeps in an implementation-defined order, possibly interleaving parsing and error detection:<ol><li>Let <var>script</var> be ParseText(<del><var>x</var></del> <ins><var>xStr</var></ins>, <emu-nt>Script</emu-nt>).</li></ol></li><li>...</li></ol></emu-alg>
</emu-clause>

<emu-clause id="sec-createdynamicfunction" type="abstract operation" oldids="table-dynamic-function-sourcetext-prefixes" aoid="CreateDynamicFunction"><span id="table-dynamic-function-sourcetext-prefixes"></span>
Expand Down
15 changes: 15 additions & 0 deletions spec.emu
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,21 @@ contributors: Krzysztof Kotowicz, Mike Samuel, Luke Warlow
1. Let _evalRealm_ be the current Realm Record.
1. NOTE: In the case of a direct eval, _evalRealm_ is the realm of both the caller of `eval` and of the `eval` function itself.
1. Perform ? HostEnsureCanCompileStrings(_evalRealm_, « », <del>_x_</del> <ins>_xStr_, _xStr_,</ins> _direct_<ins>, « », _x_</ins>).<br>
1. Let _inFunction_ be *false*.
1. Let _inMethod_ be *false*.
1. Let _inDerivedConstructor_ be *false*.
1. Let _inClassFieldInitializer_ be *false*.
1. If _direct_ is ~direct-eval~, then
1. Let _thisEnvRec_ be GetThisEnvironment().
1. If _thisEnvRec_ is a Function Environment Record, then
1. Let _F_ be _thisEnvRec_.[[FunctionObject]].
1. Set _inFunction_ to *true*.
1. Set _inMethod_ to _thisEnvRec_.HasSuperBinding().
1. If _F_.[[ConstructorKind]] is ~derived~, set _inDerivedConstructor_ to *true*.
1. Let _classFieldInitializerName_ be _F_.[[ClassFieldInitializerName]].
1. If _classFieldInitializerName_ is not ~empty~, set _inClassFieldInitializer_ to *true*.
1. Perform the following substeps in an implementation-defined order, possibly interleaving parsing and error detection:
1. Let _script_ be ParseText(<del>_x_</del> <ins>_xStr_</ins>, |Script|).
1. ...
</emu-alg>
</emu-clause>
Expand Down