mirror of
https://github.com/ganelson/inform.git
synced 2024-06-29 05:24:57 +03:00
Further improvements to I6 syntax error reporting
This commit is contained in:
parent
568429d61c
commit
b382906e39
|
@ -1,6 +1,6 @@
|
|||
# Inform 7
|
||||
|
||||
[Version](notes/versioning.md): 10.2.0-beta+6W39 'Krypton' (28 April 2023)
|
||||
[Version](notes/versioning.md): 10.2.0-beta+6W40 'Krypton' (29 April 2023)
|
||||
|
||||
## About Inform
|
||||
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
Prerelease: beta
|
||||
Build Date: 28 April 2023
|
||||
Build Number: 6W39
|
||||
Build Date: 29 April 2023
|
||||
Build Number: 6W40
|
||||
|
|
|
@ -251,7 +251,7 @@ all conditionals are resolved.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> = </span><span class="identifier-syntax">at</span><span class="plain-syntax">-></span><span class="element-syntax">next_node</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">endif_node</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-is.html#SP20" class="function-link"><span class="function-syntax">InterSchemas::throw_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">dir_node</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"no matching '#endif'"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-i6se.html#SP4" class="function-link"><span class="function-syntax">I6Errors::issue_at_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">dir_node</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"no matching '#endif'"</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">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
|
@ -269,6 +269,10 @@ all conditionals are resolved.
|
|||
<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">dir_node</span><span class="plain-syntax">-></span><span class="element-syntax">dir_clarifier</span><span class="plain-syntax"> == </span><span class="constant-syntax">IFDEF_I6RW</span><span class="plain-syntax">) ||</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">dir_node</span><span class="plain-syntax">-></span><span class="element-syntax">dir_clarifier</span><span class="plain-syntax"> == </span><span class="constant-syntax">IFNDEF_I6RW</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">dir_node</span><span class="plain-syntax">-></span><span class="element-syntax">child_node</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-i6se.html#SP4" class="function-link"><span class="function-syntax">I6Errors::issue_at_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">dir_node</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"bare '#ifdef' or '#ifndef'"</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">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">symbol_to_check</span><span class="plain-syntax"> = </span><span class="identifier-syntax">dir_node</span><span class="plain-syntax">-></span><span class="element-syntax">child_node</span><span class="plain-syntax">-></span><span class="element-syntax">expression_tokens</span><span class="plain-syntax">-></span><span class="element-syntax">material</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">to_eval</span><span class="plain-syntax"> = </span><span class="identifier-syntax">dir_node</span><span class="plain-syntax">-></span><span class="element-syntax">child_node</span><span class="plain-syntax">;</span>
|
||||
|
@ -276,7 +280,7 @@ all conditionals are resolved.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">to_eval</span><span class="plain-syntax"> = </span><span class="identifier-syntax">to_eval</span><span class="plain-syntax">-></span><span class="element-syntax">child_node</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">to_eval</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">to_eval</span><span class="plain-syntax">-></span><span class="element-syntax">child_node</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">to_eval</span><span class="plain-syntax">-></span><span class="element-syntax">child_node</span><span class="plain-syntax">-></span><span class="element-syntax">expression_tokens</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-is.html#SP20" class="function-link"><span class="function-syntax">InterSchemas::throw_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">dir_node</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"malformed '#if...'"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-i6se.html#SP4" class="function-link"><span class="function-syntax">I6Errors::issue_at_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">dir_node</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"malformed '#if...'"</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">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">symbol_to_check</span><span class="plain-syntax"> = </span><span class="identifier-syntax">to_eval</span><span class="plain-syntax">-></span><span class="element-syntax">child_node</span><span class="plain-syntax">-></span><span class="element-syntax">expression_tokens</span><span class="plain-syntax">-></span><span class="element-syntax">material</span><span class="plain-syntax">;</span>
|
||||
|
@ -460,8 +464,8 @@ compilation — are ever visited.
|
|||
</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">prim_cat</span><span class="plain-syntax"> != </span><span class="identifier-syntax">CODE_PRIM_CAT</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-is.html#SP20" class="function-link"><span class="function-syntax">InterSchemas::throw_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">node</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"assembly language unexpected here"</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">prim_cat</span><span class="plain-syntax"> != </span><span class="identifier-syntax">CODE_PRIM_CAT</span><span class="plain-syntax">) { </span><span class="comment-syntax"> should never in fact happen</span>
|
||||
<span class="plain-syntax"> </span><a href="2-i6se.html#SP4" class="function-link"><span class="function-syntax">I6Errors::issue_at_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">node</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"assembly language unexpected here"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">at</span><span class="plain-syntax"> = </span><span class="identifier-syntax">node</span><span class="plain-syntax">-></span><span class="element-syntax">child_node</span><span class="plain-syntax">;</span>
|
||||
|
@ -473,7 +477,7 @@ compilation — are ever visited.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">opcode_text</span><span class="plain-syntax"> = </span><span class="identifier-syntax">tok</span><span class="plain-syntax">-></span><span class="element-syntax">material</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">opcode_text</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) { </span><span class="comment-syntax"> should never in fact happen</span>
|
||||
<span class="plain-syntax"> </span><a href="2-is.html#SP20" class="function-link"><span class="function-syntax">InterSchemas::throw_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">node</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"assembly language malformed here"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-i6se.html#SP4" class="function-link"><span class="function-syntax">I6Errors::issue_at_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">node</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"assembly language malformed here"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><a href="3-prd.html#SP26" class="function-link"><span class="function-syntax">Produce::inv_assembly</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">opcode_text</span><span class="plain-syntax">);</span>
|
||||
|
@ -567,7 +571,7 @@ changed back again very soon after.
|
|||
<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">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">tok</span><span class="plain-syntax">-></span><span class="element-syntax">material</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"indirect"</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> = </span><span class="identifier-syntax">at</span><span class="plain-syntax">-></span><span class="element-syntax">next_node</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">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">tok</span><span class="plain-syntax">-></span><span class="element-syntax">material</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"glk"</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-is.html#SP20" class="function-link"><span class="function-syntax">InterSchemas::throw_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">node</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"the glk() function is now unsupported"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-i6se.html#SP4" class="function-link"><span class="function-syntax">I6Errors::issue_at_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">node</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"the glk() function is now unsupported"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</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">to_call</span><span class="plain-syntax"> = </span><a href="2-if.html#SP6" class="function-link"><span class="function-syntax">IdentifierFinders::find_token</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">tok</span><span class="plain-syntax">, </span><span class="identifier-syntax">finder</span><span class="plain-syntax">);</span>
|
||||
|
@ -614,7 +618,7 @@ somewhere (in fact, always in a property value).
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">argc</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</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">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">n</span><span class="plain-syntax"> = </span><span class="identifier-syntax">node</span><span class="plain-syntax">-></span><span class="element-syntax">child_node</span><span class="plain-syntax">; </span><span class="identifier-syntax">n</span><span class="plain-syntax">; </span><span class="identifier-syntax">n</span><span class="plain-syntax">=</span><span class="identifier-syntax">n</span><span class="plain-syntax">-></span><span class="element-syntax">next_node</span><span class="plain-syntax">) </span><span class="identifier-syntax">argc</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">argc</span><span class="plain-syntax"> > </span><span class="constant-syntax">4</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-is.html#SP20" class="function-link"><span class="function-syntax">InterSchemas::throw_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">node</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"too many arguments for call-message"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-i6se.html#SP4" class="function-link"><span class="function-syntax">I6Errors::issue_at_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">node</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"too many arguments for call-message"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">BIP</span><span class="plain-syntax"> = </span><a href="1-ip.html#SP7" class="function-link"><span class="function-syntax">Primitives::BIP_for_indirect_call_returning_value</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">argc</span><span class="plain-syntax">-1);</span>
|
||||
|
@ -636,7 +640,7 @@ more natural <span class="extract"><span class="extract-syntax">{ ... }</span></
|
|||
|
||||
<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">prim_cat</span><span class="plain-syntax"> != </span><span class="identifier-syntax">CODE_PRIM_CAT</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-is.html#SP20" class="function-link"><span class="function-syntax">InterSchemas::throw_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">node</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"unexpected '{ ... }' code block"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-i6se.html#SP4" class="function-link"><span class="function-syntax">I6Errors::issue_at_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">node</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"unexpected '{ ... }' code block"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</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">node</span><span class="plain-syntax">-></span><span class="element-syntax">unopened</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
|
||||
|
@ -660,7 +664,7 @@ only part of I6 syntax covered by schemas. Therefore:
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><a href="2-is.html#SP20" class="function-link"><span class="function-syntax">InterSchemas::throw_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">node</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"misplaced directive"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-i6se.html#SP4" class="function-link"><span class="function-syntax">I6Errors::issue_at_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">node</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"misplaced directive"</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="2-eis.html#SP3_1">§3.1</a>.</li></ul>
|
||||
|
@ -673,7 +677,7 @@ evaluated for their potential side-effects, but only the last produces a value.
|
|||
|
||||
<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">prim_cat</span><span class="plain-syntax"> != </span><span class="identifier-syntax">CODE_PRIM_CAT</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">prim_cat</span><span class="plain-syntax"> != </span><span class="identifier-syntax">VAL_PRIM_CAT</span><span class="plain-syntax">)){</span>
|
||||
<span class="plain-syntax"> </span><a href="2-is.html#SP20" class="function-link"><span class="function-syntax">InterSchemas::throw_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">node</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"expression in unexpected place"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-i6se.html#SP4" class="function-link"><span class="function-syntax">I6Errors::issue_at_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">node</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"expression in unexpected place"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</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">node</span><span class="plain-syntax">-></span><span class="element-syntax">child_node</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><a href="3-prd.html#SP32" class="function-link"><span class="function-syntax">Produce::val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">InterValuePairs::number</span><span class="plain-syntax">(1));</span>
|
||||
|
@ -793,7 +797,7 @@ parsing the schema.)
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">InterValuePairs::is_undef</span><span class="plain-syntax">(</span><span class="identifier-syntax">val</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">msg</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">msg</span><span class="plain-syntax">, </span><span class="string-syntax">"malformed literal number '%S'"</span><span class="plain-syntax">, </span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="element-syntax">material</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-is.html#SP20" class="function-link"><span class="function-syntax">InterSchemas::throw_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">node</span><span class="plain-syntax">, </span><span class="identifier-syntax">msg</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-i6se.html#SP4" class="function-link"><span class="function-syntax">I6Errors::issue_at_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">node</span><span class="plain-syntax">, </span><span class="identifier-syntax">msg</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">msg</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
@ -825,7 +829,7 @@ parsing the schema.)
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">default:</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">msg</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">msg</span><span class="plain-syntax">, </span><span class="string-syntax">"'%S' was unexpected in expression context"</span><span class="plain-syntax">, </span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="element-syntax">material</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-is.html#SP20" class="function-link"><span class="function-syntax">InterSchemas::throw_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">node</span><span class="plain-syntax">, </span><span class="identifier-syntax">msg</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-i6se.html#SP4" class="function-link"><span class="function-syntax">I6Errors::issue_at_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">node</span><span class="plain-syntax">, </span><span class="identifier-syntax">msg</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">msg</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>
|
||||
|
@ -860,7 +864,7 @@ For example, the schema <span class="extract"><span class="extract-syntax">.{-la
|
|||
|
||||
<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">prim_cat</span><span class="plain-syntax"> != </span><span class="identifier-syntax">CODE_PRIM_CAT</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-is.html#SP20" class="function-link"><span class="function-syntax">InterSchemas::throw_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">node</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"label in unexpected place"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-i6se.html#SP4" class="function-link"><span class="function-syntax">I6Errors::issue_at_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">node</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"label in unexpected place"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="plain-syntax">)</span>
|
||||
|
@ -879,7 +883,7 @@ For example, the schema <span class="extract"><span class="extract-syntax">.{-la
|
|||
<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">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">msg</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">msg</span><span class="plain-syntax">, </span><span class="string-syntax">"expected label name but found '%S'"</span><span class="plain-syntax">, </span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="element-syntax">material</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-is.html#SP20" class="function-link"><span class="function-syntax">InterSchemas::throw_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">node</span><span class="plain-syntax">, </span><span class="identifier-syntax">msg</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-i6se.html#SP4" class="function-link"><span class="function-syntax">I6Errors::issue_at_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">node</span><span class="plain-syntax">, </span><span class="identifier-syntax">msg</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">msg</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
@ -991,7 +995,7 @@ on others.
|
|||
|
||||
<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">prim_cat</span><span class="plain-syntax"> != </span><span class="identifier-syntax">CODE_PRIM_CAT</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-is.html#SP20" class="function-link"><span class="function-syntax">InterSchemas::throw_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">node</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"statement in unexpected place"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-i6se.html#SP4" class="function-link"><span class="function-syntax">I6Errors::issue_at_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">node</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"statement in unexpected place"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</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">node</span><span class="plain-syntax">-></span><span class="element-syntax">isn_clarifier</span><span class="plain-syntax"> == </span><span class="constant-syntax">CASE_BIP</span><span class="plain-syntax">) </span><a href="3-prd.html#SP10" class="function-link"><span class="function-syntax">Produce::set_level_to_current_code_block_plus</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">);</span>
|
||||
|
@ -1067,7 +1071,7 @@ these possibilities:
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">EIS_RECURSE</span><span class="plain-syntax">(</span><span class="identifier-syntax">var_node</span><span class="plain-syntax">, </span><span class="identifier-syntax">REF_PRIM_CAT</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">EIS_RECURSE</span><span class="plain-syntax">(</span><span class="identifier-syntax">cl_node</span><span class="plain-syntax">, </span><span class="identifier-syntax">VAL_PRIM_CAT</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-is.html#SP20" class="function-link"><span class="function-syntax">InterSchemas::throw_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">node</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"malformed 'objectloop' header"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-i6se.html#SP4" class="function-link"><span class="function-syntax">I6Errors::issue_at_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">node</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"malformed 'objectloop' header"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
|
@ -1080,7 +1084,7 @@ these possibilities:
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">EIS_RECURSE</span><span class="plain-syntax">(</span><span class="identifier-syntax">var_node</span><span class="plain-syntax">, </span><span class="identifier-syntax">REF_PRIM_CAT</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="3-prd.html#SP31" class="function-link"><span class="function-syntax">Produce::val_symbol</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><a href="2-if.html#SP5" class="function-link"><span class="function-syntax">IdentifierFinders::find</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Object"</span><span class="plain-syntax">, </span><span class="identifier-syntax">finder</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-is.html#SP20" class="function-link"><span class="function-syntax">InterSchemas::throw_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">node</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"'objectloop' without visible variable"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-i6se.html#SP4" class="function-link"><span class="function-syntax">I6Errors::issue_at_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">node</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"'objectloop' without visible variable"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
@ -1113,7 +1117,7 @@ like the comma in C) to throw away the results of the non-final evaluations.
|
|||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="2-eis.html#SP3_1">§3.1</a>.</li></ul>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="2-i6o.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-bm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-is.html">is</a></li><li class="progresssection"><a href="2-pis.html">pis</a></li><li class="progresssection"><a href="2-tkn.html">tkn</a></li><li class="progresssection"><a href="2-rmf.html">rmf</a></li><li class="progresssection"><a href="2-i6o.html">i6o</a></li><li class="progresscurrent">eis</li><li class="progresssection"><a href="2-if.html">if</a></li><li class="progresssection"><a href="2-i6a.html">i6a</a></li><li class="progresschapter"><a href="3-prd.html">3</a></li><li class="progressnext"><a href="2-if.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="2-i6o.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-bm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-is.html">is</a></li><li class="progresssection"><a href="2-pis.html">pis</a></li><li class="progresssection"><a href="2-tkn.html">tkn</a></li><li class="progresssection"><a href="2-rmf.html">rmf</a></li><li class="progresssection"><a href="2-i6o.html">i6o</a></li><li class="progresscurrent">eis</li><li class="progresssection"><a href="2-if.html">if</a></li><li class="progresssection"><a href="2-i6a.html">i6a</a></li><li class="progresssection"><a href="2-i6se.html">i6se</a></li><li class="progresschapter"><a href="3-prd.html">3</a></li><li class="progressnext"><a href="2-if.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -248,7 +248,7 @@ if a syntax error is reached.
|
|||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="2-i6a.html#SP5">§5</a> (twice).</li></ul>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="2-if.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-bm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-is.html">is</a></li><li class="progresssection"><a href="2-pis.html">pis</a></li><li class="progresssection"><a href="2-tkn.html">tkn</a></li><li class="progresssection"><a href="2-rmf.html">rmf</a></li><li class="progresssection"><a href="2-i6o.html">i6o</a></li><li class="progresssection"><a href="2-eis.html">eis</a></li><li class="progresssection"><a href="2-if.html">if</a></li><li class="progresscurrent">i6a</li><li class="progresschapter"><a href="3-prd.html">3</a></li><li class="progressnext"><a href="3-prd.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="2-if.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-bm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-is.html">is</a></li><li class="progresssection"><a href="2-pis.html">pis</a></li><li class="progresssection"><a href="2-tkn.html">tkn</a></li><li class="progresssection"><a href="2-rmf.html">rmf</a></li><li class="progresssection"><a href="2-i6o.html">i6o</a></li><li class="progresssection"><a href="2-eis.html">eis</a></li><li class="progresssection"><a href="2-if.html">if</a></li><li class="progresscurrent">i6a</li><li class="progresssection"><a href="2-i6se.html">i6se</a></li><li class="progresschapter"><a href="3-prd.html">3</a></li><li class="progressnext"><a href="2-i6se.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -254,7 +254,7 @@ irrelevant, of course, for unary operators.
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="2-rmf.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-bm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-is.html">is</a></li><li class="progresssection"><a href="2-pis.html">pis</a></li><li class="progresssection"><a href="2-tkn.html">tkn</a></li><li class="progresssection"><a href="2-rmf.html">rmf</a></li><li class="progresscurrent">i6o</li><li class="progresssection"><a href="2-eis.html">eis</a></li><li class="progresssection"><a href="2-if.html">if</a></li><li class="progresssection"><a href="2-i6a.html">i6a</a></li><li class="progresschapter"><a href="3-prd.html">3</a></li><li class="progressnext"><a href="2-eis.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="2-rmf.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-bm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-is.html">is</a></li><li class="progresssection"><a href="2-pis.html">pis</a></li><li class="progresssection"><a href="2-tkn.html">tkn</a></li><li class="progresssection"><a href="2-rmf.html">rmf</a></li><li class="progresscurrent">i6o</li><li class="progresssection"><a href="2-eis.html">eis</a></li><li class="progresssection"><a href="2-if.html">if</a></li><li class="progresssection"><a href="2-i6a.html">i6a</a></li><li class="progresssection"><a href="2-i6se.html">i6se</a></li><li class="progresschapter"><a href="3-prd.html">3</a></li><li class="progressnext"><a href="2-eis.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
203
docs/building-module/2-i6se.html
Normal file
203
docs/building-module/2-i6se.html
Normal file
|
@ -0,0 +1,203 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>Inform 6 Syntax Errors</title>
|
||||
<link href="../docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<meta name="viewport" content="width=device-width initial-scale=1">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<meta http-equiv="Content-Language" content="en-gb">
|
||||
|
||||
<link href="../docs-assets/Contents.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Progress.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<script>
|
||||
function togglePopup(material_id) {
|
||||
var popup = document.getElementById(material_id);
|
||||
popup.classList.toggle("show");
|
||||
}
|
||||
</script>
|
||||
|
||||
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
|
||||
</head>
|
||||
<body class="commentary-font">
|
||||
<nav role="navigation">
|
||||
<h1><a href="../index.html">
|
||||
<img src="../docs-assets/Inform.png" height=72">
|
||||
</a></h1>
|
||||
<ul><li><a href="../index.html">home</a></li>
|
||||
</ul><h2>Compiler</h2><ul>
|
||||
<li><a href="../structure.html">structure</a></li>
|
||||
<li><a href="../inbuildn.html">inbuild</a></li>
|
||||
<li><a href="../inform7n.html">inform7</a></li>
|
||||
<li><a href="../intern.html">inter</a></li>
|
||||
<li><a href="../services.html">services</a></li>
|
||||
<li><a href="../secrets.html">secrets</a></li>
|
||||
</ul><h2>Other Tools</h2><ul>
|
||||
<li><a href="../inblorbn.html">inblorb</a></li>
|
||||
<li><a href="../indocn.html">indoc</a></li>
|
||||
<li><a href="../inform6.html">inform6</a></li>
|
||||
<li><a href="../inpolicyn.html">inpolicy</a></li>
|
||||
<li><a href="../inrtpsn.html">inrtps</a></li>
|
||||
</ul><h2>Resources</h2><ul>
|
||||
<li><a href="../extensions.html">extensions</a></li>
|
||||
<li><a href="../kits.html">kits</a></li>
|
||||
</ul><h2>Repository</h2><ul>
|
||||
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=18> github</a></li>
|
||||
</ul><h2>Related Projects</h2><ul>
|
||||
<li><a href="../../../inweb/index.html">inweb</a></li>
|
||||
<li><a href="../../../intest/index.html">intest</a></li>
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
<main role="main">
|
||||
<!--Weave of 'Inform 6 Syntax Errors' generated by Inweb-->
|
||||
<div class="breadcrumbs">
|
||||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../intern.html">Inter Modules</a></li><li><a href="index.html">building</a></li><li><a href="index.html#2">Chapter 2: Blueprints</a></li><li><b>Inform 6 Syntax Errors</b></li></ul></div>
|
||||
<p class="purpose">To issue problem messages when parsing malformed I6-syntax code.</p>
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. </b>Errors like these used to be basically failed assertions, but inevitably people
|
||||
reported that as a bug (Mantis 0001596). It was never intended that Inform 6-syntax
|
||||
hacking should be part of the outside-facing Inform language; but if you leave
|
||||
power tools just lying around, people will eventually pick them up and wonder
|
||||
what the red button marked "danger" does.
|
||||
</p>
|
||||
|
||||
<p class="commentary">Note that <span class="extract"><span class="extract-syntax">i6_syntax_error_location</span></span> is initially uninitialised and thus has
|
||||
undefined contents, so we take care to blank it out if it is read before being
|
||||
written to for the first time.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">text_provenance</span><span class="plain-syntax"> </span><span class="identifier-syntax">i6_syntax_error_location</span><span class="plain-syntax">;</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i6_syntax_error_location_set</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="identifier-syntax">text_provenance</span><span class="plain-syntax"> </span><span class="function-syntax">I6Errors::get_current_location</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">I6Errors::get_current_location</span></span>:<br/><a href="2-i6se.html#SP2">§2</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">i6_syntax_error_location_set</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><a href="2-i6se.html#SP1" class="function-link"><span class="function-syntax">I6Errors::clear_current_location</span></a><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">i6_syntax_error_location</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">I6Errors::clear_current_location</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">I6Errors::clear_current_location</span></span>:<br/><a href="2-i6se.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-i6se.html#SP1" class="function-link"><span class="function-syntax">I6Errors::set_current_location</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Provenance::nowhere</span><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">I6Errors::set_current_location</span><span class="plain-syntax">(</span><span class="identifier-syntax">text_provenance</span><span class="plain-syntax"> </span><span class="identifier-syntax">where</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">i6_syntax_error_location_set</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">i6_syntax_error_location</span><span class="plain-syntax"> = </span><span class="identifier-syntax">where</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">I6Errors::set_current_location_near_splat</span><span class="plain-syntax">(</span><span class="identifier-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-i6se.html#SP1" class="function-link"><span class="function-syntax">I6Errors::clear_current_location</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">P</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">Inode::is</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">SPLAT_IST</span><span class="plain-syntax">)))</span>
|
||||
<span class="plain-syntax"> </span><a href="2-i6se.html#SP1" class="function-link"><span class="function-syntax">I6Errors::set_current_location</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">SplatInstruction::provenance</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>The issuing mechanism, or rather, the mechanism used if the main Inform
|
||||
compiler doesn't gazump us (in order to provide something better-looking in
|
||||
the GUI apps).
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i6_syntax_error_count</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">I6Errors::issue</span><span class="plain-syntax">(</span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">message</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">quote</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">text_provenance</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> = </span><a href="2-i6se.html#SP1" class="function-link"><span class="function-syntax">I6Errors::get_current_location</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">SourceProblems::I6_level_error</span><span class="plain-syntax">(</span><span class="identifier-syntax">message</span><span class="plain-syntax">, </span><span class="identifier-syntax">quote</span><span class="plain-syntax">, </span><span class="identifier-syntax">at</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifndef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Provenance::is_somewhere</span><span class="plain-syntax">(</span><span class="identifier-syntax">at</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Provenance::get_filename</span><span class="plain-syntax">(</span><span class="identifier-syntax">at</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">M</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">M</span><span class="plain-syntax">, </span><span class="identifier-syntax">message</span><span class="plain-syntax">, </span><span class="identifier-syntax">quote</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Errors::at_position_S</span><span class="plain-syntax">(</span><span class="identifier-syntax">M</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">Provenance::get_line</span><span class="plain-syntax">(</span><span class="identifier-syntax">at</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">M</span><span class="plain-syntax">)</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">Errors::with_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">message</span><span class="plain-syntax">, </span><span class="identifier-syntax">quote</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">i6_syntax_error_count</span><span class="plain-syntax">++;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">I6Errors::reset_count</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-i6se.html#SP1" class="function-link"><span class="function-syntax">I6Errors::clear_current_location</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">i6_syntax_error_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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">I6Errors::errors_occurred</span><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">i6_syntax_error_count</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">TRUE</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">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. </b>The functions below are for errors detected when parsing text into schemas, or
|
||||
when emitting code from them.
|
||||
</p>
|
||||
|
||||
<p class="commentary">Note that the <span class="extract"><span class="extract-syntax">parsing_errors</span></span> field of a schema is null until the first error
|
||||
is detected — which, of course, it usually isn't. It holds a linked list of these:
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">schema_parsing_error</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">message</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_provenance</span><span class="plain-syntax"> </span><span class="identifier-syntax">provenance</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||||
<span class="plain-syntax">} </span><span class="reserved-syntax">schema_parsing_error</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure schema_parsing_error is accessed in 2/is and here.</li></ul>
|
||||
<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="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">I6Errors::issue_at_node</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">I6Errors::issue_at_node</span></span>:<br/>Tokenisation - <a href="2-tkn.html#SP1_8">§1.8</a><br/>Ramification - <a href="2-rmf.html#SP13_1_1">§13.1.1</a>, <a href="2-rmf.html#SP13_1_2">§13.1.2</a>, <a href="2-rmf.html#SP13_1_5">§13.1.5</a>, <a href="2-rmf.html#SP14">§14</a>, <a href="2-rmf.html#SP14_1">§14.1</a>, <a href="2-rmf.html#SP15">§15</a>, <a href="2-rmf.html#SP22_5">§22.5</a>, <a href="2-rmf.html#SP26">§26</a><br/>Emitting Inter Schemas - <a href="2-eis.html#SP2_1_1">§2.1.1</a>, <a href="2-eis.html#SP2_1_2">§2.1.2</a>, <a href="2-eis.html#SP3_1_1">§3.1.1</a>, <a href="2-eis.html#SP3_1_2_1">§3.1.2.1</a>, <a href="2-eis.html#SP3_1_3">§3.1.3</a>, <a href="2-eis.html#SP3_1_4">§3.1.4</a>, <a href="2-eis.html#SP3_1_5">§3.1.5</a>, <a href="2-eis.html#SP3_1_6">§3.1.6</a>, <a href="2-eis.html#SP3_1_7_2">§3.1.7.2</a>, <a href="2-eis.html#SP3_1_8">§3.1.8</a>, <a href="2-eis.html#SP3_1_11">§3.1.11</a>, <a href="2-eis.html#SP3_1_11_1">§3.1.11.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">at</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">message</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">at</span><span class="plain-syntax">-></span><span class="element-syntax">parent_schema</span><span class="plain-syntax">-></span><span class="element-syntax">parsing_errors</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">at</span><span class="plain-syntax">-></span><span class="element-syntax">parent_schema</span><span class="plain-syntax">-></span><span class="element-syntax">parsing_errors</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="reserved-syntax">schema_parsing_error</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">schema_parsing_error</span><span class="plain-syntax"> *</span><span class="identifier-syntax">err</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">schema_parsing_error</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">err</span><span class="plain-syntax">-></span><span class="element-syntax">message</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">message</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">at</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">Provenance::is_somewhere</span><span class="plain-syntax">(</span><span class="identifier-syntax">at</span><span class="plain-syntax">-></span><span class="element-syntax">provenance</span><span class="plain-syntax">)) </span><span class="identifier-syntax">err</span><span class="plain-syntax">-></span><span class="element-syntax">provenance</span><span class="plain-syntax"> = </span><span class="identifier-syntax">at</span><span class="plain-syntax">-></span><span class="element-syntax">provenance</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">at</span><span class="plain-syntax">-></span><span class="element-syntax">parent_schema</span><span class="plain-syntax">) </span><span class="identifier-syntax">err</span><span class="plain-syntax">-></span><span class="element-syntax">provenance</span><span class="plain-syntax"> = </span><span class="identifier-syntax">at</span><span class="plain-syntax">-></span><span class="element-syntax">parent_schema</span><span class="plain-syntax">-></span><span class="element-syntax">provenance</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">err</span><span class="plain-syntax">-></span><span class="element-syntax">provenance</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Provenance::nowhere</span><span class="plain-syntax">();</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">err</span><span class="plain-syntax">-></span><span class="element-syntax">provenance</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Provenance::nowhere</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">, </span><span class="reserved-syntax">schema_parsing_error</span><span class="plain-syntax">, </span><span class="identifier-syntax">at</span><span class="plain-syntax">-></span><span class="element-syntax">parent_schema</span><span class="plain-syntax">-></span><span class="element-syntax">parsing_errors</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Schema error: %S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">message</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">at</span><span class="plain-syntax">-></span><span class="element-syntax">parent_schema</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">Provenance::is_somewhere</span><span class="plain-syntax">(</span><span class="identifier-syntax">at</span><span class="plain-syntax">-></span><span class="element-syntax">parent_schema</span><span class="plain-syntax">-></span><span class="element-syntax">provenance</span><span class="plain-syntax">)))</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Schema provenance %f, line %d\n"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Provenance::get_filename</span><span class="plain-syntax">(</span><span class="identifier-syntax">at</span><span class="plain-syntax">-></span><span class="element-syntax">parent_schema</span><span class="plain-syntax">-></span><span class="element-syntax">provenance</span><span class="plain-syntax">),</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Provenance::get_line</span><span class="plain-syntax">(</span><span class="identifier-syntax">at</span><span class="plain-syntax">-></span><span class="element-syntax">parent_schema</span><span class="plain-syntax">-></span><span class="element-syntax">provenance</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"$1\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">at</span><span class="plain-syntax">-></span><span class="element-syntax">parent_schema</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. </b>That function of course caches schema errors for playback later: well, here's
|
||||
the later. Unless the main Inform compiler takes over from us, the result will
|
||||
be drastic, halting what is presumably the <span class="extract"><span class="extract-syntax">inter</span></span> tool:
|
||||
</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">I6Errors::internal_error_on_schema_errors</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">I6Errors::internal_error_on_schema_errors</span></span>:<br/>Parsing Inter Schemas - <a href="2-pis.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</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">LinkedLists::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">-></span><span class="element-syntax">parsing_errors</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">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">SourceProblems::inter_schema_errors</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifndef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">STDERR</span><span class="plain-syntax">, </span><span class="string-syntax">"Parsing error(s) in the internal schema '%S':\n"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">sch</span><span class="plain-syntax">-></span><span class="element-syntax">converted_from</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">schema_parsing_error</span><span class="plain-syntax"> *</span><span class="identifier-syntax">err</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">, </span><span class="reserved-syntax">schema_parsing_error</span><span class="plain-syntax">, </span><span class="identifier-syntax">sch</span><span class="plain-syntax">-></span><span class="element-syntax">parsing_errors</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">STDERR</span><span class="plain-syntax">, </span><span class="string-syntax">"- %S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">err</span><span class="plain-syntax">-></span><span class="element-syntax">message</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">exit</span><span class="plain-syntax">(1);</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="2-i6a.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-bm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-is.html">is</a></li><li class="progresssection"><a href="2-pis.html">pis</a></li><li class="progresssection"><a href="2-tkn.html">tkn</a></li><li class="progresssection"><a href="2-rmf.html">rmf</a></li><li class="progresssection"><a href="2-i6o.html">i6o</a></li><li class="progresssection"><a href="2-eis.html">eis</a></li><li class="progresssection"><a href="2-if.html">if</a></li><li class="progresssection"><a href="2-i6a.html">i6a</a></li><li class="progresscurrent">i6se</li><li class="progresschapter"><a href="3-prd.html">3</a></li><li class="progressnext"><a href="3-prd.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -205,7 +205,7 @@ because the symbol which that iname incarnates as must be the right one.
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="2-eis.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-bm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-is.html">is</a></li><li class="progresssection"><a href="2-pis.html">pis</a></li><li class="progresssection"><a href="2-tkn.html">tkn</a></li><li class="progresssection"><a href="2-rmf.html">rmf</a></li><li class="progresssection"><a href="2-i6o.html">i6o</a></li><li class="progresssection"><a href="2-eis.html">eis</a></li><li class="progresscurrent">if</li><li class="progresssection"><a href="2-i6a.html">i6a</a></li><li class="progresschapter"><a href="3-prd.html">3</a></li><li class="progressnext"><a href="2-i6a.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="2-eis.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-bm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-is.html">is</a></li><li class="progresssection"><a href="2-pis.html">pis</a></li><li class="progresssection"><a href="2-tkn.html">tkn</a></li><li class="progresssection"><a href="2-rmf.html">rmf</a></li><li class="progresssection"><a href="2-i6o.html">i6o</a></li><li class="progresssection"><a href="2-eis.html">eis</a></li><li class="progresscurrent">if</li><li class="progresssection"><a href="2-i6a.html">i6a</a></li><li class="progresssection"><a href="2-i6se.html">i6se</a></li><li class="progresschapter"><a href="3-prd.html">3</a></li><li class="progressnext"><a href="2-i6a.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -59,7 +59,7 @@ function togglePopup(material_id) {
|
|||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../intern.html">Inter Modules</a></li><li><a href="index.html">building</a></li><li><a href="index.html#2">Chapter 2: Blueprints</a></li><li><b>Inter Schemas</b></li></ul></div>
|
||||
<p class="purpose">Building an inter schema, a form of annotated syntax tree.</p>
|
||||
|
||||
<ul class="toc"><li><a href="2-is.html#SP1">§1. Introduction</a></li><li><a href="2-is.html#SP14">§14. Token insertion</a></li><li><a href="2-is.html#SP17">§17. Logging</a></li><li><a href="2-is.html#SP18">§18. Lint</a></li><li><a href="2-is.html#SP19">§19. Errors</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="2-is.html#SP1">§1. Introduction</a></li><li><a href="2-is.html#SP14">§14. Token insertion</a></li><li><a href="2-is.html#SP17">§17. Logging</a></li><li><a href="2-is.html#SP18">§18. Lint</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. Introduction. </b>See <a href="P-wtmd.html" class="internal">What This Module Does</a> for an introduction to what an Inter schema is.
|
||||
For this section of code, it's sufficient to know that an <a href="2-is.html#SP1" class="internal">inter_schema</a>
|
||||
|
@ -81,7 +81,7 @@ few hundred — so they do not need to be stored compactly or compiled quick
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||||
<span class="plain-syntax">} </span><span class="reserved-syntax">inter_schema</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure inter_schema is accessed in 2/pis, 2/tkn, 2/rmf, 2/eis and here.</li></ul>
|
||||
<ul class="endnotetexts"><li>The structure inter_schema is accessed in 2/pis, 2/tkn, 2/rmf, 2/eis, 2/i6se and here.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
@ -138,7 +138,7 @@ we now more efficiently remove them.)
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||||
<span class="plain-syntax">} </span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure inter_schema_node is accessed in 2/rmf, 2/eis and here.</li></ul>
|
||||
<ul class="endnotetexts"><li>The structure inter_schema_node is accessed in 2/rmf, 2/eis, 2/i6se and here.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
@ -734,69 +734,8 @@ where the check is done:
|
|||
<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>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP19" class="paragraph-anchor"></a><b>§19. Errors. </b>Errors can be detected both when parsing text into schemas, and also when emitting
|
||||
code from them. In either case, the following is used to attach error message(s)
|
||||
to the schema itself.
|
||||
</p>
|
||||
|
||||
<p class="commentary">Note that the <span class="extract"><span class="extract-syntax">parsing_errors</span></span> field is null until the first error is detected —
|
||||
which, of course, it usually isn't.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">schema_parsing_error</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">message</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_provenance</span><span class="plain-syntax"> </span><span class="identifier-syntax">provenance</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||||
<span class="plain-syntax">} </span><span class="reserved-syntax">schema_parsing_error</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure schema_parsing_error is private to this section.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP20" class="paragraph-anchor"></a><b>§20. </b></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">InterSchemas::throw_error</span><button class="popup" onclick="togglePopup('usagePopup20')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup20">Usage of <span class="code-font"><span class="function-syntax">InterSchemas::throw_error</span></span>:<br/>Tokenisation - <a href="2-tkn.html#SP1_8">§1.8</a><br/>Ramification - <a href="2-rmf.html#SP13_1_1">§13.1.1</a>, <a href="2-rmf.html#SP13_1_2">§13.1.2</a>, <a href="2-rmf.html#SP13_1_5">§13.1.5</a>, <a href="2-rmf.html#SP14">§14</a>, <a href="2-rmf.html#SP14_1">§14.1</a>, <a href="2-rmf.html#SP15">§15</a>, <a href="2-rmf.html#SP22_5">§22.5</a>, <a href="2-rmf.html#SP26">§26</a><br/>Emitting Inter Schemas - <a href="2-eis.html#SP2_1_1">§2.1.1</a>, <a href="2-eis.html#SP2_1_2">§2.1.2</a>, <a href="2-eis.html#SP3_1_1">§3.1.1</a>, <a href="2-eis.html#SP3_1_2_1">§3.1.2.1</a>, <a href="2-eis.html#SP3_1_3">§3.1.3</a>, <a href="2-eis.html#SP3_1_4">§3.1.4</a>, <a href="2-eis.html#SP3_1_5">§3.1.5</a>, <a href="2-eis.html#SP3_1_6">§3.1.6</a>, <a href="2-eis.html#SP3_1_7_2">§3.1.7.2</a>, <a href="2-eis.html#SP3_1_8">§3.1.8</a>, <a href="2-eis.html#SP3_1_11">§3.1.11</a>, <a href="2-eis.html#SP3_1_11_1">§3.1.11.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">at</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">message</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">at</span><span class="plain-syntax">-></span><span class="element-syntax">parent_schema</span><span class="plain-syntax">-></span><span class="element-syntax">parsing_errors</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">at</span><span class="plain-syntax">-></span><span class="element-syntax">parent_schema</span><span class="plain-syntax">-></span><span class="element-syntax">parsing_errors</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="reserved-syntax">schema_parsing_error</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">schema_parsing_error</span><span class="plain-syntax"> *</span><span class="identifier-syntax">err</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">schema_parsing_error</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">err</span><span class="plain-syntax">-></span><span class="element-syntax">message</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">message</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">at</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">Provenance::is_somewhere</span><span class="plain-syntax">(</span><span class="identifier-syntax">at</span><span class="plain-syntax">-></span><span class="element-syntax">provenance</span><span class="plain-syntax">)) </span><span class="identifier-syntax">err</span><span class="plain-syntax">-></span><span class="element-syntax">provenance</span><span class="plain-syntax"> = </span><span class="identifier-syntax">at</span><span class="plain-syntax">-></span><span class="element-syntax">provenance</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">at</span><span class="plain-syntax">-></span><span class="element-syntax">parent_schema</span><span class="plain-syntax">) </span><span class="identifier-syntax">err</span><span class="plain-syntax">-></span><span class="element-syntax">provenance</span><span class="plain-syntax"> = </span><span class="identifier-syntax">at</span><span class="plain-syntax">-></span><span class="element-syntax">parent_schema</span><span class="plain-syntax">-></span><span class="element-syntax">provenance</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">err</span><span class="plain-syntax">-></span><span class="element-syntax">provenance</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Provenance::nowhere</span><span class="plain-syntax">();</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">err</span><span class="plain-syntax">-></span><span class="element-syntax">provenance</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Provenance::nowhere</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">, </span><span class="reserved-syntax">schema_parsing_error</span><span class="plain-syntax">, </span><span class="identifier-syntax">at</span><span class="plain-syntax">-></span><span class="element-syntax">parent_schema</span><span class="plain-syntax">-></span><span class="element-syntax">parsing_errors</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Schema error: %S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">message</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">at</span><span class="plain-syntax">-></span><span class="element-syntax">parent_schema</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">Provenance::is_somewhere</span><span class="plain-syntax">(</span><span class="identifier-syntax">at</span><span class="plain-syntax">-></span><span class="element-syntax">parent_schema</span><span class="plain-syntax">-></span><span class="element-syntax">provenance</span><span class="plain-syntax">)))</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Schema provenance %f, line %d\n"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Provenance::get_filename</span><span class="plain-syntax">(</span><span class="identifier-syntax">at</span><span class="plain-syntax">-></span><span class="element-syntax">parent_schema</span><span class="plain-syntax">-></span><span class="element-syntax">provenance</span><span class="plain-syntax">),</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Provenance::get_line</span><span class="plain-syntax">(</span><span class="identifier-syntax">at</span><span class="plain-syntax">-></span><span class="element-syntax">parent_schema</span><span class="plain-syntax">-></span><span class="element-syntax">provenance</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"$1\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">at</span><span class="plain-syntax">-></span><span class="element-syntax">parent_schema</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP21" class="paragraph-anchor"></a><b>§21. </b>And this is an especially drastic way to deal with such errors:
|
||||
</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">InterSchemas::internal_error_on_schema_errors</span><button class="popup" onclick="togglePopup('usagePopup21')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup21">Usage of <span class="code-font"><span class="function-syntax">InterSchemas::internal_error_on_schema_errors</span></span>:<br/>Parsing Inter Schemas - <a href="2-pis.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</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">LinkedLists::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">-></span><span class="element-syntax">parsing_errors</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">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">SourceProblems::inter_schema_errors</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifndef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">STDERR</span><span class="plain-syntax">, </span><span class="string-syntax">"Parsing error(s) in the internal schema '%S':\n"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">sch</span><span class="plain-syntax">-></span><span class="element-syntax">converted_from</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">schema_parsing_error</span><span class="plain-syntax"> *</span><span class="identifier-syntax">err</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">, </span><span class="reserved-syntax">schema_parsing_error</span><span class="plain-syntax">, </span><span class="identifier-syntax">sch</span><span class="plain-syntax">-></span><span class="element-syntax">parsing_errors</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">STDERR</span><span class="plain-syntax">, </span><span class="string-syntax">"- %S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">err</span><span class="plain-syntax">-></span><span class="element-syntax">message</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">"malformed schema"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="1-in.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-bm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresscurrent">is</li><li class="progresssection"><a href="2-pis.html">pis</a></li><li class="progresssection"><a href="2-tkn.html">tkn</a></li><li class="progresssection"><a href="2-rmf.html">rmf</a></li><li class="progresssection"><a href="2-i6o.html">i6o</a></li><li class="progresssection"><a href="2-eis.html">eis</a></li><li class="progresssection"><a href="2-if.html">if</a></li><li class="progresssection"><a href="2-i6a.html">i6a</a></li><li class="progresschapter"><a href="3-prd.html">3</a></li><li class="progressnext"><a href="2-pis.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="1-in.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-bm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresscurrent">is</li><li class="progresssection"><a href="2-pis.html">pis</a></li><li class="progresssection"><a href="2-tkn.html">tkn</a></li><li class="progresssection"><a href="2-rmf.html">rmf</a></li><li class="progresssection"><a href="2-i6o.html">i6o</a></li><li class="progresssection"><a href="2-eis.html">eis</a></li><li class="progresssection"><a href="2-if.html">if</a></li><li class="progresssection"><a href="2-i6a.html">i6a</a></li><li class="progresssection"><a href="2-i6se.html">i6se</a></li><li class="progresschapter"><a href="3-prd.html">3</a></li><li class="progressnext"><a href="2-pis.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -112,7 +112,7 @@ I6S code can only come from within the compiler itself, and means a bug.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">Dictionaries::create</span><span class="plain-syntax">(</span><span class="identifier-syntax">i6s_inter_schema_cache</span><span class="plain-syntax">, </span><span class="identifier-syntax">from</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Dictionaries::write_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">i6s_inter_schema_cache</span><span class="plain-syntax">, </span><span class="identifier-syntax">from</span><span class="plain-syntax">, (</span><span class="reserved-syntax">void</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">result</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><a href="2-is.html#SP21" class="function-link"><span class="function-syntax">InterSchemas::internal_error_on_schema_errors</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">result</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-i6se.html#SP5" class="function-link"><span class="function-syntax">I6Errors::internal_error_on_schema_errors</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">result</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">result</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
@ -256,7 +256,7 @@ such operations are nested, they will work. We might then write:
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="2-is.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-bm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-is.html">is</a></li><li class="progresscurrent">pis</li><li class="progresssection"><a href="2-tkn.html">tkn</a></li><li class="progresssection"><a href="2-rmf.html">rmf</a></li><li class="progresssection"><a href="2-i6o.html">i6o</a></li><li class="progresssection"><a href="2-eis.html">eis</a></li><li class="progresssection"><a href="2-if.html">if</a></li><li class="progresssection"><a href="2-i6a.html">i6a</a></li><li class="progresschapter"><a href="3-prd.html">3</a></li><li class="progressnext"><a href="2-tkn.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="2-is.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-bm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-is.html">is</a></li><li class="progresscurrent">pis</li><li class="progresssection"><a href="2-tkn.html">tkn</a></li><li class="progresssection"><a href="2-rmf.html">rmf</a></li><li class="progresssection"><a href="2-i6o.html">i6o</a></li><li class="progresssection"><a href="2-eis.html">eis</a></li><li class="progresssection"><a href="2-if.html">if</a></li><li class="progresssection"><a href="2-i6a.html">i6a</a></li><li class="progresssection"><a href="2-i6se.html">i6se</a></li><li class="progresschapter"><a href="3-prd.html">3</a></li><li class="progressnext"><a href="2-tkn.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -940,7 +940,7 @@ nodes, which we want to fold into just one:
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">operand1</span><span class="plain-syntax"> = </span><a href="2-is.html#SP16" class="function-link"><span class="function-syntax">InterSchemas::second_dark_token</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">until_node</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">cons</span><span class="plain-syntax">-></span><span class="element-syntax">next_node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">until_node</span><span class="plain-syntax">-></span><span class="element-syntax">next_node</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-is.html#SP20" class="function-link"><span class="function-syntax">InterSchemas::throw_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cons</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"do without until"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-i6se.html#SP4" class="function-link"><span class="function-syntax">I6Errors::issue_at_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cons</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"do without until"</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">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
|
@ -957,7 +957,7 @@ nodes, which we want to fold into just one:
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">msg</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">msg</span><span class="plain-syntax">, </span><span class="string-syntax">"expected 'on' or 'off' after 'font', not '%S'"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax">-></span><span class="element-syntax">material</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-is.html#SP20" class="function-link"><span class="function-syntax">InterSchemas::throw_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cons</span><span class="plain-syntax">, </span><span class="identifier-syntax">msg</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-i6se.html#SP4" class="function-link"><span class="function-syntax">I6Errors::issue_at_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cons</span><span class="plain-syntax">, </span><span class="identifier-syntax">msg</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">msg</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">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
@ -1023,7 +1023,7 @@ clause at all. We split these possibilities into two different statement nodes.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax"> = </span><a href="2-is.html#SP16" class="function-link"><span class="function-syntax">InterSchemas::next_dark_token</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">to</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">to</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-is.html#SP20" class="function-link"><span class="function-syntax">InterSchemas::throw_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cons</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"move without to"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-i6se.html#SP4" class="function-link"><span class="function-syntax">I6Errors::issue_at_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cons</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"move without to"</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">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">operand2</span><span class="plain-syntax"> = </span><a href="2-is.html#SP16" class="function-link"><span class="function-syntax">InterSchemas::next_dark_token</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">to</span><span class="plain-syntax">);</span>
|
||||
|
@ -1443,7 +1443,7 @@ removing the colon and bracket tokens. Thus:
|
|||
<span class="plain-syntax"> (</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-></span><span class="element-syntax">node_marked</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">predicates</span><span class="plain-syntax"> = </span><span class="identifier-syntax">isn</span><span class="plain-syntax">-></span><span class="element-syntax">child_node</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">predicates</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">predicates</span><span class="plain-syntax">-></span><span class="element-syntax">isn_type</span><span class="plain-syntax"> != </span><span class="constant-syntax">EXPRESSION_ISNT</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-is.html#SP20" class="function-link"><span class="function-syntax">InterSchemas::throw_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"malformed 'for' loop"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-i6se.html#SP4" class="function-link"><span class="function-syntax">I6Errors::issue_at_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"malformed 'for' loop"</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">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">n</span><span class="plain-syntax"> = </span><span class="identifier-syntax">predicates</span><span class="plain-syntax">-></span><span class="element-syntax">expression_tokens</span><span class="plain-syntax">;</span>
|
||||
|
@ -1471,7 +1471,7 @@ removing the colon and bracket tokens. Thus:
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax"> = </span><span class="identifier-syntax">n</span><span class="plain-syntax">-></span><span class="element-syntax">next</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">cw</span><span class="plain-syntax"> != </span><span class="constant-syntax">3</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-is.html#SP20" class="function-link"><span class="function-syntax">InterSchemas::throw_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"'for' header with too few clauses"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-i6se.html#SP4" class="function-link"><span class="function-syntax">I6Errors::issue_at_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"'for' header with too few clauses"</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">FALSE</span><span class="plain-syntax">;</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">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax"><3; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
|
||||
|
@ -1515,7 +1515,7 @@ removing the colon and bracket tokens. Thus:
|
|||
|
||||
<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">cw</span><span class="plain-syntax"> >= </span><span class="constant-syntax">3</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-is.html#SP20" class="function-link"><span class="function-syntax">InterSchemas::throw_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"'for' header with too many clauses"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-i6se.html#SP4" class="function-link"><span class="function-syntax">I6Errors::issue_at_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"'for' header with too many clauses"</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">FALSE</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">from</span><span class="plain-syntax">[</span><span class="identifier-syntax">cw</span><span class="plain-syntax">] == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">to</span><span class="plain-syntax">[</span><span class="identifier-syntax">cw</span><span class="plain-syntax">] = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
|
@ -1544,7 +1544,7 @@ from failing its lint test.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">actual</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</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">inter_schema_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">isn</span><span class="plain-syntax">-></span><span class="element-syntax">child_node</span><span class="plain-syntax">; </span><span class="identifier-syntax">ch</span><span class="plain-syntax">; </span><span class="identifier-syntax">ch</span><span class="plain-syntax">=</span><span class="identifier-syntax">ch</span><span class="plain-syntax">-></span><span class="element-syntax">next_node</span><span class="plain-syntax">) </span><span class="identifier-syntax">actual</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">actual</span><span class="plain-syntax"> < </span><span class="identifier-syntax">req</span><span class="plain-syntax">-1) || (</span><span class="identifier-syntax">actual</span><span class="plain-syntax"> > </span><span class="identifier-syntax">req</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-is.html#SP20" class="function-link"><span class="function-syntax">InterSchemas::throw_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"malformed statement"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-i6se.html#SP4" class="function-link"><span class="function-syntax">I6Errors::issue_at_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"malformed statement"</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">FALSE</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">actual</span><span class="plain-syntax"> == </span><span class="identifier-syntax">req</span><span class="plain-syntax">-1) {</span>
|
||||
|
@ -1962,7 +1962,7 @@ operation <span class="extract"><span class="extract-syntax">a.b</span></span>.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">msg</span><span class="plain-syntax">, </span><span class="string-syntax">"operator '%S' used with %d not %d operand(s)"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="2-i6o.html#SP5" class="function-link"><span class="function-syntax">I6Operators::I6_notation_for</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-></span><span class="element-syntax">isn_clarifier</span><span class="plain-syntax">),</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax">, </span><a href="2-i6o.html#SP7" class="function-link"><span class="function-syntax">I6Operators::arity</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">-></span><span class="element-syntax">isn_clarifier</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><a href="2-is.html#SP20" class="function-link"><span class="function-syntax">InterSchemas::throw_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">, </span><span class="identifier-syntax">msg</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-i6se.html#SP4" class="function-link"><span class="function-syntax">I6Errors::issue_at_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">, </span><span class="identifier-syntax">msg</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">msg</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">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
@ -2159,32 +2159,32 @@ to cause trouble later. If no error is thrown, the schema is unchanged.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">inter_schema_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax"> = </span><span class="identifier-syntax">isn</span><span class="plain-syntax">-></span><span class="element-syntax">expression_tokens</span><span class="plain-syntax">; </span><span class="identifier-syntax">t</span><span class="plain-syntax">; </span><span class="identifier-syntax">t</span><span class="plain-syntax">=</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="element-syntax">next</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">t</span><span class="plain-syntax">-></span><span class="element-syntax">ist_type</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">OPCODE_ISTT:</span><span class="plain-syntax"> </span><span class="identifier-syntax">asm</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</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">RAW_ISTT:</span><span class="plain-syntax"> </span><a href="2-is.html#SP20" class="function-link"><span class="function-syntax">InterSchemas::throw_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"malformed expression"</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">OPEN_BRACE_ISTT:</span><span class="plain-syntax"> </span><a href="2-is.html#SP20" class="function-link"><span class="function-syntax">InterSchemas::throw_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"unexpected '{'"</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">CLOSE_BRACE_ISTT:</span><span class="plain-syntax"> </span><a href="2-is.html#SP20" class="function-link"><span class="function-syntax">InterSchemas::throw_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"unexpected '}'"</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">OPEN_ROUND_ISTT:</span><span class="plain-syntax"> </span><a href="2-is.html#SP20" class="function-link"><span class="function-syntax">InterSchemas::throw_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"unexpected '('"</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">CLOSE_ROUND_ISTT:</span><span class="plain-syntax"> </span><a href="2-is.html#SP20" class="function-link"><span class="function-syntax">InterSchemas::throw_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"unexpected ')'"</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">COMMA_ISTT:</span><span class="plain-syntax"> </span><a href="2-is.html#SP20" class="function-link"><span class="function-syntax">InterSchemas::throw_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"unexpected ','"</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">DIVIDER_ISTT:</span><span class="plain-syntax"> </span><a href="2-is.html#SP20" class="function-link"><span class="function-syntax">InterSchemas::throw_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"malformed expression"</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">RAW_ISTT:</span><span class="plain-syntax"> </span><a href="2-i6se.html#SP4" class="function-link"><span class="function-syntax">I6Errors::issue_at_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"malformed expression"</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">OPEN_BRACE_ISTT:</span><span class="plain-syntax"> </span><a href="2-i6se.html#SP4" class="function-link"><span class="function-syntax">I6Errors::issue_at_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"unexpected '{'"</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">CLOSE_BRACE_ISTT:</span><span class="plain-syntax"> </span><a href="2-i6se.html#SP4" class="function-link"><span class="function-syntax">I6Errors::issue_at_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"unexpected '}'"</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">OPEN_ROUND_ISTT:</span><span class="plain-syntax"> </span><a href="2-i6se.html#SP4" class="function-link"><span class="function-syntax">I6Errors::issue_at_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"unexpected '('"</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">CLOSE_ROUND_ISTT:</span><span class="plain-syntax"> </span><a href="2-i6se.html#SP4" class="function-link"><span class="function-syntax">I6Errors::issue_at_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"unexpected ')'"</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">COMMA_ISTT:</span><span class="plain-syntax"> </span><a href="2-i6se.html#SP4" class="function-link"><span class="function-syntax">I6Errors::issue_at_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"unexpected ','"</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">DIVIDER_ISTT:</span><span class="plain-syntax"> </span><a href="2-i6se.html#SP4" class="function-link"><span class="function-syntax">I6Errors::issue_at_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"malformed expression"</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">RESERVED_ISTT:</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">msg</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">msg</span><span class="plain-syntax">, </span><span class="string-syntax">"unexpected use of reserved word '%S'"</span><span class="plain-syntax">, </span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="element-syntax">material</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-is.html#SP20" class="function-link"><span class="function-syntax">InterSchemas::throw_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">, </span><span class="identifier-syntax">msg</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-i6se.html#SP4" class="function-link"><span class="function-syntax">I6Errors::issue_at_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">, </span><span class="identifier-syntax">msg</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">msg</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="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">COLON_ISTT:</span><span class="plain-syntax"> </span><a href="2-is.html#SP20" class="function-link"><span class="function-syntax">InterSchemas::throw_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"unexpected ':'"</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">DCOLON_ISTT:</span><span class="plain-syntax"> </span><a href="2-is.html#SP20" class="function-link"><span class="function-syntax">InterSchemas::throw_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</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">COLON_ISTT:</span><span class="plain-syntax"> </span><a href="2-i6se.html#SP4" class="function-link"><span class="function-syntax">I6Errors::issue_at_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"unexpected ':'"</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">DCOLON_ISTT:</span><span class="plain-syntax"> </span><a href="2-i6se.html#SP4" class="function-link"><span class="function-syntax">I6Errors::issue_at_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"the Inform 6 '::' operator is unsupported"</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">OPERATOR_ISTT:</span><span class="plain-syntax"> </span><a href="2-is.html#SP20" class="function-link"><span class="function-syntax">InterSchemas::throw_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"unexpected operator"</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">OPERATOR_ISTT:</span><span class="plain-syntax"> </span><a href="2-i6se.html#SP4" class="function-link"><span class="function-syntax">I6Errors::issue_at_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"unexpected operator"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</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">t</span><span class="plain-syntax">-></span><span class="element-syntax">ist_type</span><span class="plain-syntax"> == </span><span class="constant-syntax">NUMBER_ISTT</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">) &&</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">-></span><span class="element-syntax">ist_type</span><span class="plain-syntax"> == </span><span class="constant-syntax">NUMBER_ISTT</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">asm</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><a href="2-is.html#SP20" class="function-link"><span class="function-syntax">InterSchemas::throw_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"two consecutive numbers"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-i6se.html#SP4" class="function-link"><span class="function-syntax">I6Errors::issue_at_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"two consecutive numbers"</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">isn</span><span class="plain-syntax">-></span><span class="element-syntax">child_node</span><span class="plain-syntax">) </span><a href="2-is.html#SP20" class="function-link"><span class="function-syntax">InterSchemas::throw_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"malformed expression"</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">isn</span><span class="plain-syntax">-></span><span class="element-syntax">child_node</span><span class="plain-syntax">) </span><a href="2-i6se.html#SP4" class="function-link"><span class="function-syntax">I6Errors::issue_at_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"malformed expression"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</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">isn</span><span class="plain-syntax">-></span><span class="element-syntax">expression_tokens</span><span class="plain-syntax">) </span><a href="2-is.html#SP20" class="function-link"><span class="function-syntax">InterSchemas::throw_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"syntax error"</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">isn</span><span class="plain-syntax">-></span><span class="element-syntax">expression_tokens</span><span class="plain-syntax">) </span><a href="2-i6se.html#SP4" class="function-link"><span class="function-syntax">I6Errors::issue_at_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"syntax error"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><a href="2-rmf.html#SP26" class="function-link"><span class="function-syntax">Ramification::sanity_check</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">isn</span><span class="plain-syntax">, </span><span class="identifier-syntax">isn</span><span class="plain-syntax">-></span><span class="element-syntax">child_node</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
@ -2192,7 +2192,7 @@ to cause trouble later. If no error is thrown, the schema is unchanged.
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="2-tkn.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-bm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-is.html">is</a></li><li class="progresssection"><a href="2-pis.html">pis</a></li><li class="progresssection"><a href="2-tkn.html">tkn</a></li><li class="progresscurrent">rmf</li><li class="progresssection"><a href="2-i6o.html">i6o</a></li><li class="progresssection"><a href="2-eis.html">eis</a></li><li class="progresssection"><a href="2-if.html">if</a></li><li class="progresssection"><a href="2-i6a.html">i6a</a></li><li class="progresschapter"><a href="3-prd.html">3</a></li><li class="progressnext"><a href="2-i6o.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="2-tkn.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-bm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-is.html">is</a></li><li class="progresssection"><a href="2-pis.html">pis</a></li><li class="progresssection"><a href="2-tkn.html">tkn</a></li><li class="progresscurrent">rmf</li><li class="progresssection"><a href="2-i6o.html">i6o</a></li><li class="progresssection"><a href="2-eis.html">eis</a></li><li class="progresssection"><a href="2-if.html">if</a></li><li class="progresssection"><a href="2-i6a.html">i6a</a></li><li class="progresssection"><a href="2-i6se.html">i6se</a></li><li class="progresschapter"><a href="3-prd.html">3</a></li><li class="progressnext"><a href="2-i6o.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -521,7 +521,7 @@ of modifiers are allowed. See <a href="../calculus-module/3-cs.html" class="inte
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">from</span><span class="plain-syntax">, ++</span><span class="identifier-syntax">at</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">iss_bitmap</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</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">c</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">'!'</span><span class="plain-syntax">: </span><a href="2-is.html#SP20" class="function-link"><span class="function-syntax">InterSchemas::throw_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">-></span><span class="element-syntax">node_tree</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">'!'</span><span class="plain-syntax">: </span><a href="2-i6se.html#SP4" class="function-link"><span class="function-syntax">I6Errors::issue_at_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">-></span><span class="element-syntax">node_tree</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"the '*!' schema notation has been abolished"</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="character-syntax">'%'</span><span class="plain-syntax">: </span><span class="identifier-syntax">iss_bitmap</span><span class="plain-syntax"> = </span><span class="identifier-syntax">iss_bitmap</span><span class="plain-syntax"> | </span><span class="constant-syntax">LVALUE_CONTEXT_ISSBM</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">from</span><span class="plain-syntax">, ++</span><span class="identifier-syntax">at</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
|
@ -566,7 +566,7 @@ of modifiers are allowed. See <a href="../calculus-module/3-cs.html" class="inte
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">preceding_token</span><span class="plain-syntax"> = </span><span class="identifier-syntax">t</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">pos</span><span class="plain-syntax"> = </span><span class="identifier-syntax">at</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">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'-'</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-is.html#SP20" class="function-link"><span class="function-syntax">InterSchemas::throw_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">-></span><span class="element-syntax">node_tree</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="2-i6se.html#SP4" class="function-link"><span class="function-syntax">I6Errors::issue_at_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">-></span><span class="element-syntax">node_tree</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"the '*-' schema notation has been abolished"</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">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'*'</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">c</span><span class="plain-syntax"> = </span><span class="character-syntax">'*'</span><span class="plain-syntax">; </span><span class="named-paragraph-container code-font"><a href="2-tkn.html#SP1_1" class="named-paragraph-link"><span class="named-paragraph">Absorb a raw character</span><span class="named-paragraph-number">1.1</span></a></span><span class="plain-syntax">;</span>
|
||||
|
@ -1501,7 +1501,7 @@ single quotation mark in a dictionary literal, but not a character literal.
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="2-pis.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-bm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-is.html">is</a></li><li class="progresssection"><a href="2-pis.html">pis</a></li><li class="progresscurrent">tkn</li><li class="progresssection"><a href="2-rmf.html">rmf</a></li><li class="progresssection"><a href="2-i6o.html">i6o</a></li><li class="progresssection"><a href="2-eis.html">eis</a></li><li class="progresssection"><a href="2-if.html">if</a></li><li class="progresssection"><a href="2-i6a.html">i6a</a></li><li class="progresschapter"><a href="3-prd.html">3</a></li><li class="progressnext"><a href="2-rmf.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="2-pis.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-bm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-is.html">is</a></li><li class="progresssection"><a href="2-pis.html">pis</a></li><li class="progresscurrent">tkn</li><li class="progresssection"><a href="2-rmf.html">rmf</a></li><li class="progresssection"><a href="2-i6o.html">i6o</a></li><li class="progresssection"><a href="2-eis.html">eis</a></li><li class="progresssection"><a href="2-if.html">if</a></li><li class="progresssection"><a href="2-i6a.html">i6a</a></li><li class="progresssection"><a href="2-i6se.html">i6se</a></li><li class="progresschapter"><a href="3-prd.html">3</a></li><li class="progressnext"><a href="2-rmf.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -736,7 +736,7 @@ doesn't add the name tp the current stack frame in <a href="../inform7/index.htm
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="2-i6a.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-bm.html">1</a></li><li class="progresschapter"><a href="2-is.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresscurrent">prd</li><li class="progresssection"><a href="3-vh.html">vh</a></li><li class="progressnext"><a href="3-vh.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="2-i6se.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-bm.html">1</a></li><li class="progresschapter"><a href="2-is.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresscurrent">prd</li><li class="progresssection"><a href="3-vh.html">vh</a></li><li class="progressnext"><a href="3-vh.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -150,6 +150,11 @@
|
|||
<spon class="sectiontitle">Inform 6 Annotations</span></a> -
|
||||
<span class="sectionpurpose">Parsing Inform 6-syntax annotation markers.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="sectionentry"><a href="2-i6se.html">
|
||||
<spon class="sectiontitle">Inform 6 Syntax Errors</span></a> -
|
||||
<span class="sectionpurpose">To issue problem messages when parsing malformed I6-syntax code.</span></p>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
|
|
|
@ -143,7 +143,7 @@ Inter program is printed to text files, not the meaning of the program.
|
|||
<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">c</span><span class="plain-syntax"> >= </span><span class="character-syntax">'A'</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> <= </span><span class="character-syntax">'Z'</span><span class="plain-syntax">)) </span><span class="identifier-syntax">d</span><span class="plain-syntax"> = </span><span class="identifier-syntax">c</span><span class="plain-syntax">-</span><span class="character-syntax">'A'</span><span class="plain-syntax">+10;</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">c</span><span class="plain-syntax"> >= </span><span class="character-syntax">'0'</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> <= </span><span class="character-syntax">'9'</span><span class="plain-syntax">)) </span><span class="identifier-syntax">d</span><span class="plain-syntax"> = </span><span class="identifier-syntax">c</span><span class="plain-syntax">-</span><span class="character-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">return</span><span class="plain-syntax"> </span><a href="3-ivp.html#SP17" class="function-link"><span class="function-syntax">InterValuePairs::undef</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">d</span><span class="plain-syntax"> > </span><span class="identifier-syntax">base</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="3-ivp.html#SP17" class="function-link"><span class="function-syntax">InterValuePairs::undef</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">d</span><span class="plain-syntax"> >= </span><span class="identifier-syntax">base</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="3-ivp.html#SP17" class="function-link"><span class="function-syntax">InterValuePairs::undef</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">N</span><span class="plain-syntax"> = </span><span class="identifier-syntax">base</span><span class="plain-syntax">*</span><span class="identifier-syntax">N</span><span class="plain-syntax"> + (</span><span class="reserved-syntax">long</span><span class="plain-syntax"> </span><span class="reserved-syntax">long</span><span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax">) </span><span class="identifier-syntax">d</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">pos</span><span class="plain-syntax">.</span><span class="element-syntax">index</span><span class="plain-syntax"> > </span><span class="constant-syntax">34</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="3-ivp.html#SP17" class="function-link"><span class="function-syntax">InterValuePairs::undef</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
|
|
@ -732,7 +732,7 @@ in <span class="extract"><span class="extract-syntax">Include (- ... -)</span></
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">notified_kit_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">notified_architecture_name</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">trigger_kit_notice</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::handmade_problem</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP6" class="function-link"><span class="function-syntax">Task::syntax_tree</span></a><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><a href="1-wtc.html#SP6" class="function-link"><span class="function-syntax">Task::syntax_tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_I6SyntaxError</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_stream</span><span class="plain-syntax">(1, </span><span class="identifier-syntax">M</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">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">kit</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">Problems::quote_stream</span><span class="plain-syntax">(2, </span><span class="identifier-syntax">file</span><span class="plain-syntax">);</span>
|
||||
|
@ -744,7 +744,7 @@ in <span class="extract"><span class="extract-syntax">Include (- ... -)</span></
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"%S, line %d:\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">file</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::problem_quote_file</span><span class="plain-syntax">(2, </span><span class="identifier-syntax">file</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</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">"A mistake was found in the Inform 6-syntax code near here %2: %1."</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"Inform 6 syntax error near here %2: %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="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">"My low-level reader of source code reported a mistake - \"%1\". "</span>
|
||||
|
|
|
@ -156,7 +156,7 @@ as above), we fill in its kind.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitInterSchemas::emit</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), &</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">sch</span><span class="plain-syntax">-></span><span class="identifier-syntax">compiled</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">IdentifierFinders::common_names_only</span><span class="plain-syntax">(),</span>
|
||||
<span class="plain-syntax"> &</span><a href="4-cs.html#SP3" class="function-link"><span class="function-syntax">CompileSchemas::from_schema_token</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, &</span><span class="identifier-syntax">ems</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">InterSchemas::internal_error_on_schema_errors</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">-></span><span class="identifier-syntax">compiled</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">I6Errors::internal_error_on_schema_errors</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">-></span><span class="identifier-syntax">compiled</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure i6s_emission_state is private to this section.</li></ul>
|
||||
|
|
|
@ -59,7 +59,7 @@ function togglePopup(material_id) {
|
|||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../intern.html">Inter Modules</a></li><li><a href="index.html">pipeline</a></li><li><a href="index.html#2">Chapter 2: Pipelines</a></li><li><b>Pipeline Errors</b></li></ul></div>
|
||||
<p class="purpose">To issue problem messages when parsing or running erroneous pipelines.</p>
|
||||
|
||||
<ul class="toc"><li><a href="2-pe.html#SP1">§1. Syntax errors</a></li><li><a href="2-pe.html#SP2">§2. Execution errors</a></li><li><a href="2-pe.html#SP3">§3. Errors in kit source</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="2-pe.html#SP1">§1. Syntax errors</a></li><li><a href="2-pe.html#SP2">§2. Execution errors</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. Syntax errors. </b></p>
|
||||
|
||||
|
@ -206,66 +206,6 @@ function togglePopup(material_id) {
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">TextualInter::write</span><span class="plain-syntax">(</span><span class="identifier-syntax">DL</span><span class="plain-syntax">, </span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="2-pe.html#SP2">§2</a> (twice).</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. Errors in kit source. </b>Errors like this used to be basically failed assertions, but inevitably people
|
||||
reported that as a bug (0001596). It was never intended that Inform 6-syntax
|
||||
hacking should be part of the outside-facing Inform language; but if you leave
|
||||
power tools just lying around, people will eventually pick them up and wonder
|
||||
what the red button marked "danger" does.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">text_provenance</span><span class="plain-syntax"> </span><span class="identifier-syntax">kit_error_location</span><span class="plain-syntax">;</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">kit_error_location_set</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">kit_error_count</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="identifier-syntax">text_provenance</span><span class="plain-syntax"> </span><span class="function-syntax">PipelineErrors::get_kit_error_location</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">PipelineErrors::get_kit_error_location</span></span>:<br/>Compile Splats Stage - <a href="3-css.html#SP3_2_3_2_3">§3.2.3.2.3</a>, <a href="3-css.html#SP7_10">§7.10</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">kit_error_location_set</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::clear_kit_error_location</span></a><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">kit_error_location</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">PipelineErrors::clear_kit_error_location</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">PipelineErrors::clear_kit_error_location</span></span>:<br/>Compile Splats Stage - <a href="3-css.html#SP2">§2</a>, <a href="3-css.html#SP14">§14</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::set_kit_error_location</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Provenance::nowhere</span><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">PipelineErrors::set_kit_error_location</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">PipelineErrors::set_kit_error_location</span></span>:<br/>Compile Splats Stage - <a href="3-css.html#SP14">§14</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_provenance</span><span class="plain-syntax"> </span><span class="identifier-syntax">where</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">kit_error_location_set</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">kit_error_location</span><span class="plain-syntax"> = </span><span class="identifier-syntax">where</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">PipelineErrors::set_kit_error_location_near_splat</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">PipelineErrors::set_kit_error_location_near_splat</span></span>:<br/>Compile Splats Stage - <a href="3-css.html#SP3_1">§3.1</a>, <a href="3-css.html#SP3_2">§3.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::clear_kit_error_location</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">P</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">Inode::is</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">SPLAT_IST</span><span class="plain-syntax">)))</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::set_kit_error_location</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">SplatInstruction::provenance</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">PipelineErrors::kit_error</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">PipelineErrors::kit_error</span></span>:<br/>Parsing Stages - <a href="3-ps.html#SP2_5">§2.5</a>, <a href="3-ps.html#SP7">§7</a><br/>Resolve Conditional Compilation Stage - <a href="3-rccs.html#SP2">§2</a>, <a href="3-rccs.html#SP3_4">§3.4</a>, <a href="3-rccs.html#SP3_2_2">§3.2.2</a>, <a href="3-rccs.html#SP3_5">§3.5</a>, <a href="3-rccs.html#SP3_6">§3.6</a><br/>Compile Splats Stage - <a href="3-css.html#SP3_1_3_1_4_5_1">§3.1.3.1.4.5.1</a>, <a href="3-css.html#SP3_1_3_1_4_5_2_1_1">§3.1.3.1.4.5.2.1.1</a>, <a href="3-css.html#SP3_1_3_1_4_5_2_2_1">§3.1.3.1.4.5.2.2.1</a>, <a href="3-css.html#SP3_1_3_1_4_5_2_2_1_1">§3.1.3.1.4.5.2.2.1.1</a>, <a href="3-css.html#SP3_2_1">§3.2.1</a>, <a href="3-css.html#SP3_2_2">§3.2.2</a>, <a href="3-css.html#SP3_2_3_2_1">§3.2.3.2.1</a>, <a href="3-css.html#SP4">§4</a>, <a href="3-css.html#SP7_8">§7.8</a>, <a href="3-css.html#SP7_10">§7.10</a>, <a href="3-css.html#SP14">§14</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">message</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">quote</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">text_provenance</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax"> = </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::get_kit_error_location</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">SourceProblems::I6_level_error</span><span class="plain-syntax">(</span><span class="identifier-syntax">message</span><span class="plain-syntax">, </span><span class="identifier-syntax">quote</span><span class="plain-syntax">, </span><span class="identifier-syntax">at</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifndef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Provenance::is_somewhere</span><span class="plain-syntax">(</span><span class="identifier-syntax">at</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Provenance::get_filename</span><span class="plain-syntax">(</span><span class="identifier-syntax">at</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">M</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">M</span><span class="plain-syntax">, </span><span class="identifier-syntax">message</span><span class="plain-syntax">, </span><span class="identifier-syntax">quote</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Errors::at_position_S</span><span class="plain-syntax">(</span><span class="identifier-syntax">M</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">Provenance::get_line</span><span class="plain-syntax">(</span><span class="identifier-syntax">at</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">M</span><span class="plain-syntax">)</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">Errors::with_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">message</span><span class="plain-syntax">, </span><span class="identifier-syntax">quote</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">kit_error_count</span><span class="plain-syntax">++;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">PipelineErrors::reset_errors</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">PipelineErrors::reset_errors</span></span>:<br/>Compile Splats Stage - <a href="3-css.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::clear_kit_error_location</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">kit_error_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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">PipelineErrors::errors_occurred</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">PipelineErrors::errors_occurred</span></span>:<br/>Compile Splats Stage - <a href="3-css.html#SP2">§2</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">kit_error_count</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">TRUE</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">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="2-rp.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-pm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-pp.html">pp</a></li><li class="progresssection"><a href="2-rp.html">rp</a></li><li class="progresscurrent">pe</li><li class="progresssection"><a href="2-ns.html">ns</a></li><li class="progresssection"><a href="2-rmss.html">rmss</a></li><li class="progresschapter"><a href="3-ps.html">3</a></li><li class="progresschapter"><a href="4-lbks.html">4</a></li><li class="progresschapter"><a href="5-msms.html">5</a></li><li class="progresschapter"><a href="6-erms.html">6</a></li><li class="progressnext"><a href="2-ns.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
|
|
@ -105,18 +105,18 @@ function definition, that is quite a lot of work.
|
|||
</li></ul>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CompileSplatsStage::run</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">CompileSplatsStage::run</span></span>:<br/><a href="3-css.html#SP1">§1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">pipeline_step</span><span class="plain-syntax"> *</span><span class="identifier-syntax">step</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::reset_errors</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">I6Errors::reset_count</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">compile_splats_state</span><span class="plain-syntax"> </span><span class="identifier-syntax">css</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-css.html#SP2_2" class="named-paragraph-link"><span class="named-paragraph">Initialise the CS state</span><span class="named-paragraph-number">2.2</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax"> = </span><span class="identifier-syntax">step</span><span class="plain-syntax">-></span><span class="element-syntax">ephemera</span><span class="plain-syntax">.</span><span class="element-syntax">tree</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">InterTree::traverse</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><a href="3-css.html#SP3" class="function-link"><span class="function-syntax">CompileSplatsStage::visitor1</span></a><span class="plain-syntax">, &</span><span class="identifier-syntax">css</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">SPLAT_IST</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">InterTree::traverse</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><a href="3-css.html#SP3" class="function-link"><span class="function-syntax">CompileSplatsStage::visitor2</span></a><span class="plain-syntax">, &</span><span class="identifier-syntax">css</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::clear_kit_error_location</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">I6Errors::clear_current_location</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">errors_found</span><span class="plain-syntax"> = </span><a href="3-css.html#SP13" class="function-link"><span class="function-syntax">CompileSplatsStage::function_bodies</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">step</span><span class="plain-syntax">, &</span><span class="identifier-syntax">css</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">errors_found</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">InterTree::traverse</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><a href="3-css.html#SP3" class="function-link"><span class="function-syntax">CompileSplatsStage::visitor3</span></a><span class="plain-syntax">, &</span><span class="identifier-syntax">css</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">SPLAT_IST</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::clear_kit_error_location</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::errors_occurred</span></a><span class="plain-syntax">()) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">I6Errors::clear_current_location</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">I6Errors::errors_occurred</span><span class="plain-syntax">()) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</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">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
@ -219,7 +219,7 @@ is being compiled.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::set_kit_error_location_near_splat</span></a><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">I6Errors::set_current_location_near_splat</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">match_results</span><span class="plain-syntax"> </span><span class="identifier-syntax">mr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Regexp::create_mr</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">raw_identifier</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, *</span><span class="identifier-syntax">value</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">proceed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
|
@ -600,11 +600,13 @@ first to work out which of the several array formats this is, then the contents
|
|||
<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">Regexp::match</span><span class="plain-syntax">(&</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">value</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">" *buffer *(%c*?) *"</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">conts</span><span class="plain-syntax"> = </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0]; </span><span class="identifier-syntax">as_bytes</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="identifier-syntax">bounded</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">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Regexp::match</span><span class="plain-syntax">(&</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">value</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">" *string *(%c*?) *"</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Identifier = <%S>, Value = <%S>"</span><span class="plain-syntax">, </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">value</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::kit_error</span></a><span class="plain-syntax">(</span><span class="string-syntax">"Inform 6 'string' arrays are unsupported"</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">I6Errors::issue</span><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"cannot make array '%S': the 'string' initialiser is unsupported"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">);</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">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Identifier = <%S>, Value = <%S>"</span><span class="plain-syntax">, </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">value</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::kit_error</span></a><span class="plain-syntax">(</span><span class="string-syntax">"invalid Inform 6 array declaration"</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">I6Errors::issue</span><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"cannot make array '%S': the initial value syntax is unrecognised"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</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">conts</span><span class="plain-syntax"> = </span><span class="identifier-syntax">value</span><span class="plain-syntax">; </span><span class="identifier-syntax">grammatical</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
|
@ -670,18 +672,16 @@ see why other kits would, either.
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">full_conts</span><span class="plain-syntax"> = </span><span class="identifier-syntax">entries</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">from</span><span class="plain-syntax"> > </span><span class="identifier-syntax">to</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::kit_error</span></a><span class="plain-syntax">(</span><span class="string-syntax">"Inform 6 array contains empty entry"</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">else</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">count_before</span><span class="plain-syntax"> = </span><span class="identifier-syntax">no_assimilated_array_entries</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">conts</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">j</span><span class="plain-syntax">=</span><span class="identifier-syntax">from</span><span class="plain-syntax">; </span><span class="identifier-syntax">j</span><span class="plain-syntax"><=</span><span class="identifier-syntax">to</span><span class="plain-syntax">; </span><span class="identifier-syntax">j</span><span class="plain-syntax">++) </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">conts</span><span class="plain-syntax">, </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">full_conts</span><span class="plain-syntax">, </span><span class="identifier-syntax">j</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-css.html#SP3_1_3_1_4_5_2_2" class="named-paragraph-link"><span class="named-paragraph">Parse the old-style I6 array entry notation</span><span class="named-paragraph-number">3.1.3.1.4.5.2.2</span></a></span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">conts</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">no_assimilated_array_entries</span><span class="plain-syntax"> == </span><span class="identifier-syntax">count_before</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">I6Errors::issue</span><span class="plain-syntax">(</span><span class="string-syntax">"array '%S' contains empty entry"</span><span class="plain-syntax">, </span><span class="identifier-syntax">identifier</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">no_assimilated_array_entries</span><span class="plain-syntax"> > </span><span class="identifier-syntax">count_before</span><span class="plain-syntax">+1)</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::kit_error</span></a><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"Multiple entries between ';' markers in a '[ ...; ...; ... ]' array"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">I6Errors::issue</span><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"multiple entries between ';' markers in array '%S'"</span><span class="plain-syntax">, </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">);</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-css.html#SP3_1_3_1_4_5_2_1">§3.1.3.1.4.5.2.1</a> (twice).</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP3_1_3_1_4_5_2_2" class="paragraph-anchor"></a><b>§3.1.3.1.4.5.2.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse the old-style I6 array entry notation</span><span class="named-paragraph-number">3.1.3.1.4.5.2.2</span></span><span class="comment-syntax"> =</span>
|
||||
|
@ -703,17 +703,21 @@ see why other kits would, either.
|
|||
|
||||
<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">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">value</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"+"</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::kit_error</span></a><span class="plain-syntax">(</span><span class="string-syntax">"Inform 6 array declaration using operator '+' "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"(use brackets '(' ... ')' around the size for a calculated array size)"</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">I6Errors::issue</span><span class="plain-syntax">(</span><span class="string-syntax">"array '%S' gives its size using operator '+' "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"(use brackets '(' ... ')' around the size for a calculated array size)"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">identifier</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">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">value</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"-"</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::kit_error</span></a><span class="plain-syntax">(</span><span class="string-syntax">"Inform 6 array declaration using operator '-' "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"(use brackets '(' ... ')' around the size for a calculated array size)"</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">I6Errors::issue</span><span class="plain-syntax">(</span><span class="string-syntax">"array '%S' gives its size using operator '-' "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"(use brackets '(' ... ')' around the size for a calculated array size)"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">identifier</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">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">value</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"*"</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::kit_error</span></a><span class="plain-syntax">(</span><span class="string-syntax">"Inform 6 array declaration using operator '*' "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"(use brackets '(' ... ')' around the size for a calculated array size)"</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">I6Errors::issue</span><span class="plain-syntax">(</span><span class="string-syntax">"array '%S' gives its size using operator '*' "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"(use brackets '(' ... ')' around the size for a calculated array size)"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">identifier</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">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">value</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"/"</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::kit_error</span></a><span class="plain-syntax">(</span><span class="string-syntax">"Inform 6 array declaration using operator '/' "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"(use brackets '(' ... ')' around the size for a calculated array size)"</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">I6Errors::issue</span><span class="plain-syntax">(</span><span class="string-syntax">"array '%S' gives its size using operator '/' "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"(use brackets '(' ... ')' around the size for a calculated array size)"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">);</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">inter_pair</span><span class="plain-syntax"> </span><span class="identifier-syntax">val</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InterValuePairs::undef</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-css.html#SP3_1_3_1_4_1_1" class="named-paragraph-link"><span class="named-paragraph">Assimilate a value</span><span class="named-paragraph-number">3.1.3.1.4.1.1</span></a></span><span class="plain-syntax">;</span>
|
||||
|
@ -902,7 +906,7 @@ equating it to a function definition elsewhere.
|
|||
|
||||
<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">no_assimilated_array_entries</span><span class="plain-syntax"> >= </span><span class="constant-syntax">MAX_ASSIMILATED_ARRAY_ENTRIES</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::kit_error</span></a><span class="plain-syntax">(</span><span class="string-syntax">"excessively long Verb or Extend"</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">I6Errors::issue</span><span class="plain-syntax">(</span><span class="string-syntax">"excessively long Verb or Extend"</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">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">val_pile</span><span class="plain-syntax">[</span><span class="identifier-syntax">no_assimilated_array_entries</span><span class="plain-syntax">] = </span><span class="identifier-syntax">val</span><span class="plain-syntax">;</span>
|
||||
|
@ -946,7 +950,7 @@ in this section.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::set_kit_error_location_near_splat</span></a><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">I6Errors::set_current_location_near_splat</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">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">raw_identifier</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, *</span><span class="identifier-syntax">local_var_names</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, *</span><span class="identifier-syntax">body</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">match_results</span><span class="plain-syntax"> </span><span class="identifier-syntax">mr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Regexp::create_mr</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">line_offset</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
|
@ -973,8 +977,12 @@ in this section.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">raw_identifier</span><span class="plain-syntax"> = </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0]; </span><span class="identifier-syntax">body</span><span class="plain-syntax"> = </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[1]; </span><span class="identifier-syntax">pos</span><span class="plain-syntax"> = </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp_at</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="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Regexp::match</span><span class="plain-syntax">(&</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">" *%[ *([A-Za-z0-9_`]+) *(%c*?); *(%c*)"</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">raw_identifier</span><span class="plain-syntax"> = </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0]; </span><span class="identifier-syntax">local_var_names</span><span class="plain-syntax"> = </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[1]; </span><span class="identifier-syntax">body</span><span class="plain-syntax"> = </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[2]; </span><span class="identifier-syntax">pos</span><span class="plain-syntax"> = </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp_at</span><span class="plain-syntax">[2];</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">Regexp::match</span><span class="plain-syntax">(&</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">" *%[ *(%c+?) *; *(%c*)"</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">I6Errors::issue</span><span class="plain-syntax">(</span><span class="string-syntax">"invalid Inform 6 routine declaration: '%S'"</span><span class="plain-syntax">, </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0]);</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::kit_error</span></a><span class="plain-syntax">(</span><span class="string-syntax">"invalid Inform 6 routine declaration"</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">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">start</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::truncate</span><span class="plain-syntax">(</span><span class="identifier-syntax">start</span><span class="plain-syntax">, </span><span class="constant-syntax">50</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">I6Errors::issue</span><span class="plain-syntax">(</span><span class="string-syntax">"invalid Inform 6 routine declaration: '%S'"</span><span class="plain-syntax">, </span><span class="identifier-syntax">start</span><span class="plain-syntax">);</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">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax"><</span><span class="identifier-syntax">pos</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">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">) == </span><span class="character-syntax">'\n'</span><span class="plain-syntax">)</span>
|
||||
|
@ -1017,7 +1025,11 @@ supported only to avoid throwing errors.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">N</span><span class="plain-syntax"><0) || (</span><span class="identifier-syntax">N</span><span class="plain-syntax">>15)) </span><span class="identifier-syntax">N</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</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="plain-syntax"><=</span><span class="identifier-syntax">N</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">local_var_names</span><span class="plain-syntax">, </span><span class="string-syntax">"x%d "</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">body</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"rfalse; ];"</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-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::kit_error</span></a><span class="plain-syntax">(</span><span class="string-syntax">"invalid Inform 6 Stub declaration"</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">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">start</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::truncate</span><span class="plain-syntax">(</span><span class="identifier-syntax">start</span><span class="plain-syntax">, </span><span class="constant-syntax">50</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">I6Errors::issue</span><span class="plain-syntax">(</span><span class="string-syntax">"invalid #Stub declaration: '%S'"</span><span class="plain-syntax">, </span><span class="identifier-syntax">start</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-css.html#SP3_2">§3.2</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP3_2_3" class="paragraph-anchor"></a><b>§3.2.3. </b>Function packages have a standardised shape in Inter, and though this is a
|
||||
|
@ -1091,14 +1103,14 @@ which contains the actual code.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">invalid</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</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">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax"><</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">value</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">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">value</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">i</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">Characters::isdigit</span><span class="plain-syntax">(</span><span class="identifier-syntax">c</span><span class="plain-syntax">))) </span><span class="identifier-syntax">invalid</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">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">c</span><span class="plain-syntax"> != </span><span class="character-syntax">'_'</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">Characters::isalnum</span><span class="plain-syntax">(</span><span class="identifier-syntax">c</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) &&</span>
|
||||
<span class="plain-syntax"> ((</span><span class="identifier-syntax">i</span><span class="plain-syntax"> > </span><span class="constant-syntax">0</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">Characters::isdigit</span><span class="plain-syntax">(</span><span class="identifier-syntax">c</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)))</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">invalid</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">Characters::isdigit</span><span class="plain-syntax">(</span><span class="identifier-syntax">c</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)) </span><span class="identifier-syntax">invalid</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</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">invalid</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">err</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::new</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">, </span><span class="string-syntax">"'%S' in function '%S'"</span><span class="plain-syntax">, </span><span class="identifier-syntax">value</span><span class="plain-syntax">, </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::kit_error</span></a><span class="plain-syntax">(</span><span class="string-syntax">"invalid Inform 6 local variable name: %S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">err</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">I6Errors::issue</span><span class="plain-syntax">(</span><span class="string-syntax">"invalid Inform 6 local variable name: %S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">err</span><span class="plain-syntax">);</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">loc_name</span><span class="plain-syntax"> =</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">InterSymbolsTable::create_with_unique_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">InterPackage::scope</span><span class="plain-syntax">(</span><span class="identifier-syntax">IP</span><span class="plain-syntax">), </span><span class="identifier-syntax">value</span><span class="plain-syntax">);</span>
|
||||
|
@ -1126,7 +1138,7 @@ which contains the actual code.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">L</span><span class="plain-syntax">>0) && (</span><span class="identifier-syntax">Characters::is_whitespace</span><span class="plain-syntax">(</span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">body</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">-1)))) </span><span class="identifier-syntax">L</span><span class="plain-syntax">--;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::truncate</span><span class="plain-syntax">(</span><span class="identifier-syntax">body</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">B</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="identifier-syntax">InterBookmark::baseline</span><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">) + </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">text_provenance</span><span class="plain-syntax"> </span><span class="identifier-syntax">prov</span><span class="plain-syntax"> = </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::get_kit_error_location</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">text_provenance</span><span class="plain-syntax"> </span><span class="identifier-syntax">prov</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I6Errors::get_current_location</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Provenance::advance_line</span><span class="plain-syntax">(&</span><span class="identifier-syntax">prov</span><span class="plain-syntax">, </span><span class="identifier-syntax">line_offset</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="3-css.html#SP12" class="function-link"><span class="function-syntax">CompileSplatsStage::function_body</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">css</span><span class="plain-syntax">, </span><span class="identifier-syntax">IBM</span><span class="plain-syntax">, </span><span class="identifier-syntax">IP</span><span class="plain-syntax">, </span><span class="identifier-syntax">B</span><span class="plain-syntax">, </span><span class="identifier-syntax">body</span><span class="plain-syntax">, </span><span class="identifier-syntax">block_bookmark</span><span class="plain-syntax">, </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">SplatInstruction::namespace</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">), </span><span class="identifier-syntax">prov</span><span class="plain-syntax">);</span>
|
||||
|
@ -1140,12 +1152,11 @@ which contains the actual code.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get_last_char</span><span class="plain-syntax">(</span><span class="identifier-syntax">NS</span><span class="plain-syntax">) == </span><span class="character-syntax">'+'</span><span class="plain-syntax">) </span><span class="identifier-syntax">apply_private</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</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">Str::get_last_char</span><span class="plain-syntax">(</span><span class="identifier-syntax">NS</span><span class="plain-syntax">) == </span><span class="character-syntax">'-'</span><span class="plain-syntax">) </span><span class="identifier-syntax">apply_private</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">apply_private</span><span class="plain-syntax"> != </span><span class="identifier-syntax">NOT_APPLICABLE</span><span class="plain-syntax">) </span><span class="identifier-syntax">L</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">L</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">TEMPORARY_TEXT</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">L</span><span class="plain-syntax"> > </span><span class="constant-syntax">0</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">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax"><</span><span class="identifier-syntax">L</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">, </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">NS</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">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">INTER_CONNECTORS</span><span class="plain-syntax">, </span><span class="string-syntax">"Assign namespace '%S' to $3\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">N</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">InterSymbol::set_namespace</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">N</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</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">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">A</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">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">INTER_CONNECTORS</span><span class="plain-syntax">, </span><span class="string-syntax">"Trying to apply '%S' to $3\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">A</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">);</span>
|
||||
|
@ -1153,18 +1164,20 @@ which contains the actual code.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">IA</span><span class="plain-syntax">-></span><span class="element-syntax">identifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"private"</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">IA</span><span class="plain-syntax">-></span><span class="identifier-syntax">terms</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">LinkedLists::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">IA</span><span class="plain-syntax">-></span><span class="identifier-syntax">terms</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</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">apply_private</span><span class="plain-syntax"> == </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::kit_error</span></a><span class="plain-syntax">(</span><span class="string-syntax">"the +private annotation is redundant here"</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">I6Errors::issue</span><span class="plain-syntax">(</span><span class="string-syntax">"the +private annotation is redundant in namespace '%S'"</span><span class="plain-syntax">, </span><span class="identifier-syntax">N</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">apply_private</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">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::kit_error</span></a><span class="plain-syntax">(</span><span class="string-syntax">"the +private annotation does not take any terms"</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">I6Errors::issue</span><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"the +private annotation does not take any terms"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</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">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">IA</span><span class="plain-syntax">-></span><span class="element-syntax">identifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"public"</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">IA</span><span class="plain-syntax">-></span><span class="identifier-syntax">terms</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">LinkedLists::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">IA</span><span class="plain-syntax">-></span><span class="identifier-syntax">terms</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</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">apply_private</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::kit_error</span></a><span class="plain-syntax">(</span><span class="string-syntax">"the +public annotation is redundant here"</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">I6Errors::issue</span><span class="plain-syntax">(</span><span class="string-syntax">"the +public annotation is redundant in namespace '%S'"</span><span class="plain-syntax">, </span><span class="identifier-syntax">N</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">apply_private</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::kit_error</span></a><span class="plain-syntax">(</span><span class="string-syntax">"the +public annotation does not take any terms"</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">I6Errors::issue</span><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"the +public annotation does not take any terms"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</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">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">IA</span><span class="plain-syntax">-></span><span class="element-syntax">identifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"replacing"</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">from</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"_"</span><span class="plain-syntax">; </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">keeping</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
|
@ -1176,21 +1189,28 @@ which contains the actual code.
|
|||
<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">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">term</span><span class="plain-syntax">-></span><span class="identifier-syntax">key</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</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">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">term</span><span class="plain-syntax">-></span><span class="identifier-syntax">value</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"keeping"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">keeping</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">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::kit_error</span></a><span class="plain-syntax">(</span><span class="string-syntax">"expected 'from K' or 'keeping', not '%S'"</span><span class="plain-syntax">, </span><span class="identifier-syntax">term</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">I6Errors::issue</span><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"expected 'from K' or 'keeping' in '+replacing(...)', not '%S'"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">term</span><span class="plain-syntax">-></span><span class="identifier-syntax">value</span><span class="plain-syntax">);</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-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::kit_error</span></a><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"the +replacing annotation does not take the term '%S'"</span><span class="plain-syntax">, </span><span class="identifier-syntax">term</span><span class="plain-syntax">-></span><span class="identifier-syntax">key</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">I6Errors::issue</span><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"the +replacing annotation does not take the term '%S'"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">term</span><span class="plain-syntax">-></span><span class="identifier-syntax">key</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">InterSymbol::set_replacement</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">from</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">keeping</span><span class="plain-syntax">) </span><span class="identifier-syntax">SymbolAnnotation::set_b</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">KEEPING_IANN</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">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">IA</span><span class="plain-syntax">-></span><span class="element-syntax">identifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"namespace"</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">I6Errors::issue</span><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"the annotation '%S' must be followed by a ';'"</span><span class="plain-syntax">, </span><span class="identifier-syntax">A</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::kit_error</span></a><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"annotation '%S' not recognised"</span><span class="plain-syntax">, </span><span class="identifier-syntax">IA</span><span class="plain-syntax">-></span><span class="element-syntax">identifier</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">I6Errors::issue</span><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"the annotation '+%S' is not one of those allowed"</span><span class="plain-syntax">, </span><span class="identifier-syntax">IA</span><span class="plain-syntax">-></span><span class="element-syntax">identifier</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</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">apply_private</span><span class="plain-syntax"> == </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">) </span><span class="identifier-syntax">SymbolAnnotation::set_b</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">PRIVATE_IANN</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. Plumbing. </b>Some convenient Inter utilities.
|
||||
|
@ -1452,7 +1472,7 @@ from command parser grammar: slightly different syntax applies there.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">marker</span><span class="plain-syntax">) *</span><span class="identifier-syntax">marker</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</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">InterValuePairs::symbolic</span><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">, </span><span class="identifier-syntax">symb</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::kit_error</span></a><span class="plain-syntax">(</span><span class="string-syntax">"unknown scope routine"</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">I6Errors::issue</span><span class="plain-syntax">(</span><span class="string-syntax">"can't find any scope routine called '%S'"</span><span class="plain-syntax">, </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0]);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">InterValuePairs::number</span><span class="plain-syntax">(1);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
@ -1462,7 +1482,7 @@ from command parser grammar: slightly different syntax applies there.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">marker</span><span class="plain-syntax">) *</span><span class="identifier-syntax">marker</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">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">InterValuePairs::symbolic</span><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">, </span><span class="identifier-syntax">symb</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::kit_error</span></a><span class="plain-syntax">(</span><span class="string-syntax">"unknown noun routine"</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">I6Errors::issue</span><span class="plain-syntax">(</span><span class="string-syntax">"can't find any noun routine called '%S'"</span><span class="plain-syntax">, </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0]);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">InterValuePairs::number</span><span class="plain-syntax">(1);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
@ -1508,12 +1528,12 @@ before they are needed.
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax"> =</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ParsingSchemas::from_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::get_kit_error_location</span></a><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ParsingSchemas::from_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">I6Errors::get_current_location</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">excess_tokens</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</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">result_s</span><span class="plain-syntax"> =</span>
|
||||
<span class="plain-syntax"> </span><a href="3-css.html#SP8" class="function-link"><span class="function-syntax">CompileSplatsStage::compute_r</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">step</span><span class="plain-syntax">, </span><span class="identifier-syntax">IBM</span><span class="plain-syntax">, </span><span class="identifier-syntax">sch</span><span class="plain-syntax">-></span><span class="identifier-syntax">node_tree</span><span class="plain-syntax">, &</span><span class="identifier-syntax">excess_tokens</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">result_s</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::kit_error</span></a><span class="plain-syntax">(</span><span class="string-syntax">"Inform 6 constant too complex"</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</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">result_s</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) { </span><span class="comment-syntax"> a precaution, but should no longer happen</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">I6Errors::issue</span><span class="plain-syntax">(</span><span class="string-syntax">"Inform 6 constant too complex"</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</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">InterValuePairs::number</span><span class="plain-syntax">(1);</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">InterValuePairs::symbolic</span><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">, </span><span class="identifier-syntax">result_s</span><span class="plain-syntax">);</span>
|
||||
|
@ -1789,13 +1809,13 @@ kit <span class="extract"><span class="extract-syntax">CommandParserKit</span></
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">LinkedLists::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">-></span><span class="identifier-syntax">parsing_errors</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">schema_parsing_error</span><span class="plain-syntax"> *</span><span class="identifier-syntax">err</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">, </span><span class="identifier-syntax">schema_parsing_error</span><span class="plain-syntax">, </span><span class="identifier-syntax">sch</span><span class="plain-syntax">-></span><span class="identifier-syntax">parsing_errors</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::set_kit_error_location</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">-></span><span class="element-syntax">provenance</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">I6Errors::set_current_location</span><span class="plain-syntax">(</span><span class="identifier-syntax">err</span><span class="plain-syntax">-></span><span class="element-syntax">provenance</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">msg</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">msg</span><span class="plain-syntax">, </span><span class="string-syntax">"in function '%S': %S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">identifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">err</span><span class="plain-syntax">-></span><span class="identifier-syntax">message</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::kit_error</span></a><span class="plain-syntax">(</span><span class="string-syntax">"Inform 6 syntax error %S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">msg</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">I6Errors::issue</span><span class="plain-syntax">(</span><span class="string-syntax">"Inform 6 syntax error %S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">msg</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">msg</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::clear_kit_error_location</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">I6Errors::clear_current_location</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
|
|
@ -214,7 +214,7 @@ in <span class="extract"><span class="extract-syntax">K/Sections</span></span>.
|
|||
<span class="plain-syntax"> &(</span><a href="3-ps.html#SP3" class="function-link"><span class="function-syntax">ParsingStages::receive_command</span></a><span class="plain-syntax">),</span>
|
||||
<span class="plain-syntax"> &(</span><a href="3-ps.html#SP4" class="function-link"><span class="function-syntax">ParsingStages::receive_bplus</span></a><span class="plain-syntax">),</span>
|
||||
<span class="plain-syntax"> &(</span><a href="3-ps.html#SP5" class="function-link"><span class="function-syntax">ParsingStages::line_marker</span></a><span class="plain-syntax">),</span>
|
||||
<span class="plain-syntax"> &(</span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::kit_error</span></a><span class="plain-syntax">),</span>
|
||||
<span class="plain-syntax"> &(</span><span class="identifier-syntax">I6Errors::issue</span><span class="plain-syntax">),</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">step</span><span class="plain-syntax">-></span><span class="element-syntax">ephemera</span><span class="plain-syntax">.</span><span class="element-syntax">the_kit</span><span class="plain-syntax">, &</span><span class="identifier-syntax">state</span><span class="plain-syntax">);</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-ps.html#SP2">§2</a>, <a href="3-ps.html#SP2_2">§2.2</a>.</li></ul>
|
||||
|
@ -407,71 +407,25 @@ state being carried in the docket.
|
|||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ParsingStages::splat</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">ParsingStages::splat</span></span>:<br/><a href="3-ps.html#SP6">§6</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="identifier-syntax">simple_tangle_docket</span><span class="plain-syntax"> *</span><span class="identifier-syntax">docket</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">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">) > </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">rpi_docket_state</span><span class="plain-syntax"> *</span><span class="identifier-syntax">state</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">rpi_docket_state</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">docket</span><span class="plain-syntax">-></span><span class="identifier-syntax">state</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">I6Errors::set_current_location</span><span class="plain-syntax">(</span><span class="identifier-syntax">state</span><span class="plain-syntax">-></span><span class="element-syntax">provenance</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">A</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-ps.html#SP7_1" class="named-paragraph-link"><span class="named-paragraph">Find annotation, if any</span><span class="named-paragraph-number">7.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">I6_dir</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-ps.html#SP7_2" class="named-paragraph-link"><span class="named-paragraph">Find directive</span><span class="named-paragraph-number">7.2</span></a></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">I6_dir</span><span class="plain-syntax"> != </span><span class="identifier-syntax">WHITESPACE_PLM</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">rpi_docket_state</span><span class="plain-syntax"> *</span><span class="identifier-syntax">state</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">rpi_docket_state</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">docket</span><span class="plain-syntax">-></span><span class="identifier-syntax">state</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_bookmark</span><span class="plain-syntax"> *</span><span class="identifier-syntax">IBM</span><span class="plain-syntax"> = </span><span class="identifier-syntax">state</span><span class="plain-syntax">-></span><span class="element-syntax">assimilation_point</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="character-syntax">'\n'</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</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">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">lc</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</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">Provenance::is_somewhere</span><span class="plain-syntax">(</span><span class="identifier-syntax">state</span><span class="plain-syntax">-></span><span class="element-syntax">provenance</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">F</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Provenance::get_filename</span><span class="plain-syntax">(</span><span class="identifier-syntax">state</span><span class="plain-syntax">-></span><span class="element-syntax">provenance</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">lc</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="identifier-syntax">Provenance::get_line</span><span class="plain-syntax">(</span><span class="identifier-syntax">state</span><span class="plain-syntax">-></span><span class="element-syntax">provenance</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::guard</span><span class="plain-syntax">(</span><span class="identifier-syntax">SplatInstruction::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="identifier-syntax">I6_dir</span><span class="plain-syntax">, </span><span class="identifier-syntax">A</span><span class="plain-syntax">, </span><span class="identifier-syntax">state</span><span class="plain-syntax">-></span><span class="element-syntax">namespace</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">lc</span><span class="plain-syntax">, (</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) (</span><span class="identifier-syntax">InterBookmark::baseline</span><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">) + </span><span class="constant-syntax">1</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">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">A</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">I6_dir</span><span class="plain-syntax"> != </span><span class="identifier-syntax">WHITESPACE_PLM</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-ps.html#SP7_3" class="named-paragraph-link"><span class="named-paragraph">Splat the directive</span><span class="named-paragraph-number">7.3</span></a></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">A</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">I6_annotation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">IA</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I6Annotations::parse</span><span class="plain-syntax">(</span><span class="identifier-syntax">A</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">IA</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">IA</span><span class="plain-syntax">-></span><span class="element-syntax">identifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"namespace"</span><span class="plain-syntax">))) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">rpi_docket_state</span><span class="plain-syntax"> *</span><span class="identifier-syntax">state</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">rpi_docket_state</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">docket</span><span class="plain-syntax">-></span><span class="identifier-syntax">state</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::clear</span><span class="plain-syntax">(</span><span class="identifier-syntax">state</span><span class="plain-syntax">-></span><span class="element-syntax">namespace</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">private</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NOT_APPLICABLE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">I6_annotation_term</span><span class="plain-syntax"> *</span><span class="identifier-syntax">term</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">term</span><span class="plain-syntax">, </span><span class="identifier-syntax">I6_annotation_term</span><span class="plain-syntax">, </span><span class="identifier-syntax">IA</span><span class="plain-syntax">-></span><span class="identifier-syntax">terms</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">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">term</span><span class="plain-syntax">-></span><span class="identifier-syntax">key</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"_"</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">state</span><span class="plain-syntax">-></span><span class="element-syntax">namespace</span><span class="plain-syntax">, </span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">term</span><span class="plain-syntax">-></span><span class="identifier-syntax">value</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">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">term</span><span class="plain-syntax">-></span><span class="identifier-syntax">key</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"access"</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">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">term</span><span class="plain-syntax">-></span><span class="identifier-syntax">value</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"private"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">private</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">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">term</span><span class="plain-syntax">-></span><span class="identifier-syntax">value</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"public"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">private</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</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-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::kit_error</span></a><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"the 'access' must be 'private' or 'public', not '%S'"</span><span class="plain-syntax">, </span><span class="identifier-syntax">term</span><span class="plain-syntax">-></span><span class="identifier-syntax">value</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-ps.html#SP7_4" class="named-paragraph-link"><span class="named-paragraph">Respond to a change of namespace</span><span class="named-paragraph-number">7.4</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::kit_error</span></a><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"the +namespace annotation does not take the term '%S'"</span><span class="plain-syntax">, </span><span class="identifier-syntax">term</span><span class="plain-syntax">-></span><span class="identifier-syntax">key</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</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">bad_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</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">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax"><Str::len(state-></span><span class="element-syntax">namespace</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">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">state</span><span class="plain-syntax">-></span><span class="element-syntax">namespace</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">i</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</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">Characters::isalpha</span><span class="plain-syntax">(</span><span class="identifier-syntax">c</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="identifier-syntax">bad_name</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">else</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">Characters::isalnum</span><span class="plain-syntax">(</span><span class="identifier-syntax">c</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> != </span><span class="character-syntax">'_'</span><span class="plain-syntax">)) </span><span class="identifier-syntax">bad_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</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">bad_name</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::kit_error</span></a><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"a namespace name should begin with a letter and contain "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"only alphanumeric characters or '_'"</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">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">state</span><span class="plain-syntax">-></span><span class="element-syntax">namespace</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::kit_error</span></a><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"use '+namespace(main);' to return to the global namespace"</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">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">state</span><span class="plain-syntax">-></span><span class="element-syntax">namespace</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"main"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">Str::clear</span><span class="plain-syntax">(</span><span class="identifier-syntax">state</span><span class="plain-syntax">-></span><span class="element-syntax">namespace</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">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">state</span><span class="plain-syntax">-></span><span class="element-syntax">namespace</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"replaced"</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::kit_error</span></a><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"the namespace 'replaced' is reserved, and cannot be used directly"</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">Str::clear</span><span class="plain-syntax">(</span><span class="identifier-syntax">state</span><span class="plain-syntax">-></span><span class="element-syntax">namespace</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">private</span><span class="plain-syntax"> == </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">) </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">state</span><span class="plain-syntax">-></span><span class="element-syntax">namespace</span><span class="plain-syntax">, </span><span class="character-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">private</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">state</span><span class="plain-syntax">-></span><span class="element-syntax">namespace</span><span class="plain-syntax">, </span><span class="character-syntax">'+'</span><span class="plain-syntax">);</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">docket</span><span class="plain-syntax">-></span><span class="identifier-syntax">error_callback</span><span class="plain-syntax">))(</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"this annotation seems not to apply to any directive: '%S'"</span><span class="plain-syntax">, </span><span class="identifier-syntax">A</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">I6Errors::issue</span><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"the annotation '%S' seems not to apply to any directive: "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"only '+namespace' can do that"</span><span class="plain-syntax">, </span><span class="identifier-syntax">A</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">I6Errors::clear_current_location</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::clear</span><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">A</span><span class="plain-syntax">)</span>
|
||||
|
@ -484,8 +438,7 @@ state being carried in the docket.
|
|||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">verdict</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I6Annotations::check</span><span class="plain-syntax">(</span><span class="identifier-syntax">R</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">verdict</span><span class="plain-syntax"> == -1) {</span>
|
||||
<span class="plain-syntax"> (*(</span><span class="identifier-syntax">docket</span><span class="plain-syntax">-></span><span class="identifier-syntax">error_callback</span><span class="plain-syntax">))(</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"this Inform 6 annotation is malformed: '%S'"</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">I6Errors::issue</span><span class="plain-syntax">(</span><span class="string-syntax">"this +annotation is malformed: '%S'"</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</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">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax"><</span><span class="identifier-syntax">verdict</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">A</span><span class="plain-syntax">, </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">R</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">Str::trim_white_space</span><span class="plain-syntax">(</span><span class="identifier-syntax">A</span><span class="plain-syntax">);</span>
|
||||
|
@ -506,13 +459,13 @@ the directive type as 0.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">match_results</span><span class="plain-syntax"> </span><span class="identifier-syntax">mr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Regexp::create_mr</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">Regexp::match</span><span class="plain-syntax">(&</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">" *(%[) *(%c*);%c*"</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">I6_dir</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ROUTINE_PLM</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">Regexp::match</span><span class="plain-syntax">(&</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">" *(%C+) *(%c*);%c*"</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">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">I</span><span class="string-syntax">"#ifdef"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">I6_dir</span><span class="plain-syntax"> = </span><span class="identifier-syntax">IFDEF_PLM</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">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">I</span><span class="string-syntax">"#ifndef"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">I6_dir</span><span class="plain-syntax"> = </span><span class="identifier-syntax">IFNDEF_PLM</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">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">I</span><span class="string-syntax">"#iftrue"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">I6_dir</span><span class="plain-syntax"> = </span><span class="identifier-syntax">IFTRUE_PLM</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">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">I</span><span class="string-syntax">"#ifnot"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">I6_dir</span><span class="plain-syntax"> = </span><span class="identifier-syntax">IFNOT_PLM</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">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">I</span><span class="string-syntax">"#endif"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">I6_dir</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ENDIF_PLM</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">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">I</span><span class="string-syntax">"#stub"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">I6_dir</span><span class="plain-syntax"> = </span><span class="identifier-syntax">STUB_PLM</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">Regexp::match</span><span class="plain-syntax">(&</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">" *#*(%C+) *(%c*);%c*"</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">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">I</span><span class="string-syntax">"Ifdef"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">I6_dir</span><span class="plain-syntax"> = </span><span class="identifier-syntax">IFDEF_PLM</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">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">I</span><span class="string-syntax">"Ifndef"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">I6_dir</span><span class="plain-syntax"> = </span><span class="identifier-syntax">IFNDEF_PLM</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">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">I</span><span class="string-syntax">"Iftrue"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">I6_dir</span><span class="plain-syntax"> = </span><span class="identifier-syntax">IFTRUE_PLM</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">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">I</span><span class="string-syntax">"Ifnot"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">I6_dir</span><span class="plain-syntax"> = </span><span class="identifier-syntax">IFNOT_PLM</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">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">I</span><span class="string-syntax">"Endif"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">I6_dir</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ENDIF_PLM</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">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">I</span><span class="string-syntax">"Stub"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">I6_dir</span><span class="plain-syntax"> = </span><span class="identifier-syntax">STUB_PLM</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">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">I</span><span class="string-syntax">"Constant"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">I6_dir</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CONSTANT_PLM</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">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">I</span><span class="string-syntax">"Global"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">I6_dir</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GLOBAL_PLM</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">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">I</span><span class="string-syntax">"Array"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">I6_dir</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ARRAY_PLM</span><span class="plain-syntax">;</span>
|
||||
|
@ -531,12 +484,114 @@ the directive type as 0.
|
|||
<span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get</span><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">) != </span><span class="character-syntax">';'</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">I6_dir</span><span class="plain-syntax"> = </span><span class="identifier-syntax">MYSTERY_PLM</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">I6_dir</span><span class="plain-syntax"> == </span><span class="identifier-syntax">MYSTERY_PLM</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> (*(</span><span class="identifier-syntax">docket</span><span class="plain-syntax">-></span><span class="identifier-syntax">error_callback</span><span class="plain-syntax">))(</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"this Inform 6 directive is not supported in kits or '(-' inclusions: '%S'"</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</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">I6_dir</span><span class="plain-syntax"> == </span><span class="identifier-syntax">MYSTERY_PLM</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">known</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</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">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">I</span><span class="string-syntax">"Ifv3"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">known</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">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">I</span><span class="string-syntax">"Ifv5"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">known</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">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">I</span><span class="string-syntax">"Iffalse"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">known</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">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">I</span><span class="string-syntax">"Abbreviate"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">known</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">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">I</span><span class="string-syntax">"Dictionary"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">known</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">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">I</span><span class="string-syntax">"Import"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">known</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">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">I</span><span class="string-syntax">"Link"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">known</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">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">I</span><span class="string-syntax">"Lowstring"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">known</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">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">I</span><span class="string-syntax">"Origsource"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">known</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">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">I</span><span class="string-syntax">"Replace"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">known</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">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">I</span><span class="string-syntax">"Switches"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">known</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">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">I</span><span class="string-syntax">"Trace"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">known</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">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">I</span><span class="string-syntax">"Undef"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">known</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">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">I</span><span class="string-syntax">"Version"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">known</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">known</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">I6Errors::issue</span><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"this Inform 6 directive is not supported in kits or '(-' inclusions: '%S' "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"(only #Ifdef, #Ifndef, #Iftrue, #Ifnot, #Endif, #Stub, Constant, Global, "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"Array, Attribute, Property, Verb, Fake_action, Object, Default are "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"supported)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</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">I6Errors::issue</span><span class="plain-syntax">(</span><span class="string-syntax">"this is not an Inform 6 directive"</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Regexp::dispose_of</span><span class="plain-syntax">(&</span><span class="identifier-syntax">mr</span><span class="plain-syntax">);</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-ps.html#SP7">§7</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP7_3" class="paragraph-anchor"></a><b>§7.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Splat the directive</span><span class="named-paragraph-number">7.3</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_bookmark</span><span class="plain-syntax"> *</span><span class="identifier-syntax">IBM</span><span class="plain-syntax"> = </span><span class="identifier-syntax">state</span><span class="plain-syntax">-></span><span class="identifier-syntax">assimilation_point</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="character-syntax">'\n'</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</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">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">lc</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</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">Provenance::is_somewhere</span><span class="plain-syntax">(</span><span class="identifier-syntax">state</span><span class="plain-syntax">-></span><span class="element-syntax">provenance</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">F</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Provenance::get_filename</span><span class="plain-syntax">(</span><span class="identifier-syntax">state</span><span class="plain-syntax">-></span><span class="element-syntax">provenance</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">lc</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="identifier-syntax">Provenance::get_line</span><span class="plain-syntax">(</span><span class="identifier-syntax">state</span><span class="plain-syntax">-></span><span class="element-syntax">provenance</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::guard</span><span class="plain-syntax">(</span><span class="identifier-syntax">SplatInstruction::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="identifier-syntax">I6_dir</span><span class="plain-syntax">, </span><span class="identifier-syntax">A</span><span class="plain-syntax">, </span><span class="identifier-syntax">state</span><span class="plain-syntax">-></span><span class="element-syntax">namespace</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">lc</span><span class="plain-syntax">, (</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) (</span><span class="identifier-syntax">InterBookmark::baseline</span><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">) + </span><span class="constant-syntax">1</span><span class="plain-syntax">), </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">));</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-ps.html#SP7">§7</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP7_4" class="paragraph-anchor"></a><b>§7.4. </b>So the following picks up <span class="extract"><span class="extract-syntax">+namespace(Whatever)</span></span> annotations, which do not
|
||||
apply to any directive.
|
||||
</p>
|
||||
|
||||
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Respond to a change of namespace</span><span class="named-paragraph-number">7.4</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::clear</span><span class="plain-syntax">(</span><span class="identifier-syntax">state</span><span class="plain-syntax">-></span><span class="element-syntax">namespace</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">private</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NOT_APPLICABLE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">I6_annotation_term</span><span class="plain-syntax"> *</span><span class="identifier-syntax">term</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">term</span><span class="plain-syntax">, </span><span class="identifier-syntax">I6_annotation_term</span><span class="plain-syntax">, </span><span class="identifier-syntax">IA</span><span class="plain-syntax">-></span><span class="identifier-syntax">terms</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">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">term</span><span class="plain-syntax">-></span><span class="identifier-syntax">key</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"_"</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">state</span><span class="plain-syntax">-></span><span class="element-syntax">namespace</span><span class="plain-syntax">, </span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">term</span><span class="plain-syntax">-></span><span class="identifier-syntax">value</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">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">term</span><span class="plain-syntax">-></span><span class="identifier-syntax">key</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"access"</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">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">term</span><span class="plain-syntax">-></span><span class="identifier-syntax">value</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"private"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">private</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">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">term</span><span class="plain-syntax">-></span><span class="identifier-syntax">value</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"public"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">private</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</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">I6Errors::issue</span><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"in a +namespace annotation, the 'access' must be 'private' or "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"'public', not '%S'"</span><span class="plain-syntax">, </span><span class="identifier-syntax">term</span><span class="plain-syntax">-></span><span class="identifier-syntax">value</span><span class="plain-syntax">);</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">I6Errors::issue</span><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"the +namespace annotation does not take the term '%S'"</span><span class="plain-syntax">, </span><span class="identifier-syntax">term</span><span class="plain-syntax">-></span><span class="identifier-syntax">key</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-ps.html#SP7_4_1" class="named-paragraph-link"><span class="named-paragraph">Vet the new namespace name</span><span class="named-paragraph-number">7.4.1</span></a></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">private</span><span class="plain-syntax"> == </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">) </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">state</span><span class="plain-syntax">-></span><span class="element-syntax">namespace</span><span class="plain-syntax">, </span><span class="character-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">private</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">state</span><span class="plain-syntax">-></span><span class="element-syntax">namespace</span><span class="plain-syntax">, </span><span class="character-syntax">'+'</span><span class="plain-syntax">);</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-ps.html#SP7">§7</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP7_4_1" class="paragraph-anchor"></a><b>§7.4.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Vet the new namespace name</span><span class="named-paragraph-number">7.4.1</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">bad_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</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">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax"><Str::len(state-></span><span class="element-syntax">namespace</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">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">state</span><span class="plain-syntax">-></span><span class="element-syntax">namespace</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">i</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</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">Characters::isalpha</span><span class="plain-syntax">(</span><span class="identifier-syntax">c</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="identifier-syntax">bad_name</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">else</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">Characters::isalnum</span><span class="plain-syntax">(</span><span class="identifier-syntax">c</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> != </span><span class="character-syntax">'_'</span><span class="plain-syntax">)) </span><span class="identifier-syntax">bad_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</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">bad_name</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">I6Errors::issue</span><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"the namespace '%S' is not allowed: namespace names should begin "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"with a letter and contain only alphanumeric characters or '_'"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">state</span><span class="plain-syntax">-></span><span class="element-syntax">namespace</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">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">state</span><span class="plain-syntax">-></span><span class="element-syntax">namespace</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">I6Errors::issue</span><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"'+namespace()' is not allowed: use '+namespace(main);' to return "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"to the global namespace"</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">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">state</span><span class="plain-syntax">-></span><span class="element-syntax">namespace</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"main"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">Str::clear</span><span class="plain-syntax">(</span><span class="identifier-syntax">state</span><span class="plain-syntax">-></span><span class="element-syntax">namespace</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">Str::eq_insensitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">state</span><span class="plain-syntax">-></span><span class="element-syntax">namespace</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"main"</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">I6Errors::issue</span><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"'+namespace(...)' names are case-sensitive: use 'main', not '%S', "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"to return to the global namespace"</span><span class="plain-syntax">, </span><span class="identifier-syntax">state</span><span class="plain-syntax">-></span><span class="element-syntax">namespace</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">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">state</span><span class="plain-syntax">-></span><span class="element-syntax">namespace</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"replaced"</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">I6Errors::issue</span><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"the namespace 'replaced' is reserved, and cannot be used directly"</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">Str::clear</span><span class="plain-syntax">(</span><span class="identifier-syntax">state</span><span class="plain-syntax">-></span><span class="element-syntax">namespace</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-ps.html#SP7_4">§7.4</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>§8. </b>And that's it: the result of these stages is just to break the I6T source they
|
||||
found up into individual directives, and put them into the tree as <span class="extract"><span class="extract-syntax">SPLAT_IST</span></span> nodes.
|
||||
No effort has been made yet to see what directives they are. Subsequent stages
|
||||
|
|
|
@ -139,8 +139,9 @@ a nesting depth of about 3, so the following maximum is plenty:
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">state</span><span class="plain-syntax">.</span><span class="identifier-syntax">cc_sp</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">InterTree::traverse</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><a href="3-rccs.html#SP3" class="function-link"><span class="function-syntax">ResolveConditionalsStage::visitor</span></a><span class="plain-syntax">, &</span><span class="identifier-syntax">state</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="constant-syntax">0</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">state</span><span class="plain-syntax">.</span><span class="element-syntax">cc_sp</span><span class="plain-syntax"> != </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::kit_error</span></a><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">I6Errors::issue</span><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"conditional compilation wrongly structured: not enough #endif"</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">I6Errors::clear_current_location</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure rcc_state is private to this section.</li></ul>
|
||||
|
@ -155,6 +156,7 @@ is written such that this can safely be done.)
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">compile_this</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">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="function-syntax"><state-></span><span class="element-syntax">cc_sp</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">state</span><span class="plain-syntax">-></span><span class="element-syntax">cc_stack</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">] == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="identifier-syntax">compile_this</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</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">Inode::is</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">SPLAT_IST</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">I6Errors::set_current_location_near_splat</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">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax"> = </span><span class="identifier-syntax">SplatInstruction::splatter</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</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">SplatInstruction::plm</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</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_PLM:</span>
|
||||
|
@ -268,17 +270,55 @@ Inform kits use this only to test <span class="extract"><span class="extract-syn
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">match_results</span><span class="plain-syntax"> </span><span class="identifier-syntax">mr2</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Regexp::create_mr</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">Regexp::match</span><span class="plain-syntax">(&</span><span class="identifier-syntax">mr2</span><span class="plain-syntax">, </span><span class="identifier-syntax">cond</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">" *(%C+?) *== *(%d+) *"</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">identifier</span><span class="plain-syntax"> = </span><span class="identifier-syntax">mr2</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0];</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">symbol</span><span class="plain-syntax"> =</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LargeScale::architectural_symbol</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">identifier</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">symbol</span><span class="plain-syntax"> = </span><span class="identifier-syntax">LargeScale::architectural_symbol</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">identifier</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">symbol</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">V</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InterSymbol::evaluate_to_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">symbol</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">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::atoi</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr2</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[1], </span><span class="constant-syntax">0</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">V</span><span class="plain-syntax"> >= </span><span class="constant-syntax">0</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">V</span><span class="plain-syntax"> == </span><span class="identifier-syntax">W</span><span class="plain-syntax">)) </span><span class="identifier-syntax">result</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">result</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</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">Regexp::match</span><span class="plain-syntax">(&</span><span class="identifier-syntax">mr2</span><span class="plain-syntax">, </span><span class="identifier-syntax">cond</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">" *(%C+?) *>= *(%d+) *"</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">identifier</span><span class="plain-syntax"> = </span><span class="identifier-syntax">mr2</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0];</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">symbol</span><span class="plain-syntax"> = </span><span class="identifier-syntax">LargeScale::architectural_symbol</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">identifier</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">symbol</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">V</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InterSymbol::evaluate_to_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">symbol</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">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::atoi</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr2</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[1], </span><span class="constant-syntax">0</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">V</span><span class="plain-syntax"> >= </span><span class="constant-syntax">0</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">V</span><span class="plain-syntax"> >= </span><span class="identifier-syntax">W</span><span class="plain-syntax">)) </span><span class="identifier-syntax">result</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">result</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</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">Regexp::match</span><span class="plain-syntax">(&</span><span class="identifier-syntax">mr2</span><span class="plain-syntax">, </span><span class="identifier-syntax">cond</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">" *(%C+?) *> *(%d+) *"</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">identifier</span><span class="plain-syntax"> = </span><span class="identifier-syntax">mr2</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0];</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">symbol</span><span class="plain-syntax"> = </span><span class="identifier-syntax">LargeScale::architectural_symbol</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">identifier</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">symbol</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">V</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InterSymbol::evaluate_to_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">symbol</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">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::atoi</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr2</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[1], </span><span class="constant-syntax">0</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">V</span><span class="plain-syntax"> >= </span><span class="constant-syntax">0</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">V</span><span class="plain-syntax"> > </span><span class="identifier-syntax">W</span><span class="plain-syntax">)) </span><span class="identifier-syntax">result</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">result</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</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">Regexp::match</span><span class="plain-syntax">(&</span><span class="identifier-syntax">mr2</span><span class="plain-syntax">, </span><span class="identifier-syntax">cond</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">" *(%C+?) *<= *(%d+) *"</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">identifier</span><span class="plain-syntax"> = </span><span class="identifier-syntax">mr2</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0];</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">symbol</span><span class="plain-syntax"> = </span><span class="identifier-syntax">LargeScale::architectural_symbol</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">identifier</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">symbol</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">V</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InterSymbol::evaluate_to_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">symbol</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">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::atoi</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr2</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[1], </span><span class="constant-syntax">0</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">V</span><span class="plain-syntax"> >= </span><span class="constant-syntax">0</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">V</span><span class="plain-syntax"> <= </span><span class="identifier-syntax">W</span><span class="plain-syntax">)) </span><span class="identifier-syntax">result</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">result</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</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">Regexp::match</span><span class="plain-syntax">(&</span><span class="identifier-syntax">mr2</span><span class="plain-syntax">, </span><span class="identifier-syntax">cond</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">" *(%C+?) *< *(%d+) *"</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">identifier</span><span class="plain-syntax"> = </span><span class="identifier-syntax">mr2</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0];</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">symbol</span><span class="plain-syntax"> = </span><span class="identifier-syntax">LargeScale::architectural_symbol</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">identifier</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">symbol</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">V</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InterSymbol::evaluate_to_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">symbol</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">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::atoi</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr2</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[1], </span><span class="constant-syntax">0</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">V</span><span class="plain-syntax"> >= </span><span class="constant-syntax">0</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">V</span><span class="plain-syntax"> < </span><span class="identifier-syntax">W</span><span class="plain-syntax">)) </span><span class="identifier-syntax">result</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">result</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</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">result</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NOT_APPLICABLE</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::kit_error</span></a><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"conditional compilation is too difficult: #iftrue on %S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">cond</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">I6Errors::issue</span><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"conditional compilation is too difficult: #iftrue on '%S' "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"(can only test SYMBOL == DECIMALVALUE, or >, <, >=, <=, where "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"the DECIMALVALUE is non-negative, and even then only for a few "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"symbols, of which 'WORDSIZE' is the most useful)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">cond</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">result</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</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">RESOLVING_CONDITIONAL_COMPILATION</span><span class="plain-syntax">, </span><span class="string-syntax">"Must decide if %S: "</span><span class="plain-syntax">, </span><span class="identifier-syntax">cond</span><span class="plain-syntax">);</span>
|
||||
|
@ -295,7 +335,7 @@ Inform kits use this only to test <span class="extract"><span class="extract-syn
|
|||
<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">state</span><span class="plain-syntax">-></span><span class="element-syntax">cc_sp</span><span class="plain-syntax"> >= </span><span class="constant-syntax">MAX_CC_STACK_SIZE</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">state</span><span class="plain-syntax">-></span><span class="element-syntax">cc_sp</span><span class="plain-syntax"> = </span><span class="constant-syntax">MAX_CC_STACK_SIZE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::kit_error</span></a><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">I6Errors::issue</span><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"conditional compilation wrongly structured: too many nested #ifdef or #iftrue"</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">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">state</span><span class="plain-syntax">-></span><span class="element-syntax">cc_stack</span><span class="plain-syntax">[</span><span class="identifier-syntax">state</span><span class="plain-syntax">-></span><span class="element-syntax">cc_sp</span><span class="plain-syntax">++] = </span><span class="identifier-syntax">result</span><span class="plain-syntax">;</span>
|
||||
|
@ -308,7 +348,7 @@ Inform kits use this only to test <span class="extract"><span class="extract-syn
|
|||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">RESOLVING_CONDITIONAL_COMPILATION</span><span class="plain-syntax">, </span><span class="string-syntax">"ifnot\n"</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">state</span><span class="plain-syntax">-></span><span class="element-syntax">cc_sp</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::kit_error</span></a><span class="plain-syntax">(</span><span class="string-syntax">"conditional compilation wrongly structured: #ifnot at top level"</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">I6Errors::issue</span><span class="plain-syntax">(</span><span class="string-syntax">"conditional compilation wrongly structured: #ifnot at top level"</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">else</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">state</span><span class="plain-syntax">-></span><span class="element-syntax">cc_stack</span><span class="plain-syntax">[</span><span class="identifier-syntax">state</span><span class="plain-syntax">-></span><span class="element-syntax">cc_sp</span><span class="plain-syntax">-1] = (</span><span class="identifier-syntax">state</span><span class="plain-syntax">-></span><span class="element-syntax">cc_stack</span><span class="plain-syntax">[</span><span class="identifier-syntax">state</span><span class="plain-syntax">-></span><span class="element-syntax">cc_sp</span><span class="plain-syntax">-1])?</span><span class="identifier-syntax">FALSE:TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">compile_this</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
|
@ -323,7 +363,7 @@ Inform kits use this only to test <span class="extract"><span class="extract-syn
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">state</span><span class="plain-syntax">-></span><span class="identifier-syntax">cc_sp</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">state</span><span class="plain-syntax">-></span><span class="element-syntax">cc_sp</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">state</span><span class="plain-syntax">-></span><span class="element-syntax">cc_sp</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pe.html#SP3" class="function-link"><span class="function-syntax">PipelineErrors::kit_error</span></a><span class="plain-syntax">(</span><span class="string-syntax">"conditional compilation wrongly structured: too many #endif"</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">I6Errors::issue</span><span class="plain-syntax">(</span><span class="string-syntax">"conditional compilation wrongly structured: too many #endif"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">compile_this</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
|
|
|
@ -154,14 +154,14 @@ should be, so the effect is the same.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">Architectures::to_codename</span><span class="plain-syntax">(</span><span class="identifier-syntax">A</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">requirements_list</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">attachment_instruction</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PipelineErrors::reset_errors</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">I6Errors::reset_count</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">RunningPipelines::run</span><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">SS</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">-></span><span class="element-syntax">associated_copy</span><span class="plain-syntax">-></span><span class="element-syntax">location_if_path</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">requirements_list</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">-></span><span class="element-syntax">for_vm</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PipelineModule::set_architecture_to</span><span class="plain-syntax">(</span><span class="identifier-syntax">saved_A</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">SourceProblems::kit_notification</span><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</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">endif</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> (</span><span class="identifier-syntax">PipelineErrors::errors_occurred</span><span class="plain-syntax">())?</span><span class="identifier-syntax">FALSE:TRUE</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">I6Errors::errors_occurred</span><span class="plain-syntax">())?</span><span class="identifier-syntax">FALSE:TRUE</span><span class="plain-syntax">;</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">Errors::nowhere</span><span class="plain-syntax">(</span><span class="string-syntax">"build-kit pipeline could not be parsed"</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">FALSE</span><span class="plain-syntax">;</span>
|
||||
|
|
|
@ -94,14 +94,14 @@ int InterSkill::build_kit_internally(build_skill *skill, build_step *S,
|
|||
Architectures::to_codename(A));
|
||||
#endif
|
||||
linked_list *requirements_list = NEW_LINKED_LIST(attachment_instruction);
|
||||
PipelineErrors::reset_errors();
|
||||
I6Errors::reset_count();
|
||||
RunningPipelines::run(NULL, SS, NULL, S->associated_copy->location_if_path,
|
||||
requirements_list, S->for_vm, FALSE);
|
||||
PipelineModule::set_architecture_to(saved_A);
|
||||
#ifdef CORE_MODULE
|
||||
SourceProblems::kit_notification(NULL, NULL);
|
||||
#endif
|
||||
return (PipelineErrors::errors_occurred())?FALSE:TRUE;
|
||||
return (I6Errors::errors_occurred())?FALSE:TRUE;
|
||||
} else {
|
||||
Errors::nowhere("build-kit pipeline could not be parsed");
|
||||
return FALSE;
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
Total memory consumption was 123104K = 120 MB
|
||||
Total memory consumption was 123110K = 120 MB
|
||||
|
||||
---- was used for 2061850 objects, in 367513 frames in 0 x 800K = 0K = 0 MB:
|
||||
|
||||
33.1% inter_tree_node_array 58 x 8192 = 475136 objects, 41813824 bytes
|
||||
20.9% text_stream_array 4678 x 100 = 467800 objects, 26346496 bytes
|
||||
20.8% text_stream_array 4678 x 100 = 467800 objects, 26346496 bytes
|
||||
19.7% linked_list 44435 objects, 24883600 bytes
|
||||
11.2% inter_symbol_array 133 x 1024 = 136192 objects, 14168224 bytes
|
||||
10.6% inter_error_stash_array 102 x 1024 = 104448 objects, 13372608 bytes
|
||||
|
@ -248,7 +248,7 @@ Total memory consumption was 123104K = 120 MB
|
|||
|
||||
100.0% was used for memory not allocated for objects:
|
||||
|
||||
57.5% text stream storage 72515996 bytes in 487440 claims
|
||||
57.5% text stream storage 72522576 bytes in 487482 claims
|
||||
4.2% dictionary storage 5315584 bytes in 7623 claims
|
||||
---- sorting 2720 bytes in 387 claims
|
||||
5.7% source text 7200000 bytes in 3 claims
|
||||
|
|
|
@ -1,34 +1,32 @@
|
|||
100.0% in inform7 run
|
||||
70.8% in compilation to Inter
|
||||
50.1% in //Sequence::undertake_queued_tasks//
|
||||
4.8% in //MajorNodes::pre_pass//
|
||||
3.4% in //MajorNodes::pass_1//
|
||||
1.9% in //ImperativeDefinitions::assess_all//
|
||||
1.5% in //RTKindConstructors::compile//
|
||||
1.5% in //RTPhrasebook::compile_entries//
|
||||
1.1% in //Sequence::lint_inter//
|
||||
0.5% in //MajorNodes::pass_2//
|
||||
0.5% in //Sequence::undertake_queued_tasks//
|
||||
0.5% in //Sequence::undertake_queued_tasks//
|
||||
0.5% in //World::stage_V//
|
||||
0.3% in //ImperativeDefinitions::compile_first_block//
|
||||
0.1% in //Closures::compile_closures//
|
||||
0.1% in //CompletionModule::compile//
|
||||
0.1% in //InferenceSubjects::emit_all//
|
||||
0.1% in //RTKindConstructors::compile_permissions//
|
||||
0.1% in //Task::make_built_in_kind_constructors//
|
||||
0.1% in //World::stages_II_and_III//
|
||||
2.3% not specifically accounted for
|
||||
25.8% in running Inter pipeline
|
||||
9.8% in step 14/15: generate inform6 -> auto.inf
|
||||
5.7% in step 5/15: load-binary-kits
|
||||
5.2% in step 6/15: make-synoptic-module
|
||||
1.7% in step 9/15: make-identifiers-unique
|
||||
0.3% in step 12/15: eliminate-redundant-operations
|
||||
0.3% in step 4/15: compile-splats
|
||||
0.3% in step 7/15: shorten-wiring
|
||||
0.3% in step 8/15: detect-indirect-calls
|
||||
0.1% in step 11/15: eliminate-redundant-labels
|
||||
1.5% not specifically accounted for
|
||||
2.8% in supervisor
|
||||
0.4% not specifically accounted for
|
||||
70.5% in compilation to Inter
|
||||
49.7% in //Sequence::undertake_queued_tasks//
|
||||
4.9% in //MajorNodes::pre_pass//
|
||||
3.5% in //MajorNodes::pass_1//
|
||||
1.8% in //ImperativeDefinitions::assess_all//
|
||||
1.4% in //RTKindConstructors::compile//
|
||||
1.4% in //RTPhrasebook::compile_entries//
|
||||
1.0% in //Sequence::lint_inter//
|
||||
0.6% in //World::stage_V//
|
||||
0.4% in //ImperativeDefinitions::compile_first_block//
|
||||
0.4% in //MajorNodes::pass_2//
|
||||
0.4% in //Sequence::undertake_queued_tasks//
|
||||
0.4% in //Sequence::undertake_queued_tasks//
|
||||
0.2% in //CompletionModule::compile//
|
||||
0.2% in //InferenceSubjects::emit_all//
|
||||
0.2% in //RTKindConstructors::compile_permissions//
|
||||
0.2% in //Task::make_built_in_kind_constructors//
|
||||
3.3% not specifically accounted for
|
||||
25.9% in running Inter pipeline
|
||||
9.9% in step 14/15: generate inform6 -> auto.inf
|
||||
5.8% in step 5/15: load-binary-kits
|
||||
5.3% in step 6/15: make-synoptic-module
|
||||
1.8% in step 9/15: make-identifiers-unique
|
||||
0.4% in step 12/15: eliminate-redundant-operations
|
||||
0.4% in step 4/15: compile-splats
|
||||
0.4% in step 7/15: shorten-wiring
|
||||
0.2% in step 11/15: eliminate-redundant-labels
|
||||
0.2% in step 8/15: detect-indirect-calls
|
||||
1.3% not specifically accounted for
|
||||
3.1% in supervisor
|
||||
0.5% not specifically accounted for
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"is": {
|
||||
"type": "kit",
|
||||
"title": "BasicInformExtrasKit",
|
||||
"version": "10.2.0-beta+6W39"
|
||||
"version": "10.2.0-beta+6W40"
|
||||
},
|
||||
"kit-details": {
|
||||
"has-priority": 1
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"is": {
|
||||
"type": "kit",
|
||||
"title": "BasicInformKit",
|
||||
"version": "10.2.0-beta+6W39"
|
||||
"version": "10.2.0-beta+6W40"
|
||||
},
|
||||
"needs": [ {
|
||||
"unless": {
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"is": {
|
||||
"type": "kit",
|
||||
"title": "CommandParserKit",
|
||||
"version": "10.2.0-beta+6W39"
|
||||
"version": "10.2.0-beta+6W40"
|
||||
},
|
||||
"needs": [ {
|
||||
"need": {
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"is": {
|
||||
"type": "kit",
|
||||
"title": "EnglishLanguageKit",
|
||||
"version": "10.2.0-beta+6W39"
|
||||
"version": "10.2.0-beta+6W40"
|
||||
},
|
||||
"needs": [ {
|
||||
"need": {
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"is": {
|
||||
"type": "kit",
|
||||
"title": "WorldModelKit",
|
||||
"version": "10.2.0-beta+6W39"
|
||||
"version": "10.2.0-beta+6W40"
|
||||
},
|
||||
"needs": [ {
|
||||
"need": {
|
||||
|
|
125
inform7/Tests/Test Problems/PM_I6SyntaxError.txt
Normal file
125
inform7/Tests/Test Problems/PM_I6SyntaxError.txt
Normal file
|
@ -0,0 +1,125 @@
|
|||
"Disasterama"
|
||||
|
||||
The Scene of the Crime is a room.
|
||||
|
||||
Include (-
|
||||
|
||||
Array supposed string "Banana";
|
||||
Array supposed2 struct { 2, 3, 4 };
|
||||
Array helium -> ['H' 'e'];
|
||||
Array lithium -> ['L';; ; 'i'];
|
||||
Array manganese -> 'M' 'n';
|
||||
Array molybdenum -> ['M'; 'b'];
|
||||
Array sizeplus --> 2 + 7;
|
||||
Array sizeplusok --> (2 + 7);
|
||||
Array sizeminus --> 2 - 7;
|
||||
Array sizeminusok --> (2 - 7);
|
||||
Array sizetimes --> 2 * 7;
|
||||
Array sizetimesok --> (2 * 7);
|
||||
Array sizedivide --> 2 / 7;
|
||||
Array sizedivideok --> (2 / 7);
|
||||
Array passwordok -> ['X'; 'y'; 'z'; 'z'; 'y'];
|
||||
Array password -> 'H' 'e' 'l' 'l' 'o';
|
||||
|
||||
Hypothetical 10;
|
||||
Link;
|
||||
|
||||
+namespace(Whatever) [ Banana; ];
|
||||
|
||||
[ "hello" ];
|
||||
#Stub X "banana";
|
||||
[ Routine 12 1aa "semolina" _ok ok ok123 OK_456; ];
|
||||
|
||||
+silly [ Stuff; ];
|
||||
+private(23) [ Alpha; ];
|
||||
+public(quietly) [ Beta; ];
|
||||
+namespace(MammalKit, access whimsical);
|
||||
+namespace(BirdKit, level 4);
|
||||
+namespace("This");
|
||||
+namespace(10);
|
||||
+namespace(Main);
|
||||
+namespace(replaced);
|
||||
+private();
|
||||
+namespace(AmphibianKit, access private);
|
||||
+private [ FrogMonitor; ];
|
||||
+namespace();
|
||||
+namespace(ReptileKit, access public);
|
||||
+public [ CloudLizardMonitor; ];
|
||||
+namespace();
|
||||
+replacing(sideways) [ This; ];
|
||||
+replacing(route=sideways) [ This; ];
|
||||
|
||||
Verb "grab" * scope=Bogus noun=JustAsBogus;
|
||||
|
||||
Constant STUFF = 200;
|
||||
#iftrue STUFF == 201;
|
||||
#endif;
|
||||
#ifnot;
|
||||
#endif;
|
||||
[ Dud1 x y;
|
||||
x = @mul 12 12 -> y;
|
||||
];
|
||||
[ Dud2;
|
||||
#ifdef STUFF;
|
||||
];
|
||||
[ Dud3;
|
||||
#endif;
|
||||
];
|
||||
[ Dud4;
|
||||
#ifdef;
|
||||
#endif;
|
||||
];
|
||||
[ Dud4;
|
||||
#iftrue;
|
||||
#endif;
|
||||
];
|
||||
[ Dud5 x y;
|
||||
if (x == @mul 12 12 -> y) print "Ok!";
|
||||
];
|
||||
[ Dud6;
|
||||
glk(14, 2, 3);
|
||||
];
|
||||
[ Dud7 x;
|
||||
x.call(1, 2, 3, 4, 5);
|
||||
];
|
||||
[ Dud8;
|
||||
print $f05g;
|
||||
];
|
||||
[ Dud9;
|
||||
print .Label;
|
||||
];
|
||||
[ Dud10;
|
||||
.1534;
|
||||
];
|
||||
[ Dud11;
|
||||
print print "Hello";
|
||||
];
|
||||
[ Dud12;
|
||||
objectloop(12) print "Yes.";
|
||||
];
|
||||
[ Dud13;
|
||||
do print "X";
|
||||
];
|
||||
[ Dud14;
|
||||
font "Times New Roman";
|
||||
];
|
||||
[ Dud15 x y;
|
||||
move x y;
|
||||
];
|
||||
[ Dud16;
|
||||
for;
|
||||
];
|
||||
[ Dud17;
|
||||
for ();
|
||||
];
|
||||
[ Dud18;
|
||||
for (:::::);
|
||||
];
|
||||
[ Dud19;
|
||||
print 3 + + 17;
|
||||
];
|
||||
|
||||
#ifdef Tosh;
|
||||
[ WontBeCompiled; ];
|
||||
|
||||
-).
|
212
inform7/Tests/Test Problems/_Results_Ideal/PM_I6SyntaxError.txt
Normal file
212
inform7/Tests/Test Problems/_Results_Ideal/PM_I6SyntaxError.txt
Normal file
|
@ -0,0 +1,212 @@
|
|||
Inform 7 v10.2.0 has started.
|
||||
I've now read your source text, which is 12 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7792 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2330 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 34311 words long.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 24): this is not an
|
||||
Inform 6 directive.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 25): this Inform 6
|
||||
directive is not supported in kits or '(-' inclusions: 'Link;' (only
|
||||
#Ifdef, #Ifndef, #Iftrue, #Ifnot, #Endif, #Stub, Constant, Global, Array,
|
||||
Attribute, Property, Verb, Fake_action, Object, Default are supported).
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 36): in a +namespace
|
||||
annotation, the 'access' must be 'private' or 'public', not 'whimsical'.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 37): the +namespace
|
||||
annotation does not take the term 'level'.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 38): this +annotation
|
||||
is malformed: '+namespace("This");'.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 38): this is not an
|
||||
Inform 6 directive.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 39): the namespace
|
||||
'10' is not allowed: namespace names should begin with a letter and contain
|
||||
only alphanumeric characters or '_'.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 40):
|
||||
'+namespace(...)' names are case-sensitive: use 'main', not 'Main', to
|
||||
return to the global namespace.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 41): the namespace
|
||||
'replaced' is reserved, and cannot be used directly.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 42): the annotation
|
||||
'+private()' seems not to apply to any directive: only '+namespace' can do
|
||||
that.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 45): '+namespace()'
|
||||
is not allowed: use '+namespace(main);' to return to the global namespace.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 48): '+namespace()'
|
||||
is not allowed: use '+namespace(main);' to return to the global namespace.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 55): conditional
|
||||
compilation is too difficult: #iftrue on 'STUFF==201' (can only test SYMBOL
|
||||
== DECIMALVALUE, or >, =,
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 57): conditional
|
||||
compilation wrongly structured: #ifnot at top level.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 58): conditional
|
||||
compilation wrongly structured: too many #endif.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 123): conditional
|
||||
compilation wrongly structured: not enough #endif.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 27): the annotation
|
||||
'+namespace(Whatever)' must be followed by a ';'.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 29): invalid Inform 6
|
||||
routine declaration: '"hello" ]'.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 30): invalid #Stub
|
||||
declaration: '#Stub X "banana"; '.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 31): invalid Inform 6
|
||||
local variable name: '12' in function 'Routine'.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 31): invalid Inform 6
|
||||
local variable name: '1aa' in function 'Routine'.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 31): invalid Inform 6
|
||||
local variable name: '"semolina"' in function 'Routine'.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 33): the annotation
|
||||
'+silly' is not one of those allowed.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 34): the +private
|
||||
annotation does not take any terms.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 35): the +public
|
||||
annotation does not take any terms.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 44): the +private
|
||||
annotation is redundant in namespace 'AmphibianKit'.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 47): the +public
|
||||
annotation is redundant in namespace 'ReptileKit'.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 49): expected 'from
|
||||
K' or 'keeping' in '+replacing(...)', not 'sideways'.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 50): the +replacing
|
||||
annotation does not take the term 'route'.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 7): cannot make array
|
||||
'supposed': the 'string' initialiser is unsupported.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 8): cannot make array
|
||||
'supposed2': the initial value syntax is unrecognised.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 9): multiple entries
|
||||
between ';' markers in array 'helium'.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 10): array 'lithium'
|
||||
contains empty entry.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 10): array 'lithium'
|
||||
contains empty entry.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 13): array 'sizeplus'
|
||||
gives its size using operator '+' (use brackets '(' ... ')' around the size
|
||||
for a calculated array size).
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 15): array
|
||||
'sizeminus' gives its size using operator '-' (use brackets '(' ... ')'
|
||||
around the size for a calculated array size).
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 17): array
|
||||
'sizetimes' gives its size using operator '*' (use brackets '(' ... ')'
|
||||
around the size for a calculated array size).
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 19): array
|
||||
'sizedivide' gives its size using operator '/' (use brackets '(' ... ')'
|
||||
around the size for a calculated array size).
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 52): can't find any
|
||||
scope routine called 'Bogus'.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 52): can't find any
|
||||
noun routine called 'JustAsBogus'.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 60): Inform 6 syntax
|
||||
error in function 'Dud1': '@mul' was unexpected in expression context.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 63): Inform 6 syntax
|
||||
error in function 'Dud2': no matching '#endif'.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 63): Inform 6 syntax
|
||||
error in function 'Dud2': misplaced directive.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 66): Inform 6 syntax
|
||||
error in function 'Dud3': misplaced directive.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 70): Inform 6 syntax
|
||||
error in function 'Dud4': bare '#ifdef' or '#ifndef'.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 70): Inform 6 syntax
|
||||
error in function 'Dud4': misplaced directive.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 70): Inform 6 syntax
|
||||
error in function 'Dud4': misplaced directive.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 74): Inform 6 syntax
|
||||
error in function 'Dud4': malformed '#if...'.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 74): Inform 6 syntax
|
||||
error in function 'Dud4': misplaced directive.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 74): Inform 6 syntax
|
||||
error in function 'Dud4': misplaced directive.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 77): Inform 6 syntax
|
||||
error in function 'Dud5': '@mul' was unexpected in expression context.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 80): Inform 6 syntax
|
||||
error in function 'Dud6': the glk() function is now unsupported.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 83): Inform 6 syntax
|
||||
error in function 'Dud7': too many arguments for call-message.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 86): Inform 6 syntax
|
||||
error in function 'Dud8': malformed literal number '$f05g'.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 89): Inform 6 syntax
|
||||
error in function 'Dud9': label in unexpected place.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 92): Inform 6 syntax
|
||||
error in function 'Dud10': expected label name but found '1534'.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 95): Inform 6 syntax
|
||||
error in function 'Dud11': statement in unexpected place.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 98): Inform 6 syntax
|
||||
error in function 'Dud12': 'objectloop' without visible variable.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 101): Inform 6 syntax
|
||||
error in function 'Dud13': do without until.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 104): Inform 6 syntax
|
||||
error in function 'Dud14': expected 'on' or 'off' after 'font', not 'Times
|
||||
New Roman'.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 107): Inform 6 syntax
|
||||
error in function 'Dud15': move without to.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 110): Inform 6 syntax
|
||||
error in function 'Dud16': 'for' header with too few clauses.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 113): Inform 6 syntax
|
||||
error in function 'Dud17': 'for' header with too few clauses.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 116): Inform 6 syntax
|
||||
error in function 'Dud18': 'for' header with too many clauses.
|
||||
Problem__ PM_I6SyntaxError
|
||||
>--> Inform 6 syntax error near here (source text, line 119): Inform 6 syntax
|
||||
error in function 'Dud19': operator '+' used with 1 not 2 operand(s).
|
||||
Inform 7 has finished.
|
|
@ -674,7 +674,7 @@ void SourceProblems::I6_level_error(char *message, text_stream *quote,
|
|||
notified_kit_name, notified_architecture_name);
|
||||
trigger_kit_notice = FALSE;
|
||||
}
|
||||
StandardProblems::handmade_problem(Task::syntax_tree(), _p_(...));
|
||||
StandardProblems::handmade_problem(Task::syntax_tree(), _p_(PM_I6SyntaxError));
|
||||
Problems::quote_stream(1, M);
|
||||
if (Str::len(kit) > 0) {
|
||||
Problems::quote_stream(2, file);
|
||||
|
@ -686,7 +686,7 @@ void SourceProblems::I6_level_error(char *message, text_stream *quote,
|
|||
LOG("%S, line %d:\n", file, line);
|
||||
Problems::problem_quote_file(2, file, line);
|
||||
Problems::issue_problem_segment(
|
||||
"A mistake was found in the Inform 6-syntax code near here %2: %1.");
|
||||
"Inform 6 syntax error near here %2: %1.");
|
||||
} else {
|
||||
Problems::issue_problem_segment(
|
||||
"My low-level reader of source code reported a mistake - \"%1\". "
|
||||
|
|
|
@ -82,7 +82,7 @@ void CompileSchemas::sch_emit_inner(i6_schema *sch, pcalc_term *pt1, pcalc_term
|
|||
EmitInterSchemas::emit(Emit::tree(), &VH, sch->compiled,
|
||||
IdentifierFinders::common_names_only(),
|
||||
&CompileSchemas::from_schema_token, NULL, &ems);
|
||||
InterSchemas::internal_error_on_schema_errors(sch->compiled);
|
||||
I6Errors::internal_error_on_schema_errors(sch->compiled);
|
||||
}
|
||||
|
||||
@ So, then, this is called on each token in turn from the original schema. Note
|
||||
|
|
|
@ -164,7 +164,7 @@ all conditionals are resolved.
|
|||
at = at->next_node;
|
||||
}
|
||||
if (endif_node == NULL) {
|
||||
InterSchemas::throw_error(dir_node, I"no matching '#endif'");
|
||||
I6Errors::issue_at_node(dir_node, I"no matching '#endif'");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
@ -177,6 +177,10 @@ all conditionals are resolved.
|
|||
@<Work out what the condition is@> =
|
||||
if ((dir_node->dir_clarifier == IFDEF_I6RW) ||
|
||||
(dir_node->dir_clarifier == IFNDEF_I6RW)) {
|
||||
if (dir_node->child_node == NULL) {
|
||||
I6Errors::issue_at_node(dir_node, I"bare '#ifdef' or '#ifndef'");
|
||||
return FALSE;
|
||||
}
|
||||
symbol_to_check = dir_node->child_node->expression_tokens->material;
|
||||
} else {
|
||||
inter_schema_node *to_eval = dir_node->child_node;
|
||||
|
@ -184,7 +188,7 @@ all conditionals are resolved.
|
|||
to_eval = to_eval->child_node;
|
||||
if ((to_eval == NULL) || (to_eval->child_node == NULL) ||
|
||||
(to_eval->child_node->expression_tokens == NULL)) {
|
||||
InterSchemas::throw_error(dir_node, I"malformed '#if...'");
|
||||
I6Errors::issue_at_node(dir_node, I"malformed '#if...'");
|
||||
return FALSE;
|
||||
}
|
||||
symbol_to_check = to_eval->child_node->expression_tokens->material;
|
||||
|
@ -328,8 +332,8 @@ void EmitInterSchemas::emit_recursively(inter_tree *I, inter_schema_node *node,
|
|||
Note that recursion in |VAL_PRIM_CAT| mode evaluates |x|, |y| and |z|.
|
||||
|
||||
@<Assembly@> =
|
||||
if (prim_cat != CODE_PRIM_CAT) {
|
||||
InterSchemas::throw_error(node, I"assembly language unexpected here");
|
||||
if (prim_cat != CODE_PRIM_CAT) { /* should never in fact happen */
|
||||
I6Errors::issue_at_node(node, I"assembly language unexpected here");
|
||||
return;
|
||||
}
|
||||
inter_schema_node *at = node->child_node;
|
||||
|
@ -341,7 +345,7 @@ Note that recursion in |VAL_PRIM_CAT| mode evaluates |x|, |y| and |z|.
|
|||
opcode_text = tok->material;
|
||||
}
|
||||
if (opcode_text == NULL) { /* should never in fact happen */
|
||||
InterSchemas::throw_error(node, I"assembly language malformed here");
|
||||
I6Errors::issue_at_node(node, I"assembly language malformed here");
|
||||
return;
|
||||
}
|
||||
Produce::inv_assembly(I, opcode_text);
|
||||
|
@ -422,7 +426,7 @@ changed back again very soon after.
|
|||
} else if (Str::eq(tok->material, I"indirect")) {
|
||||
at = at->next_node;
|
||||
} else if (Str::eq(tok->material, I"glk")) {
|
||||
InterSchemas::throw_error(node, I"the glk() function is now unsupported");
|
||||
I6Errors::issue_at_node(node, I"the glk() function is now unsupported");
|
||||
return;
|
||||
} else {
|
||||
to_call = IdentifierFinders::find_token(I, tok, finder);
|
||||
|
@ -460,7 +464,7 @@ somewhere (in fact, always in a property value).
|
|||
int argc = 0;
|
||||
for (inter_schema_node *n = node->child_node; n; n=n->next_node) argc++;
|
||||
if (argc > 4) {
|
||||
InterSchemas::throw_error(node, I"too many arguments for call-message");
|
||||
I6Errors::issue_at_node(node, I"too many arguments for call-message");
|
||||
return;
|
||||
}
|
||||
inter_ti BIP = Primitives::BIP_for_indirect_call_returning_value(argc-1);
|
||||
|
@ -477,7 +481,7 @@ more natural |{ ... }|.
|
|||
|
||||
@<Code block@> =
|
||||
if (prim_cat != CODE_PRIM_CAT) {
|
||||
InterSchemas::throw_error(node, I"unexpected '{ ... }' code block");
|
||||
I6Errors::issue_at_node(node, I"unexpected '{ ... }' code block");
|
||||
return;
|
||||
}
|
||||
if (node->unopened == FALSE) {
|
||||
|
@ -496,7 +500,7 @@ other Inform 6 directives are not valid inside function bodies, which is the
|
|||
only part of I6 syntax covered by schemas. Therefore:
|
||||
|
||||
@<Non-conditional directive@> =
|
||||
InterSchemas::throw_error(node, I"misplaced directive");
|
||||
I6Errors::issue_at_node(node, I"misplaced directive");
|
||||
return;
|
||||
|
||||
@ An |EVAL_ISNT| node can have any number of children, they are sequentially
|
||||
|
@ -504,7 +508,7 @@ evaluated for their potential side-effects, but only the last produces a value.
|
|||
|
||||
@<Eval block@> =
|
||||
if ((prim_cat != CODE_PRIM_CAT) && (prim_cat != VAL_PRIM_CAT)){
|
||||
InterSchemas::throw_error(node, I"expression in unexpected place");
|
||||
I6Errors::issue_at_node(node, I"expression in unexpected place");
|
||||
return;
|
||||
}
|
||||
if (node->child_node == NULL) Produce::val(I, K_value, InterValuePairs::number(1));
|
||||
|
@ -610,7 +614,7 @@ parsing the schema.)
|
|||
if (InterValuePairs::is_undef(val)) {
|
||||
TEMPORARY_TEXT(msg)
|
||||
WRITE_TO(msg, "malformed literal number '%S'", t->material);
|
||||
InterSchemas::throw_error(node, msg);
|
||||
I6Errors::issue_at_node(node, msg);
|
||||
DISCARD_TEXT(msg)
|
||||
return;
|
||||
}
|
||||
|
@ -642,7 +646,7 @@ parsing the schema.)
|
|||
default: {
|
||||
TEMPORARY_TEXT(msg)
|
||||
WRITE_TO(msg, "'%S' was unexpected in expression context", t->material);
|
||||
InterSchemas::throw_error(node, msg);
|
||||
I6Errors::issue_at_node(node, msg);
|
||||
DISCARD_TEXT(msg)
|
||||
break;
|
||||
}
|
||||
|
@ -669,7 +673,7 @@ For example, the schema |.{-label:Say}{-counter-up:Say};| results in:
|
|||
|
||||
@<Label@> =
|
||||
if (prim_cat != CODE_PRIM_CAT) {
|
||||
InterSchemas::throw_error(node, I"label in unexpected place");
|
||||
I6Errors::issue_at_node(node, I"label in unexpected place");
|
||||
return;
|
||||
}
|
||||
TEMPORARY_TEXT(L)
|
||||
|
@ -688,7 +692,7 @@ For example, the schema |.{-label:Say}{-counter-up:Say};| results in:
|
|||
} else {
|
||||
TEMPORARY_TEXT(msg)
|
||||
WRITE_TO(msg, "expected label name but found '%S'", t->material);
|
||||
InterSchemas::throw_error(node, msg);
|
||||
I6Errors::issue_at_node(node, msg);
|
||||
DISCARD_TEXT(msg)
|
||||
return;
|
||||
}
|
||||
|
@ -778,7 +782,7 @@ on others.
|
|||
|
||||
@<Statement@> =
|
||||
if (prim_cat != CODE_PRIM_CAT) {
|
||||
InterSchemas::throw_error(node, I"statement in unexpected place");
|
||||
I6Errors::issue_at_node(node, I"statement in unexpected place");
|
||||
return;
|
||||
}
|
||||
if (node->isn_clarifier == CASE_BIP) Produce::set_level_to_current_code_block_plus(I, 2);
|
||||
|
@ -848,7 +852,7 @@ these possibilities:
|
|||
EIS_RECURSE(var_node, REF_PRIM_CAT);
|
||||
EIS_RECURSE(cl_node, VAL_PRIM_CAT);
|
||||
} else {
|
||||
InterSchemas::throw_error(node, I"malformed 'objectloop' header");
|
||||
I6Errors::issue_at_node(node, I"malformed 'objectloop' header");
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
|
@ -861,7 +865,7 @@ these possibilities:
|
|||
EIS_RECURSE(var_node, REF_PRIM_CAT);
|
||||
Produce::val_symbol(I, K_value, IdentifierFinders::find(I, I"Object", finder));
|
||||
} else {
|
||||
InterSchemas::throw_error(node, I"'objectloop' without visible variable");
|
||||
I6Errors::issue_at_node(node, I"'objectloop' without visible variable");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
128
inter/building-module/Chapter 2/Inform 6 Syntax Errors.w
Normal file
128
inter/building-module/Chapter 2/Inform 6 Syntax Errors.w
Normal file
|
@ -0,0 +1,128 @@
|
|||
[I6Errors::] Inform 6 Syntax Errors.
|
||||
|
||||
To issue problem messages when parsing malformed I6-syntax code.
|
||||
|
||||
@ Errors like these used to be basically failed assertions, but inevitably people
|
||||
reported that as a bug (Mantis 0001596). It was never intended that Inform 6-syntax
|
||||
hacking should be part of the outside-facing Inform language; but if you leave
|
||||
power tools just lying around, people will eventually pick them up and wonder
|
||||
what the red button marked "danger" does.
|
||||
|
||||
Note that |i6_syntax_error_location| is initially uninitialised and thus has
|
||||
undefined contents, so we take care to blank it out if it is read before being
|
||||
written to for the first time.
|
||||
|
||||
=
|
||||
text_provenance i6_syntax_error_location;
|
||||
int i6_syntax_error_location_set = FALSE;
|
||||
|
||||
text_provenance I6Errors::get_current_location(void) {
|
||||
if (i6_syntax_error_location_set == FALSE)
|
||||
I6Errors::clear_current_location();
|
||||
return i6_syntax_error_location;
|
||||
}
|
||||
void I6Errors::clear_current_location(void) {
|
||||
I6Errors::set_current_location(Provenance::nowhere());
|
||||
}
|
||||
void I6Errors::set_current_location(text_provenance where) {
|
||||
i6_syntax_error_location_set = TRUE;
|
||||
i6_syntax_error_location = where;
|
||||
}
|
||||
|
||||
void I6Errors::set_current_location_near_splat(inter_tree_node *P) {
|
||||
I6Errors::clear_current_location();
|
||||
if ((P) && (Inode::is(P, SPLAT_IST)))
|
||||
I6Errors::set_current_location(SplatInstruction::provenance(P));
|
||||
}
|
||||
|
||||
@ The issuing mechanism, or rather, the mechanism used if the main Inform
|
||||
compiler doesn't gazump us (in order to provide something better-looking in
|
||||
the GUI apps).
|
||||
|
||||
=
|
||||
int i6_syntax_error_count = 0;
|
||||
|
||||
void I6Errors::issue(char *message, text_stream *quote) {
|
||||
text_provenance at = I6Errors::get_current_location();
|
||||
#ifdef CORE_MODULE
|
||||
SourceProblems::I6_level_error(message, quote, at);
|
||||
#endif
|
||||
#ifndef CORE_MODULE
|
||||
if (Provenance::is_somewhere(at)) {
|
||||
filename *F = Provenance::get_filename(at);
|
||||
TEMPORARY_TEXT(M)
|
||||
WRITE_TO(M, message, quote);
|
||||
Errors::at_position_S(M, F, Provenance::get_line(at));
|
||||
DISCARD_TEXT(M)
|
||||
} else {
|
||||
Errors::with_text(message, quote);
|
||||
}
|
||||
#endif
|
||||
i6_syntax_error_count++;
|
||||
}
|
||||
|
||||
void I6Errors::reset_count(void) {
|
||||
I6Errors::clear_current_location();
|
||||
i6_syntax_error_count = 0;
|
||||
}
|
||||
|
||||
int I6Errors::errors_occurred(void) {
|
||||
if (i6_syntax_error_count != 0) return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@ The functions below are for errors detected when parsing text into schemas, or
|
||||
when emitting code from them.
|
||||
|
||||
Note that the |parsing_errors| field of a schema is null until the first error
|
||||
is detected -- which, of course, it usually isn't. It holds a linked list of these:
|
||||
|
||||
=
|
||||
typedef struct schema_parsing_error {
|
||||
struct text_stream *message;
|
||||
struct text_provenance provenance;
|
||||
CLASS_DEFINITION
|
||||
} schema_parsing_error;
|
||||
|
||||
@ =
|
||||
void I6Errors::issue_at_node(inter_schema_node *at, text_stream *message) {
|
||||
if (at->parent_schema->parsing_errors == NULL)
|
||||
at->parent_schema->parsing_errors = NEW_LINKED_LIST(schema_parsing_error);
|
||||
schema_parsing_error *err = CREATE(schema_parsing_error);
|
||||
err->message = Str::duplicate(message);
|
||||
if (at) {
|
||||
if (Provenance::is_somewhere(at->provenance)) err->provenance = at->provenance;
|
||||
else if (at->parent_schema) err->provenance = at->parent_schema->provenance;
|
||||
else err->provenance = Provenance::nowhere();
|
||||
} else {
|
||||
err->provenance = Provenance::nowhere();
|
||||
}
|
||||
ADD_TO_LINKED_LIST(err, schema_parsing_error, at->parent_schema->parsing_errors);
|
||||
LOG("Schema error: %S\n", message);
|
||||
if ((at->parent_schema) && (Provenance::is_somewhere(at->parent_schema->provenance)))
|
||||
LOG("Schema provenance %f, line %d\n",
|
||||
Provenance::get_filename(at->parent_schema->provenance),
|
||||
Provenance::get_line(at->parent_schema->provenance));
|
||||
LOG("$1\n", at->parent_schema);
|
||||
}
|
||||
|
||||
@ That function of course caches schema errors for playback later: well, here's
|
||||
the later. Unless the main Inform compiler takes over from us, the result will
|
||||
be drastic, halting what is presumably the |inter| tool:
|
||||
|
||||
=
|
||||
void I6Errors::internal_error_on_schema_errors(inter_schema *sch) {
|
||||
if (LinkedLists::len(sch->parsing_errors) > 0) {
|
||||
#ifdef CORE_MODULE
|
||||
SourceProblems::inter_schema_errors(sch);
|
||||
#endif
|
||||
#ifndef CORE_MODULE
|
||||
WRITE_TO(STDERR, "Parsing error(s) in the internal schema '%S':\n",
|
||||
sch->converted_from);
|
||||
schema_parsing_error *err;
|
||||
LOOP_OVER_LINKED_LIST(err, schema_parsing_error, sch->parsing_errors)
|
||||
WRITE_TO(STDERR, "- %S\n", err->message);
|
||||
exit(1);
|
||||
#endif
|
||||
}
|
||||
}
|
|
@ -646,59 +646,3 @@ text_stream *InterSchemas::lint_isn(inter_schema_node *isn, int depth) {
|
|||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@h Errors.
|
||||
Errors can be detected both when parsing text into schemas, and also when emitting
|
||||
code from them. In either case, the following is used to attach error message(s)
|
||||
to the schema itself.
|
||||
|
||||
Note that the |parsing_errors| field is null until the first error is detected --
|
||||
which, of course, it usually isn't.
|
||||
|
||||
=
|
||||
typedef struct schema_parsing_error {
|
||||
struct text_stream *message;
|
||||
struct text_provenance provenance;
|
||||
CLASS_DEFINITION
|
||||
} schema_parsing_error;
|
||||
|
||||
@ =
|
||||
void InterSchemas::throw_error(inter_schema_node *at, text_stream *message) {
|
||||
if (at->parent_schema->parsing_errors == NULL)
|
||||
at->parent_schema->parsing_errors = NEW_LINKED_LIST(schema_parsing_error);
|
||||
schema_parsing_error *err = CREATE(schema_parsing_error);
|
||||
err->message = Str::duplicate(message);
|
||||
if (at) {
|
||||
if (Provenance::is_somewhere(at->provenance)) err->provenance = at->provenance;
|
||||
else if (at->parent_schema) err->provenance = at->parent_schema->provenance;
|
||||
else err->provenance = Provenance::nowhere();
|
||||
} else {
|
||||
err->provenance = Provenance::nowhere();
|
||||
}
|
||||
ADD_TO_LINKED_LIST(err, schema_parsing_error, at->parent_schema->parsing_errors);
|
||||
LOG("Schema error: %S\n", message);
|
||||
if ((at->parent_schema) && (Provenance::is_somewhere(at->parent_schema->provenance)))
|
||||
LOG("Schema provenance %f, line %d\n",
|
||||
Provenance::get_filename(at->parent_schema->provenance),
|
||||
Provenance::get_line(at->parent_schema->provenance));
|
||||
LOG("$1\n", at->parent_schema);
|
||||
}
|
||||
|
||||
@ And this is an especially drastic way to deal with such errors:
|
||||
|
||||
=
|
||||
void InterSchemas::internal_error_on_schema_errors(inter_schema *sch) {
|
||||
if (LinkedLists::len(sch->parsing_errors) > 0) {
|
||||
#ifdef CORE_MODULE
|
||||
SourceProblems::inter_schema_errors(sch);
|
||||
#endif
|
||||
#ifndef CORE_MODULE
|
||||
WRITE_TO(STDERR, "Parsing error(s) in the internal schema '%S':\n",
|
||||
sch->converted_from);
|
||||
schema_parsing_error *err;
|
||||
LOOP_OVER_LINKED_LIST(err, schema_parsing_error, sch->parsing_errors)
|
||||
WRITE_TO(STDERR, "- %S\n", err->message);
|
||||
internal_error("malformed schema");
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
|
|
@ -50,7 +50,7 @@ inter_schema *ParsingSchemas::from_i6s(text_stream *from,
|
|||
Dictionaries::create(i6s_inter_schema_cache, from);
|
||||
Dictionaries::write_value(i6s_inter_schema_cache, from, (void *) result);
|
||||
|
||||
InterSchemas::internal_error_on_schema_errors(result);
|
||||
I6Errors::internal_error_on_schema_errors(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
|
@ -828,7 +828,7 @@ nodes, which we want to fold into just one:
|
|||
operand1 = InterSchemas::second_dark_token(until_node);
|
||||
cons->next_node = until_node->next_node;
|
||||
} else {
|
||||
InterSchemas::throw_error(cons, I"do without until");
|
||||
I6Errors::issue_at_node(cons, I"do without until");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
@ -841,7 +841,7 @@ nodes, which we want to fold into just one:
|
|||
TEMPORARY_TEXT(msg)
|
||||
WRITE_TO(msg, "expected 'on' or 'off' after 'font', not '%S'",
|
||||
n->material);
|
||||
InterSchemas::throw_error(cons, msg);
|
||||
I6Errors::issue_at_node(cons, msg);
|
||||
DISCARD_TEXT(msg)
|
||||
return FALSE;
|
||||
}
|
||||
|
@ -891,7 +891,7 @@ clause at all. We split these possibilities into two different statement nodes.
|
|||
to = InterSchemas::next_dark_token(to);
|
||||
}
|
||||
if (to == NULL) {
|
||||
InterSchemas::throw_error(cons, I"move without to");
|
||||
I6Errors::issue_at_node(cons, I"move without to");
|
||||
return FALSE;
|
||||
}
|
||||
operand2 = InterSchemas::next_dark_token(to);
|
||||
|
@ -1239,7 +1239,7 @@ int Ramification::break_for_statements(inter_schema_node *par, inter_schema_node
|
|||
(isn->node_marked == FALSE)) {
|
||||
inter_schema_node *predicates = isn->child_node;
|
||||
if ((predicates == NULL) || (predicates->isn_type != EXPRESSION_ISNT)) {
|
||||
InterSchemas::throw_error(isn, I"malformed 'for' loop");
|
||||
I6Errors::issue_at_node(isn, I"malformed 'for' loop");
|
||||
return FALSE;
|
||||
}
|
||||
inter_schema_token *n = predicates->expression_tokens;
|
||||
|
@ -1267,7 +1267,7 @@ int Ramification::break_for_statements(inter_schema_node *par, inter_schema_node
|
|||
n = n->next;
|
||||
}
|
||||
if (cw != 3) {
|
||||
InterSchemas::throw_error(isn, I"'for' header with too few clauses");
|
||||
I6Errors::issue_at_node(isn, I"'for' header with too few clauses");
|
||||
return FALSE;
|
||||
}
|
||||
for (int i=0; i<3; i++) {
|
||||
|
@ -1308,7 +1308,7 @@ int Ramification::break_for_statements(inter_schema_node *par, inter_schema_node
|
|||
|
||||
@<End a for loop header clause@> =
|
||||
if (cw >= 3) {
|
||||
InterSchemas::throw_error(isn, I"'for' header with too many clauses");
|
||||
I6Errors::issue_at_node(isn, I"'for' header with too many clauses");
|
||||
return FALSE;
|
||||
}
|
||||
if (from[cw] == NULL) to[cw] = NULL;
|
||||
|
@ -1336,7 +1336,7 @@ int Ramification::add_missing_bodies(inter_schema_node *par, inter_schema_node *
|
|||
int actual = 0;
|
||||
for (inter_schema_node *ch = isn->child_node; ch; ch=ch->next_node) actual++;
|
||||
if ((actual < req-1) || (actual > req)) {
|
||||
InterSchemas::throw_error(isn, I"malformed statement");
|
||||
I6Errors::issue_at_node(isn, I"malformed statement");
|
||||
return FALSE;
|
||||
}
|
||||
if (actual == req-1) {
|
||||
|
@ -1718,7 +1718,7 @@ operation |a.b|.
|
|||
WRITE_TO(msg, "operator '%S' used with %d not %d operand(s)",
|
||||
I6Operators::I6_notation_for(isn->isn_clarifier),
|
||||
a, I6Operators::arity(isn->isn_clarifier));
|
||||
InterSchemas::throw_error(isn, msg);
|
||||
I6Errors::issue_at_node(isn, msg);
|
||||
DISCARD_TEXT(msg)
|
||||
return FALSE;
|
||||
}
|
||||
|
@ -1894,32 +1894,32 @@ int Ramification::sanity_check(inter_schema_node *par, inter_schema_node *isn) {
|
|||
for (inter_schema_token *t = isn->expression_tokens; t; t=t->next) {
|
||||
switch (t->ist_type) {
|
||||
case OPCODE_ISTT: asm = TRUE; break;
|
||||
case RAW_ISTT: InterSchemas::throw_error(isn, I"malformed expression"); break;
|
||||
case OPEN_BRACE_ISTT: InterSchemas::throw_error(isn, I"unexpected '{'"); break;
|
||||
case CLOSE_BRACE_ISTT: InterSchemas::throw_error(isn, I"unexpected '}'"); break;
|
||||
case OPEN_ROUND_ISTT: InterSchemas::throw_error(isn, I"unexpected '('"); break;
|
||||
case CLOSE_ROUND_ISTT: InterSchemas::throw_error(isn, I"unexpected ')'"); break;
|
||||
case COMMA_ISTT: InterSchemas::throw_error(isn, I"unexpected ','"); break;
|
||||
case DIVIDER_ISTT: InterSchemas::throw_error(isn, I"malformed expression"); break;
|
||||
case RAW_ISTT: I6Errors::issue_at_node(isn, I"malformed expression"); break;
|
||||
case OPEN_BRACE_ISTT: I6Errors::issue_at_node(isn, I"unexpected '{'"); break;
|
||||
case CLOSE_BRACE_ISTT: I6Errors::issue_at_node(isn, I"unexpected '}'"); break;
|
||||
case OPEN_ROUND_ISTT: I6Errors::issue_at_node(isn, I"unexpected '('"); break;
|
||||
case CLOSE_ROUND_ISTT: I6Errors::issue_at_node(isn, I"unexpected ')'"); break;
|
||||
case COMMA_ISTT: I6Errors::issue_at_node(isn, I"unexpected ','"); break;
|
||||
case DIVIDER_ISTT: I6Errors::issue_at_node(isn, I"malformed expression"); break;
|
||||
case RESERVED_ISTT: {
|
||||
TEMPORARY_TEXT(msg)
|
||||
WRITE_TO(msg, "unexpected use of reserved word '%S'", t->material);
|
||||
InterSchemas::throw_error(isn, msg);
|
||||
I6Errors::issue_at_node(isn, msg);
|
||||
DISCARD_TEXT(msg)
|
||||
break;
|
||||
}
|
||||
case COLON_ISTT: InterSchemas::throw_error(isn, I"unexpected ':'"); break;
|
||||
case DCOLON_ISTT: InterSchemas::throw_error(isn,
|
||||
case COLON_ISTT: I6Errors::issue_at_node(isn, I"unexpected ':'"); break;
|
||||
case DCOLON_ISTT: I6Errors::issue_at_node(isn,
|
||||
I"the Inform 6 '::' operator is unsupported"); break;
|
||||
case OPERATOR_ISTT: InterSchemas::throw_error(isn, I"unexpected operator"); break;
|
||||
case OPERATOR_ISTT: I6Errors::issue_at_node(isn, I"unexpected operator"); break;
|
||||
}
|
||||
if ((t->ist_type == NUMBER_ISTT) && (t->next) &&
|
||||
(t->next->ist_type == NUMBER_ISTT) && (asm == FALSE))
|
||||
InterSchemas::throw_error(isn, I"two consecutive numbers");
|
||||
I6Errors::issue_at_node(isn, I"two consecutive numbers");
|
||||
}
|
||||
if (isn->child_node) InterSchemas::throw_error(isn, I"malformed expression");
|
||||
if (isn->child_node) I6Errors::issue_at_node(isn, I"malformed expression");
|
||||
} else {
|
||||
if (isn->expression_tokens) InterSchemas::throw_error(isn, I"syntax error");
|
||||
if (isn->expression_tokens) I6Errors::issue_at_node(isn, I"syntax error");
|
||||
}
|
||||
Ramification::sanity_check(isn, isn->child_node);
|
||||
}
|
||||
|
|
|
@ -409,7 +409,7 @@ of modifiers are allowed. See //calculus: Compilation Schemas//.
|
|||
wchar_t c = Str::get_at(from, ++at);
|
||||
int iss_bitmap = 0;
|
||||
switch (c) {
|
||||
case '!': InterSchemas::throw_error(sch->node_tree,
|
||||
case '!': I6Errors::issue_at_node(sch->node_tree,
|
||||
I"the '*!' schema notation has been abolished"); break;
|
||||
case '%': iss_bitmap = iss_bitmap | LVALUE_CONTEXT_ISSBM;
|
||||
c = Str::get_at(from, ++at); break;
|
||||
|
@ -454,7 +454,7 @@ of modifiers are allowed. See //calculus: Compilation Schemas//.
|
|||
preceding_token = t;
|
||||
pos = at;
|
||||
} else if (c == '-') {
|
||||
InterSchemas::throw_error(sch->node_tree,
|
||||
I6Errors::issue_at_node(sch->node_tree,
|
||||
I"the '*-' schema notation has been abolished");
|
||||
} else if (c == '*') {
|
||||
int c = '*'; @<Absorb a raw character@>;
|
||||
|
|
|
@ -26,6 +26,7 @@ Chapter 2: Blueprints
|
|||
Emitting Inter Schemas
|
||||
Identifier Finders
|
||||
Inform 6 Annotations
|
||||
Inform 6 Syntax Errors
|
||||
|
||||
Chapter 3: Masonry
|
||||
Produce
|
||||
|
|
|
@ -81,7 +81,7 @@ inter_pair InterValuePairs::number_from_I6_notation(text_stream *S) {
|
|||
else if ((c >= 'A') && (c <= 'Z')) d = c-'A'+10;
|
||||
else if ((c >= '0') && (c <= '9')) d = c-'0';
|
||||
else return InterValuePairs::undef();
|
||||
if (d > base) return InterValuePairs::undef();
|
||||
if (d >= base) return InterValuePairs::undef();
|
||||
N = base*N + (long long int) d;
|
||||
if (pos.index > 34) return InterValuePairs::undef();
|
||||
}
|
||||
|
|
|
@ -130,63 +130,3 @@ void PipelineErrors::error_with(pipeline_step *step, char *erm, text_stream *quo
|
|||
do_not_locate_problems = FALSE;
|
||||
if (Log::aspect_switched_on(INTER_DA))
|
||||
TextualInter::write(DL, Emit::tree(), NULL);
|
||||
|
||||
@h Errors in kit source.
|
||||
Errors like this used to be basically failed assertions, but inevitably people
|
||||
reported that as a bug (0001596). It was never intended that Inform 6-syntax
|
||||
hacking should be part of the outside-facing Inform language; but if you leave
|
||||
power tools just lying around, people will eventually pick them up and wonder
|
||||
what the red button marked "danger" does.
|
||||
|
||||
=
|
||||
text_provenance kit_error_location;
|
||||
int kit_error_location_set = FALSE;
|
||||
int kit_error_count = 0;
|
||||
|
||||
text_provenance PipelineErrors::get_kit_error_location(void) {
|
||||
if (kit_error_location_set == FALSE)
|
||||
PipelineErrors::clear_kit_error_location();
|
||||
return kit_error_location;
|
||||
}
|
||||
void PipelineErrors::clear_kit_error_location(void) {
|
||||
PipelineErrors::set_kit_error_location(Provenance::nowhere());
|
||||
}
|
||||
void PipelineErrors::set_kit_error_location(text_provenance where) {
|
||||
kit_error_location_set = TRUE;
|
||||
kit_error_location = where;
|
||||
}
|
||||
|
||||
void PipelineErrors::set_kit_error_location_near_splat(inter_tree_node *P) {
|
||||
PipelineErrors::clear_kit_error_location();
|
||||
if ((P) && (Inode::is(P, SPLAT_IST)))
|
||||
PipelineErrors::set_kit_error_location(SplatInstruction::provenance(P));
|
||||
}
|
||||
|
||||
void PipelineErrors::kit_error(char *message, text_stream *quote) {
|
||||
text_provenance at = PipelineErrors::get_kit_error_location();
|
||||
#ifdef CORE_MODULE
|
||||
SourceProblems::I6_level_error(message, quote, at);
|
||||
#endif
|
||||
#ifndef CORE_MODULE
|
||||
if (Provenance::is_somewhere(at)) {
|
||||
filename *F = Provenance::get_filename(at);
|
||||
TEMPORARY_TEXT(M)
|
||||
WRITE_TO(M, message, quote);
|
||||
Errors::at_position_S(M, F, Provenance::get_line(at));
|
||||
DISCARD_TEXT(M)
|
||||
} else {
|
||||
Errors::with_text(message, quote);
|
||||
}
|
||||
#endif
|
||||
kit_error_count++;
|
||||
}
|
||||
|
||||
void PipelineErrors::reset_errors(void) {
|
||||
PipelineErrors::clear_kit_error_location();
|
||||
kit_error_count = 0;
|
||||
}
|
||||
|
||||
int PipelineErrors::errors_occurred(void) {
|
||||
if (kit_error_count != 0) return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
|
|
@ -30,18 +30,18 @@ void CompileSplatsStage::create_pipeline_stage(void) {
|
|||
|
||||
=
|
||||
int CompileSplatsStage::run(pipeline_step *step) {
|
||||
PipelineErrors::reset_errors();
|
||||
I6Errors::reset_count();
|
||||
compile_splats_state css;
|
||||
@<Initialise the CS state@>;
|
||||
inter_tree *I = step->ephemera.tree;
|
||||
InterTree::traverse(I, CompileSplatsStage::visitor1, &css, NULL, SPLAT_IST);
|
||||
InterTree::traverse(I, CompileSplatsStage::visitor2, &css, NULL, 0);
|
||||
PipelineErrors::clear_kit_error_location();
|
||||
I6Errors::clear_current_location();
|
||||
int errors_found = CompileSplatsStage::function_bodies(step, &css, I);
|
||||
if (errors_found) return FALSE;
|
||||
InterTree::traverse(I, CompileSplatsStage::visitor3, &css, NULL, SPLAT_IST);
|
||||
PipelineErrors::clear_kit_error_location();
|
||||
if (PipelineErrors::errors_occurred()) return FALSE;
|
||||
I6Errors::clear_current_location();
|
||||
if (I6Errors::errors_occurred()) return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -136,7 +136,7 @@ void CompileSplatsStage::visitor3(inter_tree *I, inter_tree_node *P, void *state
|
|||
@h How definitions are assimilated.
|
||||
|
||||
@<Assimilate definition@> =
|
||||
PipelineErrors::set_kit_error_location_near_splat(P);
|
||||
I6Errors::set_current_location_near_splat(P);
|
||||
match_results mr = Regexp::create_mr();
|
||||
text_stream *raw_identifier = NULL, *value = NULL;
|
||||
int proceed = TRUE;
|
||||
|
@ -435,11 +435,13 @@ first to work out which of the several array formats this is, then the contents
|
|||
} else if (Regexp::match(&mr, value, L" *buffer *(%c*?) *")) {
|
||||
conts = mr.exp[0]; as_bytes = TRUE; bounded = TRUE;
|
||||
} else if (Regexp::match(&mr, value, L" *string *(%c*?) *")) {
|
||||
LOG("Identifier = <%S>, Value = <%S>", identifier, value);
|
||||
PipelineErrors::kit_error("Inform 6 'string' arrays are unsupported", NULL);
|
||||
I6Errors::issue(
|
||||
"cannot make array '%S': the 'string' initialiser is unsupported",
|
||||
identifier);
|
||||
} else {
|
||||
LOG("Identifier = <%S>, Value = <%S>", identifier, value);
|
||||
PipelineErrors::kit_error("invalid Inform 6 array declaration", NULL);
|
||||
I6Errors::issue(
|
||||
"cannot make array '%S': the initial value syntax is unrecognised",
|
||||
identifier);
|
||||
}
|
||||
} else {
|
||||
conts = value; grammatical = TRUE;
|
||||
|
@ -489,18 +491,16 @@ see why other kits would, either.
|
|||
|
||||
@<Eat off a chunk@> =
|
||||
text_stream *full_conts = entries;
|
||||
if (from > to) {
|
||||
PipelineErrors::kit_error("Inform 6 array contains empty entry", NULL);
|
||||
} else {
|
||||
int count_before = no_assimilated_array_entries;
|
||||
TEMPORARY_TEXT(conts)
|
||||
for (int j=from; j<=to; j++) PUT_TO(conts, Str::get_at(full_conts, j));
|
||||
@<Parse the old-style I6 array entry notation@>
|
||||
DISCARD_TEXT(conts)
|
||||
if (no_assimilated_array_entries == count_before)
|
||||
I6Errors::issue("array '%S' contains empty entry", identifier);
|
||||
if (no_assimilated_array_entries > count_before+1)
|
||||
PipelineErrors::kit_error(
|
||||
"Multiple entries between ';' markers in a '[ ...; ...; ... ]' array", NULL);
|
||||
}
|
||||
I6Errors::issue(
|
||||
"multiple entries between ';' markers in array '%S'", identifier);
|
||||
|
||||
@<Parse the old-style I6 array entry notation@> =
|
||||
string_position spos = Str::start(conts);
|
||||
|
@ -514,17 +514,21 @@ see why other kits would, either.
|
|||
|
||||
@<Process the token@> =
|
||||
if (Str::eq(value, I"+"))
|
||||
PipelineErrors::kit_error("Inform 6 array declaration using operator '+' "
|
||||
"(use brackets '(' ... ')' around the size for a calculated array size)", NULL);
|
||||
I6Errors::issue("array '%S' gives its size using operator '+' "
|
||||
"(use brackets '(' ... ')' around the size for a calculated array size)",
|
||||
identifier);
|
||||
else if (Str::eq(value, I"-"))
|
||||
PipelineErrors::kit_error("Inform 6 array declaration using operator '-' "
|
||||
"(use brackets '(' ... ')' around the size for a calculated array size)", NULL);
|
||||
I6Errors::issue("array '%S' gives its size using operator '-' "
|
||||
"(use brackets '(' ... ')' around the size for a calculated array size)",
|
||||
identifier);
|
||||
else if (Str::eq(value, I"*"))
|
||||
PipelineErrors::kit_error("Inform 6 array declaration using operator '*' "
|
||||
"(use brackets '(' ... ')' around the size for a calculated array size)", NULL);
|
||||
I6Errors::issue("array '%S' gives its size using operator '*' "
|
||||
"(use brackets '(' ... ')' around the size for a calculated array size)",
|
||||
identifier);
|
||||
else if (Str::eq(value, I"/"))
|
||||
PipelineErrors::kit_error("Inform 6 array declaration using operator '/' "
|
||||
"(use brackets '(' ... ')' around the size for a calculated array size)", NULL);
|
||||
I6Errors::issue("array '%S' gives its size using operator '/' "
|
||||
"(use brackets '(' ... ')' around the size for a calculated array size)",
|
||||
identifier);
|
||||
else {
|
||||
inter_pair val = InterValuePairs::undef();
|
||||
@<Assimilate a value@>;
|
||||
|
@ -671,7 +675,7 @@ equating it to a function definition elsewhere.
|
|||
|
||||
@<Add value to the entry pile@> =
|
||||
if (no_assimilated_array_entries >= MAX_ASSIMILATED_ARRAY_ENTRIES) {
|
||||
PipelineErrors::kit_error("excessively long Verb or Extend", NULL);
|
||||
I6Errors::issue("excessively long Verb or Extend", NULL);
|
||||
break;
|
||||
}
|
||||
val_pile[no_assimilated_array_entries] = val;
|
||||
|
@ -705,7 +709,7 @@ We are concerned more with the surround than with the contents of the function
|
|||
in this section.
|
||||
|
||||
@<Assimilate routine@> =
|
||||
PipelineErrors::set_kit_error_location_near_splat(P);
|
||||
I6Errors::set_current_location_near_splat(P);
|
||||
text_stream *raw_identifier = NULL, *local_var_names = NULL, *body = NULL;
|
||||
match_results mr = Regexp::create_mr();
|
||||
int line_offset = 0;
|
||||
|
@ -728,8 +732,12 @@ in this section.
|
|||
raw_identifier = mr.exp[0]; body = mr.exp[1]; pos = mr.exp_at[1];
|
||||
} else if (Regexp::match(&mr, S, L" *%[ *([A-Za-z0-9_`]+) *(%c*?); *(%c*)")) {
|
||||
raw_identifier = mr.exp[0]; local_var_names = mr.exp[1]; body = mr.exp[2]; pos = mr.exp_at[2];
|
||||
} else if (Regexp::match(&mr, S, L" *%[ *(%c+?) *; *(%c*)")) {
|
||||
I6Errors::issue("invalid Inform 6 routine declaration: '%S'", mr.exp[0]);
|
||||
} else {
|
||||
PipelineErrors::kit_error("invalid Inform 6 routine declaration", NULL);
|
||||
text_stream *start = Str::duplicate(S);
|
||||
Str::truncate(start, 50);
|
||||
I6Errors::issue("invalid Inform 6 routine declaration: '%S'", start);
|
||||
}
|
||||
for (int i=0; i<pos; i++)
|
||||
if (Str::get_at(S, i) == '\n')
|
||||
|
@ -763,7 +771,11 @@ supported only to avoid throwing errors.
|
|||
if ((N<0) || (N>15)) N = 1;
|
||||
for (int i=1; i<=N; i++) WRITE_TO(local_var_names, "x%d ", i);
|
||||
body = Str::duplicate(I"rfalse; ];");
|
||||
} else PipelineErrors::kit_error("invalid Inform 6 Stub declaration", NULL);
|
||||
} else {
|
||||
text_stream *start = Str::duplicate(S);
|
||||
Str::truncate(start, 50);
|
||||
I6Errors::issue("invalid #Stub declaration: '%S'", start);
|
||||
}
|
||||
|
||||
@ Function packages have a standardised shape in Inter, and though this is a
|
||||
matter of convention rather than a requirement, we will follow it here. So
|
||||
|
@ -820,14 +832,14 @@ These have package types |_function| and |_code| respectively.
|
|||
int invalid = FALSE;
|
||||
for (int i=0; i<Str::len(value); i++) {
|
||||
wchar_t c = Str::get_at(value, i);
|
||||
if ((i == 0) && (Characters::isdigit(c))) invalid = TRUE;
|
||||
if ((c != '_') && (Characters::isalnum(c) == FALSE) &&
|
||||
((i > 0) || (Characters::isdigit(c) == FALSE)))
|
||||
invalid = TRUE;
|
||||
(Characters::isdigit(c) == FALSE)) invalid = TRUE;
|
||||
}
|
||||
if (invalid) {
|
||||
text_stream *err = Str::new();
|
||||
WRITE_TO(err, "'%S' in function '%S'", value, identifier);
|
||||
PipelineErrors::kit_error("invalid Inform 6 local variable name: %S", err);
|
||||
I6Errors::issue("invalid Inform 6 local variable name: %S", err);
|
||||
}
|
||||
inter_symbol *loc_name =
|
||||
InterSymbolsTable::create_with_unique_name(InterPackage::scope(IP), value);
|
||||
|
@ -847,7 +859,7 @@ These have package types |_function| and |_code| respectively.
|
|||
while ((L>0) && (Characters::is_whitespace(Str::get_at(body, L-1)))) L--;
|
||||
Str::truncate(body, L);
|
||||
inter_ti B = (inter_ti) InterBookmark::baseline(IBM) + 1;
|
||||
text_provenance prov = PipelineErrors::get_kit_error_location();
|
||||
text_provenance prov = I6Errors::get_current_location();
|
||||
Provenance::advance_line(&prov, line_offset);
|
||||
CompileSplatsStage::function_body(css, IBM, IP, B, body, block_bookmark, identifier,
|
||||
SplatInstruction::namespace(P), prov);
|
||||
|
@ -860,12 +872,11 @@ void CompileSplatsStage::apply_annotations(text_stream *A, text_stream *NS, inte
|
|||
if (Str::get_last_char(NS) == '+') apply_private = FALSE;
|
||||
if (Str::get_last_char(NS) == '-') apply_private = TRUE;
|
||||
if (apply_private != NOT_APPLICABLE) L--;
|
||||
if (L > 0) {
|
||||
TEMPORARY_TEXT(N)
|
||||
if (L > 0) {
|
||||
for (int i=0; i<L; i++) PUT_TO(N, Str::get_at(NS, i));
|
||||
LOGIF(INTER_CONNECTORS, "Assign namespace '%S' to $3\n", N, S);
|
||||
InterSymbol::set_namespace(S, N);
|
||||
DISCARD_TEXT(N)
|
||||
}
|
||||
if (Str::len(A) > 0) {
|
||||
LOGIF(INTER_CONNECTORS, "Trying to apply '%S' to $3\n", A, S);
|
||||
|
@ -873,18 +884,20 @@ void CompileSplatsStage::apply_annotations(text_stream *A, text_stream *NS, inte
|
|||
if (Str::eq_insensitive(IA->identifier, I"private")) {
|
||||
if ((IA->terms == NULL) || (LinkedLists::len(IA->terms) == 0)) {
|
||||
if (apply_private == TRUE)
|
||||
PipelineErrors::kit_error("the +private annotation is redundant here", NULL);
|
||||
I6Errors::issue("the +private annotation is redundant in namespace '%S'", N);
|
||||
apply_private = TRUE;
|
||||
} else {
|
||||
PipelineErrors::kit_error("the +private annotation does not take any terms", NULL);
|
||||
I6Errors::issue(
|
||||
"the +private annotation does not take any terms", NULL);
|
||||
}
|
||||
} else if (Str::eq_insensitive(IA->identifier, I"public")) {
|
||||
if ((IA->terms == NULL) || (LinkedLists::len(IA->terms) == 0)) {
|
||||
if (apply_private == FALSE)
|
||||
PipelineErrors::kit_error("the +public annotation is redundant here", NULL);
|
||||
I6Errors::issue("the +public annotation is redundant in namespace '%S'", N);
|
||||
apply_private = FALSE;
|
||||
} else {
|
||||
PipelineErrors::kit_error("the +public annotation does not take any terms", NULL);
|
||||
I6Errors::issue(
|
||||
"the +public annotation does not take any terms", NULL);
|
||||
}
|
||||
} else if (Str::eq_insensitive(IA->identifier, I"replacing")) {
|
||||
text_stream *from = I"_"; int keeping = FALSE;
|
||||
|
@ -896,21 +909,28 @@ void CompileSplatsStage::apply_annotations(text_stream *A, text_stream *NS, inte
|
|||
} else if (Str::eq_insensitive(term->key, I"_")) {
|
||||
if (Str::eq(term->value, I"keeping")) keeping = TRUE;
|
||||
else {
|
||||
PipelineErrors::kit_error("expected 'from K' or 'keeping', not '%S'", term->value);
|
||||
I6Errors::issue(
|
||||
"expected 'from K' or 'keeping' in '+replacing(...)', not '%S'",
|
||||
term->value);
|
||||
}
|
||||
} else
|
||||
PipelineErrors::kit_error(
|
||||
"the +replacing annotation does not take the term '%S'", term->key);
|
||||
I6Errors::issue(
|
||||
"the +replacing annotation does not take the term '%S'",
|
||||
term->key);
|
||||
}
|
||||
InterSymbol::set_replacement(S, from);
|
||||
if (keeping) SymbolAnnotation::set_b(S, KEEPING_IANN, TRUE);
|
||||
} else if (Str::eq_insensitive(IA->identifier, I"namespace")) {
|
||||
I6Errors::issue(
|
||||
"the annotation '%S' must be followed by a ';'", A);
|
||||
} else {
|
||||
PipelineErrors::kit_error(
|
||||
"annotation '%S' not recognised", IA->identifier);
|
||||
I6Errors::issue(
|
||||
"the annotation '+%S' is not one of those allowed", IA->identifier);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (apply_private == TRUE) SymbolAnnotation::set_b(S, PRIVATE_IANN, TRUE);
|
||||
DISCARD_TEXT(N)
|
||||
}
|
||||
|
||||
@h Plumbing.
|
||||
|
@ -1135,7 +1155,7 @@ inter_pair CompileSplatsStage::value(pipeline_step *step, inter_bookmark *IBM,
|
|||
if (marker) *marker = FALSE;
|
||||
return InterValuePairs::symbolic(IBM, symb);
|
||||
} else {
|
||||
PipelineErrors::kit_error("unknown scope routine", S);
|
||||
I6Errors::issue("can't find any scope routine called '%S'", mr.exp[0]);
|
||||
return InterValuePairs::number(1);
|
||||
}
|
||||
}
|
||||
|
@ -1145,7 +1165,7 @@ inter_pair CompileSplatsStage::value(pipeline_step *step, inter_bookmark *IBM,
|
|||
if (marker) *marker = TRUE;
|
||||
return InterValuePairs::symbolic(IBM, symb);
|
||||
} else {
|
||||
PipelineErrors::kit_error("unknown noun routine", S);
|
||||
I6Errors::issue("can't find any noun routine called '%S'", mr.exp[0]);
|
||||
return InterValuePairs::number(1);
|
||||
}
|
||||
}
|
||||
|
@ -1179,12 +1199,12 @@ before they are needed.
|
|||
|
||||
@<Parse this as a possibly computed value@> =
|
||||
inter_schema *sch =
|
||||
ParsingSchemas::from_text(S, PipelineErrors::get_kit_error_location());
|
||||
ParsingSchemas::from_text(S, I6Errors::get_current_location());
|
||||
int excess_tokens = FALSE;
|
||||
inter_symbol *result_s =
|
||||
CompileSplatsStage::compute_r(step, IBM, sch->node_tree, &excess_tokens);
|
||||
if (result_s == NULL) {
|
||||
PipelineErrors::kit_error("Inform 6 constant too complex", S);
|
||||
if (result_s == NULL) { /* a precaution, but should no longer happen */
|
||||
I6Errors::issue("Inform 6 constant too complex", S);
|
||||
return InterValuePairs::number(1);
|
||||
}
|
||||
return InterValuePairs::symbolic(IBM, result_s);
|
||||
|
@ -1428,12 +1448,12 @@ void CompileSplatsStage::report_kit_errors(inter_schema *sch, function_body_requ
|
|||
if (LinkedLists::len(sch->parsing_errors) > 0) {
|
||||
schema_parsing_error *err;
|
||||
LOOP_OVER_LINKED_LIST(err, schema_parsing_error, sch->parsing_errors) {
|
||||
PipelineErrors::set_kit_error_location(err->provenance);
|
||||
I6Errors::set_current_location(err->provenance);
|
||||
TEMPORARY_TEXT(msg)
|
||||
WRITE_TO(msg, "in function '%S': %S", req->identifier, err->message);
|
||||
PipelineErrors::kit_error("Inform 6 syntax error %S", msg);
|
||||
I6Errors::issue("Inform 6 syntax error %S", msg);
|
||||
DISCARD_TEXT(msg)
|
||||
}
|
||||
PipelineErrors::clear_kit_error_location();
|
||||
I6Errors::clear_current_location();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -138,7 +138,7 @@ typedef struct rpi_docket_state {
|
|||
&(ParsingStages::receive_command),
|
||||
&(ParsingStages::receive_bplus),
|
||||
&(ParsingStages::line_marker),
|
||||
&(PipelineErrors::kit_error),
|
||||
&(I6Errors::issue),
|
||||
step->ephemera.the_kit, &state);
|
||||
|
||||
@ Once the I6T reader has unpacked the literate-programming notation, it will
|
||||
|
@ -318,71 +318,25 @@ Note that this function empties the splat buffer |R| before exiting.
|
|||
=
|
||||
void ParsingStages::splat(text_stream *R, simple_tangle_docket *docket) {
|
||||
if (Str::len(R) > 0) {
|
||||
rpi_docket_state *state = (rpi_docket_state *) docket->state;
|
||||
I6Errors::set_current_location(state->provenance);
|
||||
|
||||
TEMPORARY_TEXT(A)
|
||||
@<Find annotation, if any@>;
|
||||
inter_ti I6_dir = 0;
|
||||
|
||||
@<Find directive@>;
|
||||
if (I6_dir != WHITESPACE_PLM) {
|
||||
rpi_docket_state *state = (rpi_docket_state *) docket->state;
|
||||
inter_bookmark *IBM = state->assimilation_point;
|
||||
PUT_TO(R, '\n');
|
||||
filename *F = NULL;
|
||||
inter_ti lc = 0;
|
||||
if (Provenance::is_somewhere(state->provenance)) {
|
||||
F = Provenance::get_filename(state->provenance);
|
||||
lc = (inter_ti) Provenance::get_line(state->provenance);
|
||||
}
|
||||
Produce::guard(SplatInstruction::new(IBM, R, I6_dir, A, state->namespace,
|
||||
F, lc, (inter_ti) (InterBookmark::baseline(IBM) + 1), NULL));
|
||||
} else if (A) {
|
||||
if (I6_dir != WHITESPACE_PLM) @<Splat the directive@>
|
||||
else if (A) {
|
||||
I6_annotation *IA = I6Annotations::parse(A);
|
||||
if ((IA) && (Str::eq_insensitive(IA->identifier, I"namespace"))) {
|
||||
rpi_docket_state *state = (rpi_docket_state *) docket->state;
|
||||
Str::clear(state->namespace);
|
||||
int private = NOT_APPLICABLE;
|
||||
I6_annotation_term *term;
|
||||
LOOP_OVER_LINKED_LIST(term, I6_annotation_term, IA->terms) {
|
||||
if (Str::eq_insensitive(term->key, I"_")) {
|
||||
WRITE_TO(state->namespace, "%S", term->value);
|
||||
} else if (Str::eq_insensitive(term->key, I"access")) {
|
||||
if (Str::eq_insensitive(term->value, I"private")) private = TRUE;
|
||||
else if (Str::eq_insensitive(term->value, I"public")) private = FALSE;
|
||||
else PipelineErrors::kit_error(
|
||||
"the 'access' must be 'private' or 'public', not '%S'", term->value);
|
||||
@<Respond to a change of namespace@>;
|
||||
} else {
|
||||
PipelineErrors::kit_error(
|
||||
"the +namespace annotation does not take the term '%S'", term->key);
|
||||
}
|
||||
}
|
||||
int bad_name = FALSE;
|
||||
for (int i=0; i<Str::len(state->namespace); i++) {
|
||||
wchar_t c = Str::get_at(state->namespace, i);
|
||||
if (i == 0) {
|
||||
if (Characters::isalpha(c) == FALSE) bad_name = TRUE;
|
||||
} else {
|
||||
if ((Characters::isalnum(c) == FALSE) && (c != '_')) bad_name = TRUE;
|
||||
}
|
||||
}
|
||||
if (bad_name)
|
||||
PipelineErrors::kit_error(
|
||||
"a namespace name should begin with a letter and contain "
|
||||
"only alphanumeric characters or '_'", NULL);
|
||||
if (Str::len(state->namespace) == 0)
|
||||
PipelineErrors::kit_error(
|
||||
"use '+namespace(main);' to return to the global namespace", NULL);
|
||||
if (Str::eq(state->namespace, I"main")) Str::clear(state->namespace);
|
||||
if (Str::eq(state->namespace, I"replaced")) {
|
||||
PipelineErrors::kit_error(
|
||||
"the namespace 'replaced' is reserved, and cannot be used directly", NULL);
|
||||
Str::clear(state->namespace);
|
||||
}
|
||||
if (private == TRUE) PUT_TO(state->namespace, '-');
|
||||
if (private == FALSE) PUT_TO(state->namespace, '+');
|
||||
} else {
|
||||
(*(docket->error_callback))(
|
||||
"this annotation seems not to apply to any directive: '%S'", A);
|
||||
I6Errors::issue(
|
||||
"the annotation '%S' seems not to apply to any directive: "
|
||||
"only '+namespace' can do that", A);
|
||||
}
|
||||
I6Errors::clear_current_location();
|
||||
}
|
||||
Str::clear(R);
|
||||
DISCARD_TEXT(A)
|
||||
|
@ -392,8 +346,7 @@ void ParsingStages::splat(text_stream *R, simple_tangle_docket *docket) {
|
|||
@<Find annotation, if any@> =
|
||||
int verdict = I6Annotations::check(R);
|
||||
if (verdict == -1) {
|
||||
(*(docket->error_callback))(
|
||||
"this Inform 6 annotation is malformed: '%S'", R);
|
||||
I6Errors::issue("this +annotation is malformed: '%S'", R);
|
||||
} else {
|
||||
for (int i=0; i<verdict; i++) PUT_TO(A, Str::get_at(R, i));
|
||||
Str::trim_white_space(A);
|
||||
|
@ -409,13 +362,13 @@ the directive type as 0.
|
|||
match_results mr = Regexp::create_mr();
|
||||
if (Regexp::match(&mr, R, L" *(%[) *(%c*);%c*")) {
|
||||
I6_dir = ROUTINE_PLM;
|
||||
} else if (Regexp::match(&mr, R, L" *(%C+) *(%c*);%c*")) {
|
||||
if (Str::eq_insensitive(mr.exp[0], I"#ifdef")) I6_dir = IFDEF_PLM;
|
||||
else if (Str::eq_insensitive(mr.exp[0], I"#ifndef")) I6_dir = IFNDEF_PLM;
|
||||
else if (Str::eq_insensitive(mr.exp[0], I"#iftrue")) I6_dir = IFTRUE_PLM;
|
||||
else if (Str::eq_insensitive(mr.exp[0], I"#ifnot")) I6_dir = IFNOT_PLM;
|
||||
else if (Str::eq_insensitive(mr.exp[0], I"#endif")) I6_dir = ENDIF_PLM;
|
||||
else if (Str::eq_insensitive(mr.exp[0], I"#stub")) I6_dir = STUB_PLM;
|
||||
} else if (Regexp::match(&mr, R, L" *#*(%C+) *(%c*);%c*")) {
|
||||
if (Str::eq_insensitive(mr.exp[0], I"Ifdef")) I6_dir = IFDEF_PLM;
|
||||
else if (Str::eq_insensitive(mr.exp[0], I"Ifndef")) I6_dir = IFNDEF_PLM;
|
||||
else if (Str::eq_insensitive(mr.exp[0], I"Iftrue")) I6_dir = IFTRUE_PLM;
|
||||
else if (Str::eq_insensitive(mr.exp[0], I"Ifnot")) I6_dir = IFNOT_PLM;
|
||||
else if (Str::eq_insensitive(mr.exp[0], I"Endif")) I6_dir = ENDIF_PLM;
|
||||
else if (Str::eq_insensitive(mr.exp[0], I"Stub")) I6_dir = STUB_PLM;
|
||||
else if (Str::eq_insensitive(mr.exp[0], I"Constant")) I6_dir = CONSTANT_PLM;
|
||||
else if (Str::eq_insensitive(mr.exp[0], I"Global")) I6_dir = GLOBAL_PLM;
|
||||
else if (Str::eq_insensitive(mr.exp[0], I"Array")) I6_dir = ARRAY_PLM;
|
||||
|
@ -434,11 +387,100 @@ the directive type as 0.
|
|||
(Str::get(pos) != ';'))
|
||||
I6_dir = MYSTERY_PLM;
|
||||
}
|
||||
if (I6_dir == MYSTERY_PLM)
|
||||
(*(docket->error_callback))(
|
||||
"this Inform 6 directive is not supported in kits or '(-' inclusions: '%S'", R);
|
||||
if (I6_dir == MYSTERY_PLM) {
|
||||
int known = FALSE;
|
||||
if (Str::eq_insensitive(mr.exp[0], I"Ifv3")) known = TRUE;
|
||||
else if (Str::eq_insensitive(mr.exp[0], I"Ifv5")) known = TRUE;
|
||||
else if (Str::eq_insensitive(mr.exp[0], I"Iffalse")) known = TRUE;
|
||||
else if (Str::eq_insensitive(mr.exp[0], I"Abbreviate")) known = TRUE;
|
||||
else if (Str::eq_insensitive(mr.exp[0], I"Dictionary")) known = TRUE;
|
||||
else if (Str::eq_insensitive(mr.exp[0], I"Import")) known = TRUE;
|
||||
else if (Str::eq_insensitive(mr.exp[0], I"Link")) known = TRUE;
|
||||
else if (Str::eq_insensitive(mr.exp[0], I"Lowstring")) known = TRUE;
|
||||
else if (Str::eq_insensitive(mr.exp[0], I"Origsource")) known = TRUE;
|
||||
else if (Str::eq_insensitive(mr.exp[0], I"Replace")) known = TRUE;
|
||||
else if (Str::eq_insensitive(mr.exp[0], I"Switches")) known = TRUE;
|
||||
else if (Str::eq_insensitive(mr.exp[0], I"Trace")) known = TRUE;
|
||||
else if (Str::eq_insensitive(mr.exp[0], I"Undef")) known = TRUE;
|
||||
else if (Str::eq_insensitive(mr.exp[0], I"Version")) known = TRUE;
|
||||
if (known)
|
||||
I6Errors::issue(
|
||||
"this Inform 6 directive is not supported in kits or '(-' inclusions: '%S' "
|
||||
"(only #Ifdef, #Ifndef, #Iftrue, #Ifnot, #Endif, #Stub, Constant, Global, "
|
||||
"Array, Attribute, Property, Verb, Fake_action, Object, Default are "
|
||||
"supported)", R);
|
||||
else
|
||||
I6Errors::issue("this is not an Inform 6 directive", R);
|
||||
}
|
||||
Regexp::dispose_of(&mr);
|
||||
|
||||
@<Splat the directive@> =
|
||||
inter_bookmark *IBM = state->assimilation_point;
|
||||
PUT_TO(R, '\n');
|
||||
filename *F = NULL;
|
||||
inter_ti lc = 0;
|
||||
if (Provenance::is_somewhere(state->provenance)) {
|
||||
F = Provenance::get_filename(state->provenance);
|
||||
lc = (inter_ti) Provenance::get_line(state->provenance);
|
||||
}
|
||||
Produce::guard(SplatInstruction::new(IBM, R, I6_dir, A, state->namespace,
|
||||
F, lc, (inter_ti) (InterBookmark::baseline(IBM) + 1), NULL));
|
||||
|
||||
@ So the following picks up |+namespace(Whatever)| annotations, which do not
|
||||
apply to any directive.
|
||||
|
||||
@<Respond to a change of namespace@> =
|
||||
Str::clear(state->namespace);
|
||||
int private = NOT_APPLICABLE;
|
||||
I6_annotation_term *term;
|
||||
LOOP_OVER_LINKED_LIST(term, I6_annotation_term, IA->terms) {
|
||||
if (Str::eq_insensitive(term->key, I"_")) {
|
||||
WRITE_TO(state->namespace, "%S", term->value);
|
||||
} else if (Str::eq_insensitive(term->key, I"access")) {
|
||||
if (Str::eq_insensitive(term->value, I"private")) private = TRUE;
|
||||
else if (Str::eq_insensitive(term->value, I"public")) private = FALSE;
|
||||
else I6Errors::issue(
|
||||
"in a +namespace annotation, the 'access' must be 'private' or "
|
||||
"'public', not '%S'", term->value);
|
||||
} else {
|
||||
I6Errors::issue(
|
||||
"the +namespace annotation does not take the term '%S'", term->key);
|
||||
}
|
||||
}
|
||||
@<Vet the new namespace name@>;
|
||||
if (private == TRUE) PUT_TO(state->namespace, '-');
|
||||
if (private == FALSE) PUT_TO(state->namespace, '+');
|
||||
|
||||
@<Vet the new namespace name@> =
|
||||
int bad_name = FALSE;
|
||||
for (int i=0; i<Str::len(state->namespace); i++) {
|
||||
wchar_t c = Str::get_at(state->namespace, i);
|
||||
if (i == 0) {
|
||||
if (Characters::isalpha(c) == FALSE) bad_name = TRUE;
|
||||
} else {
|
||||
if ((Characters::isalnum(c) == FALSE) && (c != '_')) bad_name = TRUE;
|
||||
}
|
||||
}
|
||||
if (bad_name)
|
||||
I6Errors::issue(
|
||||
"the namespace '%S' is not allowed: namespace names should begin "
|
||||
"with a letter and contain only alphanumeric characters or '_'",
|
||||
state->namespace);
|
||||
if (Str::len(state->namespace) == 0)
|
||||
I6Errors::issue(
|
||||
"'+namespace()' is not allowed: use '+namespace(main);' to return "
|
||||
"to the global namespace", NULL);
|
||||
if (Str::eq(state->namespace, I"main")) Str::clear(state->namespace);
|
||||
else if (Str::eq_insensitive(state->namespace, I"main"))
|
||||
I6Errors::issue(
|
||||
"'+namespace(...)' names are case-sensitive: use 'main', not '%S', "
|
||||
"to return to the global namespace", state->namespace);
|
||||
if (Str::eq(state->namespace, I"replaced")) {
|
||||
I6Errors::issue(
|
||||
"the namespace 'replaced' is reserved, and cannot be used directly", NULL);
|
||||
Str::clear(state->namespace);
|
||||
}
|
||||
|
||||
@ And that's it: the result of these stages is just to break the I6T source they
|
||||
found up into individual directives, and put them into the tree as |SPLAT_IST| nodes.
|
||||
No effort has been made yet to see what directives they are. Subsequent stages
|
||||
|
|
|
@ -72,8 +72,9 @@ void ResolveConditionalsStage::resolve(inter_tree *I) {
|
|||
state.cc_sp = 0;
|
||||
InterTree::traverse(I, ResolveConditionalsStage::visitor, &state, NULL, 0);
|
||||
if (state.cc_sp != 0)
|
||||
PipelineErrors::kit_error(
|
||||
I6Errors::issue(
|
||||
"conditional compilation wrongly structured: not enough #endif", NULL);
|
||||
I6Errors::clear_current_location();
|
||||
}
|
||||
|
||||
@ Note that when the top of the stack is a block whose body is not to be compiled,
|
||||
|
@ -86,6 +87,7 @@ void ResolveConditionalsStage::visitor(inter_tree *I, inter_tree_node *P, void *
|
|||
int compile_this = TRUE;
|
||||
for (int i=0; i<state->cc_sp; i++) if (state->cc_stack[i] == FALSE) compile_this = FALSE;
|
||||
if (Inode::is(P, SPLAT_IST)) {
|
||||
I6Errors::set_current_location_near_splat(P);
|
||||
text_stream *S = SplatInstruction::splatter(P);
|
||||
switch (SplatInstruction::plm(P)) {
|
||||
case CONSTANT_PLM:
|
||||
|
@ -176,17 +178,55 @@ Inform kits use this only to test |#Iftrue WORDSIZE == 4| or |#Iftrue WORDSIZE =
|
|||
match_results mr2 = Regexp::create_mr();
|
||||
if (Regexp::match(&mr2, cond, L" *(%C+?) *== *(%d+) *")) {
|
||||
text_stream *identifier = mr2.exp[0];
|
||||
inter_symbol *symbol =
|
||||
LargeScale::architectural_symbol(I, identifier);
|
||||
inter_symbol *symbol = LargeScale::architectural_symbol(I, identifier);
|
||||
if (symbol) {
|
||||
int V = InterSymbol::evaluate_to_int(symbol);
|
||||
int W = Str::atoi(mr2.exp[1], 0);
|
||||
if ((V >= 0) && (V == W)) result = TRUE; else result = FALSE;
|
||||
}
|
||||
}
|
||||
if (Regexp::match(&mr2, cond, L" *(%C+?) *>= *(%d+) *")) {
|
||||
text_stream *identifier = mr2.exp[0];
|
||||
inter_symbol *symbol = LargeScale::architectural_symbol(I, identifier);
|
||||
if (symbol) {
|
||||
int V = InterSymbol::evaluate_to_int(symbol);
|
||||
int W = Str::atoi(mr2.exp[1], 0);
|
||||
if ((V >= 0) && (V >= W)) result = TRUE; else result = FALSE;
|
||||
}
|
||||
}
|
||||
if (Regexp::match(&mr2, cond, L" *(%C+?) *> *(%d+) *")) {
|
||||
text_stream *identifier = mr2.exp[0];
|
||||
inter_symbol *symbol = LargeScale::architectural_symbol(I, identifier);
|
||||
if (symbol) {
|
||||
int V = InterSymbol::evaluate_to_int(symbol);
|
||||
int W = Str::atoi(mr2.exp[1], 0);
|
||||
if ((V >= 0) && (V > W)) result = TRUE; else result = FALSE;
|
||||
}
|
||||
}
|
||||
if (Regexp::match(&mr2, cond, L" *(%C+?) *<= *(%d+) *")) {
|
||||
text_stream *identifier = mr2.exp[0];
|
||||
inter_symbol *symbol = LargeScale::architectural_symbol(I, identifier);
|
||||
if (symbol) {
|
||||
int V = InterSymbol::evaluate_to_int(symbol);
|
||||
int W = Str::atoi(mr2.exp[1], 0);
|
||||
if ((V >= 0) && (V <= W)) result = TRUE; else result = FALSE;
|
||||
}
|
||||
}
|
||||
if (Regexp::match(&mr2, cond, L" *(%C+?) *< *(%d+) *")) {
|
||||
text_stream *identifier = mr2.exp[0];
|
||||
inter_symbol *symbol = LargeScale::architectural_symbol(I, identifier);
|
||||
if (symbol) {
|
||||
int V = InterSymbol::evaluate_to_int(symbol);
|
||||
int W = Str::atoi(mr2.exp[1], 0);
|
||||
if ((V >= 0) && (V < W)) result = TRUE; else result = FALSE;
|
||||
}
|
||||
}
|
||||
if (result == NOT_APPLICABLE) {
|
||||
PipelineErrors::kit_error(
|
||||
"conditional compilation is too difficult: #iftrue on %S", cond);
|
||||
I6Errors::issue(
|
||||
"conditional compilation is too difficult: #iftrue on '%S' "
|
||||
"(can only test SYMBOL == DECIMALVALUE, or >, <, >=, <=, where "
|
||||
"the DECIMALVALUE is non-negative, and even then only for a few "
|
||||
"symbols, of which 'WORDSIZE' is the most useful)", cond);
|
||||
result = FALSE;
|
||||
}
|
||||
LOGIF(RESOLVING_CONDITIONAL_COMPILATION, "Must decide if %S: ", cond);
|
||||
|
@ -199,7 +239,7 @@ Inform kits use this only to test |#Iftrue WORDSIZE == 4| or |#Iftrue WORDSIZE =
|
|||
@<Stack up the result@> =
|
||||
if (state->cc_sp >= MAX_CC_STACK_SIZE) {
|
||||
state->cc_sp = MAX_CC_STACK_SIZE;
|
||||
PipelineErrors::kit_error(
|
||||
I6Errors::issue(
|
||||
"conditional compilation wrongly structured: too many nested #ifdef or #iftrue", NULL);
|
||||
} else {
|
||||
state->cc_stack[state->cc_sp++] = result;
|
||||
|
@ -208,7 +248,7 @@ Inform kits use this only to test |#Iftrue WORDSIZE == 4| or |#Iftrue WORDSIZE =
|
|||
@<Deal with an IFNOT@> =
|
||||
LOGIF(RESOLVING_CONDITIONAL_COMPILATION, "ifnot\n");
|
||||
if (state->cc_sp == 0)
|
||||
PipelineErrors::kit_error("conditional compilation wrongly structured: #ifnot at top level", NULL);
|
||||
I6Errors::issue("conditional compilation wrongly structured: #ifnot at top level", NULL);
|
||||
else
|
||||
state->cc_stack[state->cc_sp-1] = (state->cc_stack[state->cc_sp-1])?FALSE:TRUE;
|
||||
compile_this = FALSE;
|
||||
|
@ -219,7 +259,7 @@ Inform kits use this only to test |#Iftrue WORDSIZE == 4| or |#Iftrue WORDSIZE =
|
|||
state->cc_sp--;
|
||||
if (state->cc_sp < 0) {
|
||||
state->cc_sp = 0;
|
||||
PipelineErrors::kit_error("conditional compilation wrongly structured: too many #endif", NULL);
|
||||
I6Errors::issue("conditional compilation wrongly structured: too many #endif", NULL);
|
||||
}
|
||||
compile_this = FALSE;
|
||||
|
||||
|
|
Loading…
Reference in a new issue