mirror of
https://github.com/ganelson/inform.git
synced 2024-07-05 16:44:21 +03:00
Clarified runtime disambiguation of invocations
This commit is contained in:
parent
a4dbc2d8f3
commit
80504f1bb2
|
@ -133,7 +133,7 @@ must be called before <a href="2-fnc.html#SP2" class="internal">Functions::begin
|
|||
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">id_body</span><span class="plain-syntax"> *</span><span class="function-syntax">Functions::defn_being_compiled</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Functions::defn_being_compiled</span></span>:<br/>Compile Blocks and Lines - <a href="4-cbal.html#SP4_3_3">§4.3.3</a><br/>Compile Invocations - <a href="4-ci.html#SP2_1_1">§2.1.1</a>, <a href="4-ci.html#SP2_1_1_2">§2.1.1.2</a><br/>Compile Invocations Inline - <a href="4-cii.html#SP3_1_1_4_7_1">§3.1.1.4.7.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="identifier-syntax">id_body</span><span class="plain-syntax"> *</span><span class="function-syntax">Functions::defn_being_compiled</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Functions::defn_being_compiled</span></span>:<br/>Compile Blocks and Lines - <a href="4-cbal.html#SP4_3_3">§4.3.3</a><br/>Compile Invocations - <a href="4-ci.html#SP2_1">§2.1</a>, <a href="4-ci.html#SP2_1_1">§2.1.1</a><br/>Compile Invocations Inline - <a href="4-cii.html#SP3_1_1_4_7_1">§3.1.1.4.7.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">function_compilation_is_happening_now</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">current_function</span><span class="plain-syntax">.</span><span class="element-syntax">from_idb</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
|
|
|
@ -298,7 +298,7 @@ runtime invocation ambiguities, and this is how they're requested:
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Frames::need_at_least_this_many_formals</span><button class="popup" onclick="togglePopup('usagePopup14')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup14">Usage of <span class="code-font"><span class="function-syntax">Frames::need_at_least_this_many_formals</span></span>:<br/>Compile Invocations - <a href="4-ci.html#SP2_2">§2.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">N</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Frames::need_at_least_this_many_formals</span><button class="popup" onclick="togglePopup('usagePopup14')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup14">Usage of <span class="code-font"><span class="function-syntax">Frames::need_at_least_this_many_formals</span></span>:<br/>Compile Invocations - <a href="4-ci.html#SP1_3_1_2">§1.3.1.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">N</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">stack_frame</span><span class="plain-syntax"> *</span><span class="identifier-syntax">frame</span><span class="plain-syntax"> = </span><a href="2-sf.html#SP2" class="function-link"><span class="function-syntax">Frames::current_stack_frame</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">frame</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"requested formal parameters outside all stack frames"</span><span class="plain-syntax">);</span>
|
||||
|
|
|
@ -205,7 +205,7 @@ a value in a context where a particular kind of value is expected:
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Specifications::Compiler::emit_to_kind</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Specifications::Compiler::emit_to_kind</span></span>:<br/>Emitting from Schemas - <a href="3-efs.html#SP2_3">§2.3</a><br/>Compile Invocations - <a href="4-ci.html#SP2_2_3_1_1">§2.2.3.1.1</a><br/>Compile Invocations As Calls - <a href="4-ciac.html#SP2_1">§2.1</a><br/>Compile Invocations Inline - <a href="4-cii.html#SP3_1_1_3">§3.1.1.3</a>, <a href="4-cii.html#SP3_1_1_4_7_1">§3.1.1.4.7.1</a>, <a href="4-cii.html#SP3_5_8">§3.5.8</a>, <a href="4-cii.html#SP3_5_8_1">§3.5.8.1</a>, <a href="4-cii.html#SP3_5_8_2">§3.5.8.2</a>, <a href="4-cii.html#SP3_5_8_3">§3.5.8.3</a><br/>Compile Arithmetic - <a href="4-ca.html#SP1_2_1">§1.2.1</a>, <a href="4-ca.html#SP1_2_2">§1.2.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">value</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K_wanted</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Specifications::Compiler::emit_to_kind</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Specifications::Compiler::emit_to_kind</span></span>:<br/>Emitting from Schemas - <a href="3-efs.html#SP2_3">§2.3</a><br/>Compile Invocations - <a href="4-ci.html#SP1_3_1_2_1_2">§1.3.1.2.1.2</a><br/>Compile Invocations As Calls - <a href="4-ciac.html#SP2_1">§2.1</a><br/>Compile Invocations Inline - <a href="4-cii.html#SP3_1_1_3">§3.1.1.3</a>, <a href="4-cii.html#SP3_1_1_4_7_1">§3.1.1.4.7.1</a>, <a href="4-cii.html#SP3_5_8">§3.5.8</a>, <a href="4-cii.html#SP3_5_8_1">§3.5.8.1</a>, <a href="4-cii.html#SP3_5_8_2">§3.5.8.2</a>, <a href="4-cii.html#SP3_5_8_3">§3.5.8.3</a><br/>Compile Arithmetic - <a href="4-ca.html#SP1_2_1">§1.2.1</a>, <a href="4-ca.html#SP1_2_2">§1.2.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">value</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K_wanted</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">RTKinds::notify_of_use</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_wanted</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K_found</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Specifications::to_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">value</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">RTKinds::notify_of_use</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_found</span><span class="plain-syntax">);</span>
|
||||
|
|
|
@ -196,7 +196,7 @@ quantification.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Calculus::Deferrals::emit_test_of_proposition</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Calculus::Deferrals::emit_test_of_proposition</span></span>:<br/><a href="3-dtd.html#SP9">§9</a>, <a href="3-dtd.html#SP20">§20</a>, <a href="3-dtd.html#SP23">§23</a><br/>Compile Blocks and Lines - <a href="4-cbal.html#SP4_3_5_1_1">§4.3.5.1.1</a><br/>Compile Invocations - <a href="4-ci.html#SP2_2_3_4_1_1_1">§2.2.3.4.1.1.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">substitution</span><span class="plain-syntax">, </span><span class="identifier-syntax">pcalc_prop</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prop</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Calculus::Deferrals::emit_test_of_proposition</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Calculus::Deferrals::emit_test_of_proposition</span></span>:<br/><a href="3-dtd.html#SP9">§9</a>, <a href="3-dtd.html#SP20">§20</a>, <a href="3-dtd.html#SP23">§23</a><br/>Compile Blocks and Lines - <a href="4-cbal.html#SP4_3_5_1_1">§4.3.5.1.1</a><br/>Compile Invocations - <a href="4-ci.html#SP1_3_1_2_1_1_1">§1.3.1.2.1.1.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">substitution</span><span class="plain-syntax">, </span><span class="identifier-syntax">pcalc_prop</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prop</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">value_holster</span><span class="plain-syntax"> </span><span class="identifier-syntax">VH</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Holsters::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">INTER_VAL_VHMODE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="3-dtd.html#SP6" class="function-link"><span class="function-syntax">Calculus::Deferrals::compile_test_of_proposition_inner</span></a><span class="plain-syntax">(&</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">substitution</span><span class="plain-syntax">, </span><span class="identifier-syntax">prop</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
@ -505,7 +505,7 @@ consistency assertions and writes to the debugging log.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Calculus::Deferrals::emit_test_if_var_matches_description</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">Calculus::Deferrals::emit_test_if_var_matches_description</span></span>:<br/>Compile Invocations - <a href="4-ci.html#SP2_2_3_4_1_1_1">§2.2.3.4.1.1.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">var</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">matches</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Calculus::Deferrals::emit_test_if_var_matches_description</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">Calculus::Deferrals::emit_test_if_var_matches_description</span></span>:<br/>Compile Invocations - <a href="4-ci.html#SP1_3_1_2_1_1_1">§1.3.1.2.1.1.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">var</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">matches</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">matches</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"VMD against null description"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">var</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"VMD on null variable"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Lvalues::get_storage_form</span><span class="plain-syntax">(</span><span class="identifier-syntax">var</span><span class="plain-syntax">) != </span><span class="identifier-syntax">NONLOCAL_VARIABLE_NT</span><span class="plain-syntax">) &&</span>
|
||||
|
|
|
@ -77,7 +77,8 @@ function togglePopup(material_id) {
|
|||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. Blocks of code. </b>As this section of code opens, we are looking at the parse tree for the body
|
||||
of a rule or phrase definition. A request has been made to compile (a version of)
|
||||
this into an Inter function; the stack frame for that has been sorted out, and
|
||||
the function begun. Now we must compile the actual code to go into the function.
|
||||
the function begun. Now we must compile the actual code to go into the function;
|
||||
the test grpup <span class="extract"><span class="extract-syntax">:invocations</span></span> exercises all of this.
|
||||
</p>
|
||||
|
||||
<p class="commentary">Here is a typical example rule, taken from the Standard Rules:
|
||||
|
@ -351,7 +352,7 @@ need bespoke handling:
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"$T\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_source</span><span class="plain-syntax">(1, </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_wording</span><span class="plain-syntax">(2, </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">cs</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::handmade_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(...));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::handmade_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">BelievedImpossible</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_segment</span><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"You wrote %1, but '%2' isn't a condition, so I can't see how to make it true "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"from here on."</span><span class="plain-syntax">);</span>
|
||||
|
@ -364,7 +365,7 @@ need bespoke handling:
|
|||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_source</span><span class="plain-syntax">(1, </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_wording</span><span class="plain-syntax">(2, </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">cs</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::handmade_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(...));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::handmade_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">BelievedImpossible</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_segment</span><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"You wrote %1, but '%2' isn't an action, so I can't see how to try it."</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_end</span><span class="plain-syntax">();</span>
|
||||
|
@ -844,7 +845,7 @@ type-checks it, and finally, all being well, compiles it.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">initial_problem_count</span><span class="plain-syntax"> == </span><span class="identifier-syntax">problem_count</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">EXPRESSIONS</span><span class="plain-syntax">, </span><span class="string-syntax">"(c) Compilation:\n$E"</span><span class="plain-syntax">, </span><span class="identifier-syntax">p</span><span class="plain-syntax">-></span><span class="identifier-syntax">down</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">value_holster</span><span class="plain-syntax"> </span><span class="identifier-syntax">VH</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Holsters::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">vhm</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="4-ci.html#SP2" class="function-link"><span class="function-syntax">Invocations::Compiler::compile_invocation_list</span></a><span class="plain-syntax">(&</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">p</span><span class="plain-syntax">-></span><span class="identifier-syntax">down</span><span class="plain-syntax">, </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><a href="4-ci.html#SP1" class="function-link"><span class="function-syntax">CompileInvocations::list</span></a><span class="plain-syntax">(&</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">p</span><span class="plain-syntax">-></span><span class="identifier-syntax">down</span><span class="plain-syntax">, </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">initial_problem_count</span><span class="plain-syntax"> == </span><span class="identifier-syntax">problem_count</span><span class="plain-syntax">) {</span>
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -76,14 +76,14 @@ function togglePopup(material_id) {
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Invocations::AsCalls::csi_by_call</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Invocations::AsCalls::csi_by_call</span></span>:<br/>Compile Invocations - <a href="4-ci.html#SP3_1">§3.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">value_holster</span><span class="plain-syntax"> *</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">inv</span><span class="plain-syntax">,</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Invocations::AsCalls::csi_by_call</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Invocations::AsCalls::csi_by_call</span></span>:<br/>Compile Invocations - <a href="4-ci.html#SP2_1_2">§2.1.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">value_holster</span><span class="plain-syntax"> *</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">inv</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">source_location</span><span class="plain-syntax"> *</span><span class="identifier-syntax">where_from</span><span class="plain-syntax">, </span><span class="reserved-syntax">tokens_packet</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">id_body</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idb</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_phrase_invoked</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">IS</span><span class="plain-syntax"> = </span><a href="2-pr.html#SP1" class="function-link"><span class="function-syntax">PhraseRequests::complex_request</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">idb</span><span class="plain-syntax">, </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">as_requested</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">IS</span><span class="plain-syntax"> = </span><a href="2-pr.html#SP1" class="function-link"><span class="function-syntax">PhraseRequests::complex_request</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">idb</span><span class="plain-syntax">, </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">fn_kind</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::get_kind_variable_declarations</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">), </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">MATCHING</span><span class="plain-syntax">, </span><span class="string-syntax">"Calling routine %n with kind %u from $e\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">IS</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">as_requested</span><span class="plain-syntax">, </span><span class="identifier-syntax">inv</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">fn_kind</span><span class="plain-syntax">, </span><span class="identifier-syntax">inv</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">options_supplied</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Invocations::get_phrase_options_bitmap</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Node::get_phrase_options_invoked</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">) == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">options_supplied</span><span class="plain-syntax"> = -1;</span>
|
||||
|
@ -153,7 +153,7 @@ then follow, and finally the optional bitmap of phrase options.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::Behaviour::uses_pointer_values</span><span class="plain-syntax">(</span><span class="identifier-syntax">return_kind</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><a href="2-sf.html#SP21" class="function-link"><span class="function-syntax">Frames::emit_new_local_value</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">return_kind</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">k</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">k</span><span class="function-syntax"><tokens-></span><span class="element-syntax">tokens_count</span><span class="plain-syntax">; </span><span class="identifier-syntax">k</span><span class="plain-syntax">++)</span>
|
||||
<span class="plain-syntax"> </span><a href="3-cfs.html#SP7" class="function-link"><span class="function-syntax">Specifications::Compiler::emit_to_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">args</span><span class="plain-syntax">[</span><span class="identifier-syntax">k</span><span class="plain-syntax">], </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">kind_required</span><span class="plain-syntax">[</span><span class="identifier-syntax">k</span><span class="plain-syntax">]);</span>
|
||||
<span class="plain-syntax"> </span><a href="3-cfs.html#SP7" class="function-link"><span class="function-syntax">Specifications::Compiler::emit_to_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">token_vals</span><span class="plain-syntax">[</span><span class="identifier-syntax">k</span><span class="plain-syntax">], </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">token_kinds</span><span class="plain-syntax">[</span><span class="identifier-syntax">k</span><span class="plain-syntax">]);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">phrase_options</span><span class="plain-syntax"> != -1)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">LITERAL_IVAL</span><span class="plain-syntax">, (</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="identifier-syntax">phrase_options</span><span class="plain-syntax">);</span>
|
||||
</pre>
|
||||
|
@ -162,7 +162,7 @@ then follow, and finally the optional bitmap of phrase options.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">as_requested</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">fn_kind</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">args</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::get_construct</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">) != </span><span class="identifier-syntax">CON_phrase</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no function kind"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Kinds::binary_construction_material</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">, &</span><span class="identifier-syntax">args</span><span class="plain-syntax">, &</span><span class="identifier-syntax">return_kind</span><span class="plain-syntax">);</span>
|
||||
|
|
|
@ -115,7 +115,7 @@ Standard Rules. They may change without warning.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">local_variable</span><span class="plain-syntax"> **</span><span class="identifier-syntax">my_vars</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">} </span><span class="reserved-syntax">csi_state</span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Invocations::Inline::csi_inline_outer</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Invocations::Inline::csi_inline_outer</span></span>:<br/>Compile Invocations - <a href="4-ci.html#SP3_1">§3.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">value_holster</span><span class="plain-syntax"> *</span><span class="identifier-syntax">VH</span><span class="plain-syntax">,</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Invocations::Inline::csi_inline_outer</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Invocations::Inline::csi_inline_outer</span></span>:<br/>Compile Invocations - <a href="4-ci.html#SP2_1_2">§2.1.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">value_holster</span><span class="plain-syntax"> *</span><span class="identifier-syntax">VH</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">inv</span><span class="plain-syntax">, </span><span class="identifier-syntax">source_location</span><span class="plain-syntax"> *</span><span class="identifier-syntax">where_from</span><span class="plain-syntax">, </span><span class="reserved-syntax">tokens_packet</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">) {</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">id_body</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idb</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_phrase_invoked</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">);</span>
|
||||
|
@ -172,7 +172,7 @@ checker has already done all of the work to decide what kind it has.)
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax"><</span><span class="identifier-syntax">Invocations::get_no_tokens</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">); </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax"> = </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">args</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">];</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax"> = </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">token_vals</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">];</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Invocations::get_token_variable_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="4-cii.html#SP1_2_1" class="named-paragraph-link"><span class="named-paragraph">Create a local at this token</span><span class="named-paragraph-number">1.2.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
@ -187,7 +187,7 @@ checker has already done all of the work to decide what kind it has.)
|
|||
<span class="plain-syntax"> </span><a href="2-cb.html#SP18" class="function-link"><span class="function-syntax">CodeBlocks::set_scope_to_block_about_to_open</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">lvar</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span>
|
||||
<span class="plain-syntax"> </span><a href="2-cb.html#SP17" class="function-link"><span class="function-syntax">CodeBlocks::set_variable_scope</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">lvar</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">args</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">] =</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">token_vals</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">] =</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Lvalues::new_LOCAL_VARIABLE</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">val</span><span class="plain-syntax">), </span><span class="identifier-syntax">lvar</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::Behaviour::uses_pointer_values</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lvar_s</span><span class="plain-syntax"> = </span><a href="2-lv.html#SP1" class="function-link"><span class="function-syntax">LocalVariables::declare</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">lvar</span><span class="plain-syntax">);</span>
|
||||
|
@ -224,7 +224,7 @@ the <span class="extract"><span class="extract-syntax">TAIL</span></span> stream
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Invocations::get_no_tokens</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">) > </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">val</span><span class="plain-syntax"> = </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">args</span><span class="plain-syntax">[0];</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Invocations::get_no_tokens</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">) > </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">val</span><span class="plain-syntax"> = </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">token_vals</span><span class="plain-syntax">[0];</span>
|
||||
<span class="plain-syntax"> </span><a href="2-cb.html#SP10" class="function-link"><span class="function-syntax">CodeBlocks::supply_val_and_stream</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">val</span><span class="plain-syntax">, </span><span class="identifier-syntax">tail_schema</span><span class="plain-syntax">, </span><span class="identifier-syntax">CSIS</span><span class="plain-syntax">);</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="4-cii.html#SP1">§1</a>.</li></ul>
|
||||
|
@ -393,7 +393,7 @@ the presence of annotations can change what we do.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">supplied</span><span class="plain-syntax"> = </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">args</span><span class="plain-syntax">[</span><span class="identifier-syntax">tok</span><span class="plain-syntax">];</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">supplied</span><span class="plain-syntax"> = </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">token_vals</span><span class="plain-syntax">[</span><span class="identifier-syntax">tok</span><span class="plain-syntax">];</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">by_value_not_reference</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">blank_out</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
|
@ -576,7 +576,7 @@ proposition.
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><a href="4-cii.html#SP7" class="function-link"><span class="function-syntax">Invocations::Inline::parse_bracing_operand_as_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">sche</span><span class="plain-syntax">-></span><span class="identifier-syntax">operand</span><span class="plain-syntax">, </span><span class="identifier-syntax">Node::get_kind_variable_declarations</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><a href="3-dtd.html#SP16" class="function-link"><span class="function-syntax">Calculus::Deferrals::emit_list_of_S</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">args</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="3-dtd.html#SP16" class="function-link"><span class="function-syntax">Calculus::Deferrals::emit_list_of_S</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">token_vals</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="4-cii.html#SP3_2">§3.2</a>.</li></ul>
|
||||
|
@ -1990,31 +1990,31 @@ especially those involving complicated linguistic propositions. For example:
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">sche</span><span class="plain-syntax">-></span><span class="identifier-syntax">inline_subcommand</span><span class="plain-syntax"> == </span><span class="identifier-syntax">repeat_through_ISINSC</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="3-dtd.html#SP23" class="function-link"><span class="function-syntax">Calculus::Deferrals::emit_repeat_through_domain_S</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">args</span><span class="plain-syntax">[1],</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Lvalues::get_local_variable_if_any</span><span class="plain-syntax">(</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">args</span><span class="plain-syntax">[0]));</span>
|
||||
<span class="plain-syntax"> </span><a href="3-dtd.html#SP23" class="function-link"><span class="function-syntax">Calculus::Deferrals::emit_repeat_through_domain_S</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">token_vals</span><span class="plain-syntax">[1],</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Lvalues::get_local_variable_if_any</span><span class="plain-syntax">(</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">token_vals</span><span class="plain-syntax">[0]));</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">sche</span><span class="plain-syntax">-></span><span class="identifier-syntax">inline_subcommand</span><span class="plain-syntax"> == </span><span class="identifier-syntax">repeat_through_list_ISINSC</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="3-dtd.html#SP27" class="function-link"><span class="function-syntax">Calculus::Deferrals::emit_loop_over_list_S</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">args</span><span class="plain-syntax">[1],</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Lvalues::get_local_variable_if_any</span><span class="plain-syntax">(</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">args</span><span class="plain-syntax">[0]));</span>
|
||||
<span class="plain-syntax"> </span><a href="3-dtd.html#SP27" class="function-link"><span class="function-syntax">Calculus::Deferrals::emit_loop_over_list_S</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">token_vals</span><span class="plain-syntax">[1],</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Lvalues::get_local_variable_if_any</span><span class="plain-syntax">(</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">token_vals</span><span class="plain-syntax">[0]));</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">sche</span><span class="plain-syntax">-></span><span class="identifier-syntax">inline_subcommand</span><span class="plain-syntax"> == </span><span class="identifier-syntax">number_of_ISINSC</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="3-dtd.html#SP14" class="function-link"><span class="function-syntax">Calculus::Deferrals::emit_number_of_S</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">args</span><span class="plain-syntax">[0]);</span>
|
||||
<span class="plain-syntax"> </span><a href="3-dtd.html#SP14" class="function-link"><span class="function-syntax">Calculus::Deferrals::emit_number_of_S</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">token_vals</span><span class="plain-syntax">[0]);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">sche</span><span class="plain-syntax">-></span><span class="identifier-syntax">inline_subcommand</span><span class="plain-syntax"> == </span><span class="identifier-syntax">random_of_ISINSC</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="3-dtd.html#SP17" class="function-link"><span class="function-syntax">Calculus::Deferrals::emit_random_of_S</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">args</span><span class="plain-syntax">[0]);</span>
|
||||
<span class="plain-syntax"> </span><a href="3-dtd.html#SP17" class="function-link"><span class="function-syntax">Calculus::Deferrals::emit_random_of_S</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">token_vals</span><span class="plain-syntax">[0]);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">sche</span><span class="plain-syntax">-></span><span class="identifier-syntax">inline_subcommand</span><span class="plain-syntax"> == </span><span class="identifier-syntax">total_of_ISINSC</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="3-dtd.html#SP19" class="function-link"><span class="function-syntax">Calculus::Deferrals::emit_total_of_S</span></a><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Rvalues::to_property</span><span class="plain-syntax">(</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">args</span><span class="plain-syntax">[0]), </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">args</span><span class="plain-syntax">[1]);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Rvalues::to_property</span><span class="plain-syntax">(</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">token_vals</span><span class="plain-syntax">[0]), </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">token_vals</span><span class="plain-syntax">[1]);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">sche</span><span class="plain-syntax">-></span><span class="identifier-syntax">inline_subcommand</span><span class="plain-syntax"> == </span><span class="identifier-syntax">extremal_ISINSC</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">sche</span><span class="plain-syntax">-></span><span class="identifier-syntax">extremal_property_sign</span><span class="plain-syntax"> != </span><span class="identifier-syntax">MEASURE_T_EXACTLY</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">sche</span><span class="plain-syntax">-></span><span class="identifier-syntax">extremal_property</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><a href="3-dtd.html#SP22" class="function-link"><span class="function-syntax">Calculus::Deferrals::emit_extremal_of_S</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">args</span><span class="plain-syntax">[0],</span>
|
||||
<span class="plain-syntax"> </span><a href="3-dtd.html#SP22" class="function-link"><span class="function-syntax">Calculus::Deferrals::emit_extremal_of_S</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">token_vals</span><span class="plain-syntax">[0],</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">sche</span><span class="plain-syntax">-></span><span class="identifier-syntax">extremal_property</span><span class="plain-syntax">, </span><span class="identifier-syntax">sche</span><span class="plain-syntax">-></span><span class="identifier-syntax">extremal_property_sign</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::inline_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_InlineExtremal</span><span class="plain-syntax">),</span>
|
||||
|
@ -2035,7 +2035,7 @@ especially those involving complicated linguistic propositions. For example:
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">sche</span><span class="plain-syntax">-></span><span class="identifier-syntax">inline_subcommand</span><span class="plain-syntax"> == </span><span class="identifier-syntax">verbose_checking_ISINSC</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> *</span><span class="identifier-syntax">what</span><span class="plain-syntax"> = </span><span class="identifier-syntax">L</span><span class="string-syntax">""</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">tokens_count</span><span class="plain-syntax"> > </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">aspect</span><span class="plain-syntax"> = </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">args</span><span class="plain-syntax">[0];</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">aspect</span><span class="plain-syntax"> = </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">token_vals</span><span class="plain-syntax">[0];</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">aspect</span><span class="plain-syntax">))) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">aw1</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">aspect</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Word::dequote</span><span class="plain-syntax">(</span><span class="identifier-syntax">aw1</span><span class="plain-syntax">);</span>
|
||||
|
@ -2056,7 +2056,7 @@ especially those involving complicated linguistic propositions. For example:
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">fn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">args</span><span class="plain-syntax">[0];</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">fn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">token_vals</span><span class="plain-syntax">[0];</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">fn_kind</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Specifications::to_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">fn</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">X</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, *</span><span class="identifier-syntax">Y</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::get_construct</span><span class="plain-syntax">(</span><span class="identifier-syntax">fn_kind</span><span class="plain-syntax">) != </span><span class="identifier-syntax">CON_phrase</span><span class="plain-syntax">) {</span>
|
||||
|
@ -2069,13 +2069,13 @@ especially those involving complicated linguistic propositions. For example:
|
|||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Kinds::binary_construction_material</span><span class="plain-syntax">(</span><span class="identifier-syntax">fn_kind</span><span class="plain-syntax">, &</span><span class="identifier-syntax">X</span><span class="plain-syntax">, &</span><span class="identifier-syntax">Y</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=1; </span><span class="identifier-syntax">i</span><span class="function-syntax"><tokens-></span><span class="element-syntax">tokens_count</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">args</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">-1] = </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">args</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">];</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">token_vals</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">-1] = </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">token_vals</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">];</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">head</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, *</span><span class="identifier-syntax">tail</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Kinds::binary_construction_material</span><span class="plain-syntax">(</span><span class="identifier-syntax">X</span><span class="plain-syntax">, &</span><span class="identifier-syntax">head</span><span class="plain-syntax">, &</span><span class="identifier-syntax">tail</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">X</span><span class="plain-syntax"> = </span><span class="identifier-syntax">tail</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">kind_required</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">-1] = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">token_kinds</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">-1] = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Kinds::Behaviour::uses_pointer_values</span><span class="plain-syntax">(</span><span class="identifier-syntax">head</span><span class="plain-syntax">)) && (</span><span class="identifier-syntax">Kinds::Behaviour::definite</span><span class="plain-syntax">(</span><span class="identifier-syntax">head</span><span class="plain-syntax">)))</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">kind_required</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">-1] = </span><span class="identifier-syntax">head</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">token_kinds</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">-1] = </span><span class="identifier-syntax">head</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">tokens_count</span><span class="plain-syntax">--;</span>
|
||||
|
||||
|
@ -2086,9 +2086,9 @@ especially those involving complicated linguistic propositions. For example:
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">fn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">args</span><span class="plain-syntax">[1];</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">args</span><span class="plain-syntax">[1] = </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">args</span><span class="plain-syntax">[0];</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">args</span><span class="plain-syntax">[0] = </span><span class="identifier-syntax">Rvalues::from_int</span><span class="plain-syntax">(-1, </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">fn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">token_vals</span><span class="plain-syntax">[1];</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">token_vals</span><span class="plain-syntax">[1] = </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">token_vals</span><span class="plain-syntax">[0];</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">token_vals</span><span class="plain-syntax">[0] = </span><span class="identifier-syntax">Rvalues::from_int</span><span class="plain-syntax">(-1, </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">tokens_count</span><span class="plain-syntax"> = </span><span class="constant-syntax">2</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><a href="4-ciac.html#SP2" class="function-link"><span class="function-syntax">Invocations::AsCalls::emit_function_call</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">fn</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
|
||||
</pre>
|
||||
|
@ -2097,9 +2097,9 @@ especially those involving complicated linguistic propositions. For example:
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Rvalues::is_CONSTANT_of_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">args</span><span class="plain-syntax">[1], </span><span class="identifier-syntax">K_equation</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><a href="4-cste.html#SP2" class="function-link"><span class="function-syntax">EquationSolver::emit_solution</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">args</span><span class="plain-syntax">[0]),</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Rvalues::to_equation</span><span class="plain-syntax">(</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">args</span><span class="plain-syntax">[1]));</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Rvalues::is_CONSTANT_of_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">token_vals</span><span class="plain-syntax">[1], </span><span class="identifier-syntax">K_equation</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><a href="4-cste.html#SP2" class="function-link"><span class="function-syntax">EquationSolver::emit_solution</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">token_vals</span><span class="plain-syntax">[0]),</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Rvalues::to_equation</span><span class="plain-syntax">(</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">token_vals</span><span class="plain-syntax">[1]));</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::sentence_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_SolvedNameless</span><span class="plain-syntax">),</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"only specific named equations can be solved"</span><span class="plain-syntax">,</span>
|
||||
|
@ -2140,7 +2140,7 @@ then the operand refers to its value in the current invocation;
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">lvar</span><span class="plain-syntax"> = </span><a href="2-lv.html#SP17" class="function-link"><span class="function-syntax">LocalVariables::parse</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">idb</span><span class="plain-syntax">-></span><span class="identifier-syntax">compilation_data</span><span class="plain-syntax">.</span><span class="identifier-syntax">id_stack_frame</span><span class="plain-syntax">), </span><span class="identifier-syntax">LW</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">lvar</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tok</span><span class="plain-syntax"> = </span><a href="2-lv.html#SP3" class="function-link"><span class="function-syntax">LocalVariables::get_parameter_number</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">lvar</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tok</span><span class="plain-syntax"> >= </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">args</span><span class="plain-syntax">[</span><span class="identifier-syntax">tok</span><span class="plain-syntax">];</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tok</span><span class="plain-syntax"> >= </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">token_vals</span><span class="plain-syntax">[</span><span class="identifier-syntax">tok</span><span class="plain-syntax">];</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">lvar</span><span class="plain-syntax"> = </span><a href="2-lv.html#SP12" class="function-link"><span class="function-syntax">LocalVariables::find_internal</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">operand</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
|
|
@ -186,7 +186,7 @@
|
|||
<li>
|
||||
<p class="sectionentry"><a href="4-ci.html">
|
||||
<spon class="sectiontitle">Compile Invocations</span></a> -
|
||||
<span class="sectionpurpose">Here we generate Inform 6 code to execute the phrase(s) called for by an invocation list.</span></p>
|
||||
<span class="sectionpurpose">Generating code to perform an invocation.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="sectionentry"><a href="4-ciac.html">
|
||||
|
|
|
@ -702,7 +702,7 @@ some problem message.
|
|||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Rvalues::compile</span><span class="plain-syntax">(</span><span class="identifier-syntax">value_holster</span><span class="plain-syntax"> *</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec_found</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec_found</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PHRASE_TO_DECIDE_VALUE_NT:</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Invocations::Compiler::compile_invocation_list</span><span class="plain-syntax">(</span><span class="identifier-syntax">VH</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileInvocations::list</span><span class="plain-syntax">(</span><span class="identifier-syntax">VH</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">spec_found</span><span class="plain-syntax">-></span><span class="identifier-syntax">down</span><span class="plain-syntax">-></span><span class="identifier-syntax">down</span><span class="plain-syntax">, </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec_found</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">CONSTANT_NT:</span><span class="plain-syntax"> {</span>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
Total memory consumption was 268937K = 263 MB
|
||||
|
||||
63.9% was used for 1307225 objects, in 299550 frames in 215 x 800K = 172000K = 167 MB:
|
||||
63.9% was used for 1308225 objects, in 299551 frames in 215 x 800K = 172000K = 167 MB:
|
||||
|
||||
9.4% inter_tree_node_array 36 x 8192 = 294912 objects, 25953408 bytes
|
||||
5.2% text_stream_array 2589 x 100 = 258900 objects, 14581248 bytes
|
||||
|
@ -11,7 +11,7 @@ Total memory consumption was 268937K = 263 MB
|
|||
1.9% parse_node_annotation_array 333 x 500 = 166500 objects, 5338656 bytes
|
||||
1.1% pcalc_prop_array 24 x 1000 = 24000 objects, 3264768 bytes
|
||||
1.1% map_data 670 objects, 3178480 bytes
|
||||
0.9% kind_array 65 x 1000 = 65000 objects, 2602080 bytes
|
||||
0.9% kind_array 66 x 1000 = 66000 objects, 2642112 bytes
|
||||
0.7% inter_schema_token 13492 objects, 1942848 bytes
|
||||
0.6% vocabulary_entry_array 161 x 100 = 16100 objects, 1808352 bytes
|
||||
0.4% match_trie_array 10 x 1000 = 10000 objects, 1360320 bytes
|
||||
|
@ -255,5 +255,5 @@ Total memory consumption was 268937K = 263 MB
|
|||
---- emitter array storage 12320 bytes in 8 claims
|
||||
---- code generation workspace for objects 9200 bytes in 9 claims
|
||||
|
||||
20.7% was overhead - 57203728 bytes = 55863K = 54 MB
|
||||
20.7% was overhead - 57163696 bytes = 55823K = 54 MB
|
||||
|
||||
|
|
|
@ -1,26 +1,27 @@
|
|||
100.0% in inform7 run
|
||||
66.8% in compilation to Inter
|
||||
25.7% in //ImperativeDefinitions::compile_first_block//
|
||||
8.7% in //Sequence::compile_function_resources//
|
||||
7.0% in //Strings::compile_responses//
|
||||
6.0% in //InferenceSubjects::emit_all//
|
||||
3.7% in //MajorNodes::pre_pass//
|
||||
3.4% in //MajorNodes::pass_1//
|
||||
67.1% in compilation to Inter
|
||||
25.8% in //ImperativeDefinitions::compile_first_block//
|
||||
8.8% in //Sequence::compile_function_resources//
|
||||
6.9% in //Strings::compile_responses//
|
||||
6.2% in //InferenceSubjects::emit_all//
|
||||
3.6% in //MajorNodes::pre_pass//
|
||||
3.3% in //MajorNodes::pass_1//
|
||||
2.0% in //RTRules::RulePrintingRule_routine//
|
||||
1.8% in //RTRules::rulebooks_array_array//
|
||||
1.7% in //ImperativeDefinitions::assess_all//
|
||||
0.9% in //RTVerbs::ConjugateVerb//
|
||||
2.0% in //RTRules::rulebooks_array_array//
|
||||
1.8% in //ImperativeDefinitions::assess_all//
|
||||
1.1% in //RTVerbs::ConjugateVerb//
|
||||
0.5% in //RTRules::compile_rulebooks//
|
||||
0.5% in //World::stage_V//
|
||||
0.3% in //MajorNodes::pass_2//
|
||||
0.3% in //RTRelations::compile_defined_relations//
|
||||
0.3% in //RTRules::compile_rulebooks//
|
||||
0.3% in //World::stage_V//
|
||||
0.1% in //RTCommandGrammars::compile_all//
|
||||
0.1% in //RTKinds::compile_data_type_support_routines//
|
||||
0.1% in //Task::make_built_in_kind_constructors//
|
||||
3.4% not specifically accounted for
|
||||
30.8% in running Inter pipeline
|
||||
10.2% in step preparation
|
||||
9.8% in inter step 2/12: link
|
||||
0.1% in //World::stages_II_and_III//
|
||||
2.7% not specifically accounted for
|
||||
30.4% in running Inter pipeline
|
||||
10.0% in step preparation
|
||||
9.5% in inter step 2/12: link
|
||||
7.1% in inter step 12/12: generate inform6 -> auto.inf
|
||||
0.3% in inter step 9/12: make-identifiers-unique
|
||||
0.1% in inter step 10/12: reconcile-verbs
|
||||
|
@ -29,6 +30,6 @@
|
|||
0.1% in inter step 6/12: assimilate
|
||||
0.1% in inter step 7/12: resolve-external-symbols
|
||||
0.1% in inter step 8/12: inspect-plugs
|
||||
2.1% not specifically accounted for
|
||||
2.2% not specifically accounted for
|
||||
2.0% in supervisor
|
||||
0.2% not specifically accounted for
|
||||
0.4% not specifically accounted for
|
||||
|
|
24
inform7/Tests/Groups/invocations.testgroup
Normal file
24
inform7/Tests/Groups/invocations.testgroup
Normal file
|
@ -0,0 +1,24 @@
|
|||
BIP-Let
|
||||
Acidity
|
||||
DisambiguateAdjDescs
|
||||
RecursiveArithmetic
|
||||
PM_BadNow1
|
||||
PM_BadNow2
|
||||
PM_BadNow3
|
||||
PM_CaseValueDuplicated
|
||||
PM_CaseValueMismatch
|
||||
PM_CaseValueNonConstant
|
||||
PM_CaseValueUnknown
|
||||
PM_ComplicatedSayStructure
|
||||
PM_ComplicatedSayStructure2
|
||||
PM_ComplicatedSayStructure3
|
||||
PM_ComplicatedSayStructure4
|
||||
PM_ComplicatedSayStructure5
|
||||
PM_MisplacedRulebookOutcome
|
||||
PM_MisplacedRulebookOutcome2
|
||||
PM_SayEndIfWithoutSayIf
|
||||
PM_SayIfNested
|
||||
PM_SayOtherwiseWithoutIf
|
||||
PM_SayOverComplex
|
||||
PM_TwoSayOtherwises
|
||||
PM_WrongEndToPhrase
|
|
@ -6,7 +6,8 @@ Compiling a code block of lines from an imperative definition.
|
|||
As this section of code opens, we are looking at the parse tree for the body
|
||||
of a rule or phrase definition. A request has been made to compile (a version of)
|
||||
this into an Inter function; the stack frame for that has been sorted out, and
|
||||
the function begun. Now we must compile the actual code to go into the function.
|
||||
the function begun. Now we must compile the actual code to go into the function;
|
||||
the test grpup |:invocations| exercises all of this.
|
||||
|
||||
Here is a typical example rule, taken from the Standard Rules:
|
||||
= (text as Inform 7)
|
||||
|
@ -237,7 +238,7 @@ need bespoke handling:
|
|||
LOG("$T\n", current_sentence);
|
||||
Problems::quote_source(1, current_sentence);
|
||||
Problems::quote_wording(2, Node::get_text(cs));
|
||||
StandardProblems::handmade_problem(Task::syntax_tree(), _p_(...));
|
||||
StandardProblems::handmade_problem(Task::syntax_tree(), _p_(BelievedImpossible));
|
||||
Problems::issue_problem_segment(
|
||||
"You wrote %1, but '%2' isn't a condition, so I can't see how to make it true "
|
||||
"from here on.");
|
||||
|
@ -246,7 +247,7 @@ need bespoke handling:
|
|||
@<Issue a problem message for an unrecognised action@> =
|
||||
Problems::quote_source(1, current_sentence);
|
||||
Problems::quote_wording(2, Node::get_text(cs));
|
||||
StandardProblems::handmade_problem(Task::syntax_tree(), _p_(...));
|
||||
StandardProblems::handmade_problem(Task::syntax_tree(), _p_(BelievedImpossible));
|
||||
Problems::issue_problem_segment(
|
||||
"You wrote %1, but '%2' isn't an action, so I can't see how to try it.");
|
||||
Problems::issue_problem_end();
|
||||
|
@ -629,7 +630,7 @@ void CompileBlocksAndLines::evaluate_invocation(parse_node *p, int already_parse
|
|||
if (initial_problem_count == problem_count) {
|
||||
LOGIF(EXPRESSIONS, "(c) Compilation:\n$E", p->down);
|
||||
value_holster VH = Holsters::new(vhm);
|
||||
Invocations::Compiler::compile_invocation_list(&VH, p->down, Node::get_text(p));
|
||||
CompileInvocations::list(&VH, p->down, Node::get_text(p));
|
||||
}
|
||||
|
||||
if (initial_problem_count == problem_count) {
|
||||
|
|
|
@ -10,10 +10,10 @@ void Invocations::AsCalls::csi_by_call(value_holster *VH, parse_node *inv,
|
|||
source_location *where_from, tokens_packet *tokens) {
|
||||
id_body *idb = Node::get_phrase_invoked(inv);
|
||||
|
||||
inter_name *IS = PhraseRequests::complex_request(idb, tokens->as_requested,
|
||||
inter_name *IS = PhraseRequests::complex_request(idb, tokens->fn_kind,
|
||||
Node::get_kind_variable_declarations(inv), Node::get_text(inv));
|
||||
LOGIF(MATCHING, "Calling routine %n with kind %u from $e\n", IS,
|
||||
tokens->as_requested, inv);
|
||||
tokens->fn_kind, inv);
|
||||
|
||||
int options_supplied = Invocations::get_phrase_options_bitmap(inv);
|
||||
if (Node::get_phrase_options_invoked(inv) == NULL) options_supplied = -1;
|
||||
|
@ -78,12 +78,12 @@ then follow, and finally the optional bitmap of phrase options.
|
|||
if (Kinds::Behaviour::uses_pointer_values(return_kind))
|
||||
Frames::emit_new_local_value(return_kind);
|
||||
for (int k=0; k<tokens->tokens_count; k++)
|
||||
Specifications::Compiler::emit_to_kind(tokens->args[k], tokens->kind_required[k]);
|
||||
Specifications::Compiler::emit_to_kind(tokens->token_vals[k], tokens->token_kinds[k]);
|
||||
if (phrase_options != -1)
|
||||
Produce::val(Emit::tree(), K_number, LITERAL_IVAL, (inter_ti) phrase_options);
|
||||
|
||||
@<Compute the return kind of the phrase@> =
|
||||
kind *K = tokens->as_requested;
|
||||
kind *K = tokens->fn_kind;
|
||||
kind *args = NULL;
|
||||
if (Kinds::get_construct(K) != CON_phrase) internal_error("no function kind");
|
||||
Kinds::binary_construction_material(K, &args, &return_kind);
|
||||
|
|
|
@ -79,7 +79,7 @@ checker has already done all of the work to decide what kind it has.)
|
|||
|
||||
@<Create any new local variables explicitly called for@> =
|
||||
for (int i=0; i<Invocations::get_no_tokens(inv); i++) {
|
||||
parse_node *val = tokens->args[i];
|
||||
parse_node *val = tokens->token_vals[i];
|
||||
kind *K = Invocations::get_token_variable_kind(inv, i);
|
||||
if (K) @<Create a local at this token@>;
|
||||
}
|
||||
|
@ -90,7 +90,7 @@ checker has already done all of the work to decide what kind it has.)
|
|||
CodeBlocks::set_scope_to_block_about_to_open(lvar);
|
||||
else
|
||||
CodeBlocks::set_variable_scope(lvar);
|
||||
tokens->args[i] =
|
||||
tokens->token_vals[i] =
|
||||
Lvalues::new_LOCAL_VARIABLE(Node::get_text(val), lvar);
|
||||
if (Kinds::Behaviour::uses_pointer_values(K)) {
|
||||
inter_symbol *lvar_s = LocalVariables::declare(lvar);
|
||||
|
@ -117,7 +117,7 @@ the |TAIL| stream: that happens when the block closes.)
|
|||
|
||||
@<Open a code block@> =
|
||||
parse_node *val = NULL;
|
||||
if (Invocations::get_no_tokens(inv) > 0) val = tokens->args[0];
|
||||
if (Invocations::get_no_tokens(inv) > 0) val = tokens->token_vals[0];
|
||||
CodeBlocks::supply_val_and_stream(val, tail_schema, CSIS);
|
||||
|
||||
@ As we will see (in the discussion of |{-my:...}| below), any variables made
|
||||
|
@ -255,7 +255,7 @@ we compile the value of that argument as drawn from the tokens packet, but
|
|||
the presence of annotations can change what we do.
|
||||
|
||||
@<Expand a bracing containing a token name@> =
|
||||
parse_node *supplied = tokens->args[tok];
|
||||
parse_node *supplied = tokens->token_vals[tok];
|
||||
|
||||
int by_value_not_reference = TRUE;
|
||||
int blank_out = FALSE;
|
||||
|
@ -396,7 +396,7 @@ proposition.
|
|||
|
||||
@<Inline command "new-list-of"@> =
|
||||
kind *K = Invocations::Inline::parse_bracing_operand_as_kind(sche->operand, Node::get_kind_variable_declarations(inv));
|
||||
Calculus::Deferrals::emit_list_of_S(tokens->args[0], K);
|
||||
Calculus::Deferrals::emit_list_of_S(tokens->token_vals[0], K);
|
||||
return;
|
||||
|
||||
@<Inline command "next-routine"@> =
|
||||
|
@ -1437,31 +1437,31 @@ has the inline definition:
|
|||
|
||||
@<Expand an entirely internal-made definition@> =
|
||||
if (sche->inline_subcommand == repeat_through_ISINSC) {
|
||||
Calculus::Deferrals::emit_repeat_through_domain_S(tokens->args[1],
|
||||
Lvalues::get_local_variable_if_any(tokens->args[0]));
|
||||
Calculus::Deferrals::emit_repeat_through_domain_S(tokens->token_vals[1],
|
||||
Lvalues::get_local_variable_if_any(tokens->token_vals[0]));
|
||||
}
|
||||
|
||||
else if (sche->inline_subcommand == repeat_through_list_ISINSC) {
|
||||
Calculus::Deferrals::emit_loop_over_list_S(tokens->args[1],
|
||||
Lvalues::get_local_variable_if_any(tokens->args[0]));
|
||||
Calculus::Deferrals::emit_loop_over_list_S(tokens->token_vals[1],
|
||||
Lvalues::get_local_variable_if_any(tokens->token_vals[0]));
|
||||
}
|
||||
|
||||
else if (sche->inline_subcommand == number_of_ISINSC) {
|
||||
Calculus::Deferrals::emit_number_of_S(tokens->args[0]);
|
||||
Calculus::Deferrals::emit_number_of_S(tokens->token_vals[0]);
|
||||
}
|
||||
|
||||
else if (sche->inline_subcommand == random_of_ISINSC) {
|
||||
Calculus::Deferrals::emit_random_of_S(tokens->args[0]);
|
||||
Calculus::Deferrals::emit_random_of_S(tokens->token_vals[0]);
|
||||
}
|
||||
|
||||
else if (sche->inline_subcommand == total_of_ISINSC) {
|
||||
Calculus::Deferrals::emit_total_of_S(
|
||||
Rvalues::to_property(tokens->args[0]), tokens->args[1]);
|
||||
Rvalues::to_property(tokens->token_vals[0]), tokens->token_vals[1]);
|
||||
}
|
||||
|
||||
else if (sche->inline_subcommand == extremal_ISINSC) {
|
||||
if ((sche->extremal_property_sign != MEASURE_T_EXACTLY) && (sche->extremal_property)) {
|
||||
Calculus::Deferrals::emit_extremal_of_S(tokens->args[0],
|
||||
Calculus::Deferrals::emit_extremal_of_S(tokens->token_vals[0],
|
||||
sche->extremal_property, sche->extremal_property_sign);
|
||||
} else
|
||||
StandardProblems::inline_problem(_p_(PM_InlineExtremal),
|
||||
|
@ -1482,7 +1482,7 @@ has the inline definition:
|
|||
else if (sche->inline_subcommand == verbose_checking_ISINSC) {
|
||||
wchar_t *what = L"";
|
||||
if (tokens->tokens_count > 0) {
|
||||
parse_node *aspect = tokens->args[0];
|
||||
parse_node *aspect = tokens->token_vals[0];
|
||||
if (Wordings::nonempty(Node::get_text(aspect))) {
|
||||
int aw1 = Wordings::first_wn(Node::get_text(aspect));
|
||||
Word::dequote(aw1);
|
||||
|
@ -1499,7 +1499,7 @@ has the inline definition:
|
|||
return;
|
||||
|
||||
@<Primitive "function-application"@> =
|
||||
parse_node *fn = tokens->args[0];
|
||||
parse_node *fn = tokens->token_vals[0];
|
||||
kind *fn_kind = Specifications::to_kind(fn);
|
||||
kind *X = NULL, *Y = NULL;
|
||||
if (Kinds::get_construct(fn_kind) != CON_phrase) {
|
||||
|
@ -1512,29 +1512,29 @@ has the inline definition:
|
|||
}
|
||||
Kinds::binary_construction_material(fn_kind, &X, &Y);
|
||||
for (int i=1; i<tokens->tokens_count; i++) {
|
||||
tokens->args[i-1] = tokens->args[i];
|
||||
tokens->token_vals[i-1] = tokens->token_vals[i];
|
||||
kind *head = NULL, *tail = NULL;
|
||||
Kinds::binary_construction_material(X, &head, &tail);
|
||||
X = tail;
|
||||
tokens->kind_required[i-1] = NULL;
|
||||
tokens->token_kinds[i-1] = NULL;
|
||||
if ((Kinds::Behaviour::uses_pointer_values(head)) && (Kinds::Behaviour::definite(head)))
|
||||
tokens->kind_required[i-1] = head;
|
||||
tokens->token_kinds[i-1] = head;
|
||||
}
|
||||
tokens->tokens_count--;
|
||||
|
||||
Invocations::AsCalls::emit_function_call(tokens, NULL, -1, fn, TRUE);
|
||||
|
||||
@<Primitive "description-application"@> =
|
||||
parse_node *fn = tokens->args[1];
|
||||
tokens->args[1] = tokens->args[0];
|
||||
tokens->args[0] = Rvalues::from_int(-1, EMPTY_WORDING);
|
||||
parse_node *fn = tokens->token_vals[1];
|
||||
tokens->token_vals[1] = tokens->token_vals[0];
|
||||
tokens->token_vals[0] = Rvalues::from_int(-1, EMPTY_WORDING);
|
||||
tokens->tokens_count = 2;
|
||||
Invocations::AsCalls::emit_function_call(tokens, NULL, -1, fn, FALSE);
|
||||
|
||||
@<Primitive "solve-equation"@> =
|
||||
if (Rvalues::is_CONSTANT_of_kind(tokens->args[1], K_equation)) {
|
||||
EquationSolver::emit_solution(Node::get_text(tokens->args[0]),
|
||||
Rvalues::to_equation(tokens->args[1]));
|
||||
if (Rvalues::is_CONSTANT_of_kind(tokens->token_vals[1], K_equation)) {
|
||||
EquationSolver::emit_solution(Node::get_text(tokens->token_vals[0]),
|
||||
Rvalues::to_equation(tokens->token_vals[1]));
|
||||
} else {
|
||||
StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_SolvedNameless),
|
||||
"only specific named equations can be solved",
|
||||
|
@ -1570,7 +1570,7 @@ parse_node *Invocations::Inline::parse_bracing_operand_as_identifier(text_stream
|
|||
lvar = LocalVariables::parse(&(idb->compilation_data.id_stack_frame), LW);
|
||||
if (lvar) {
|
||||
int tok = LocalVariables::get_parameter_number(lvar);
|
||||
if (tok >= 0) return tokens->args[tok];
|
||||
if (tok >= 0) return tokens->token_vals[tok];
|
||||
}
|
||||
lvar = LocalVariables::find_internal(operand);
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -582,7 +582,7 @@ some problem message.
|
|||
void Rvalues::compile(value_holster *VH, parse_node *spec_found) {
|
||||
switch(Node::get_type(spec_found)) {
|
||||
case PHRASE_TO_DECIDE_VALUE_NT:
|
||||
Invocations::Compiler::compile_invocation_list(VH,
|
||||
CompileInvocations::list(VH,
|
||||
spec_found->down->down, Node::get_text(spec_found));
|
||||
break;
|
||||
case CONSTANT_NT: {
|
||||
|
|
Loading…
Reference in a new issue