Skip to content

Commit

Permalink
PerformEval: Also pass xStr to ParseText.
Browse files Browse the repository at this point in the history
This aligns with tc39/ecma262#3294

closes tc39#21
  • Loading branch information
fred-wang committed Nov 27, 2024
1 parent 38d3203 commit 61cf089
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 2 deletions.
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

0 comments on commit 61cf089

Please sign in to comment.