1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-06-26 12:10:44 +03:00

Enabled indirect function calls from I6 inclusions in I7

This commit is contained in:
Graham Nelson 2022-05-10 10:43:18 +01:00
parent 7b9d87a1c7
commit 1ecf77049c
19 changed files with 1457 additions and 1393 deletions

View file

@ -1,6 +1,6 @@
# Inform 7
v10.1.0-beta+6V02 'Krypton' (9 May 2022)
v10.1.0-beta+6V03 'Krypton' (10 May 2022)
## About Inform 7

View file

@ -1,3 +1,3 @@
Prerelease: beta
Build Date: 9 May 2022
Build Number: 6V02
Build Date: 10 May 2022
Build Number: 6V03

View file

@ -210,8 +210,8 @@ generated anyway; Inform authors never type them.
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;translates-into-unicode-sentence-subject&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;unicode-character-name&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { pass 1 }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { -1, - }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">(</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">)</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span>
<span class="Preform-function-syntax">&lt;translates-into-unicode-sentence-object&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;cardinal-number-unlimited&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { UnicodeLiterals::max(R[1]), - }</span>
@ -242,7 +242,8 @@ generated anyway; Inform authors never type them.
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">cc</span><span class="plain-syntax"> = </span><span class="function-syntax">&lt;&lt;r&gt;&gt;</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="function-syntax">&lt;translates-into-unicode-sentence-subject&gt;</span><span class="plain-syntax">(</span><span class="identifier-syntax">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="function-syntax">&lt;&lt;r&gt;&gt;</span><span class="plain-syntax"> != -1) &amp;&amp; (</span><span class="function-syntax">&lt;&lt;r&gt;&gt;</span><span class="plain-syntax"> != </span><span class="identifier-syntax">cc</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">CN</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;translates-into-unicode-sentence-subject&gt;</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">if</span><span class="plain-syntax"> ((</span><span class="function-syntax">&lt;unicode-character-name&gt;</span><span class="plain-syntax">(</span><span class="identifier-syntax">CN</span><span class="plain-syntax">)) &amp;&amp; (</span><span class="function-syntax">&lt;&lt;r&gt;&gt;</span><span class="plain-syntax"> != </span><span class="identifier-syntax">cc</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::sentence_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_UnicodeAlready</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="string-syntax">"this Unicode character name has already been translated"</span><span class="plain-syntax">,</span>
@ -250,7 +251,7 @@ generated anyway; Inform authors never type them.
<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">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">SP</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">, </span><span class="identifier-syntax">ADD_TO_LEXICON_NTOPT</span><span class="plain-syntax">, </span><span class="identifier-syntax">MISCELLANEOUS_MC</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">CN</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">, </span><span class="identifier-syntax">ADD_TO_LEXICON_NTOPT</span><span class="plain-syntax">, </span><span class="identifier-syntax">MISCELLANEOUS_MC</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Diagrams::new_PROPER_NOUN</span><span class="plain-syntax">(</span><span class="identifier-syntax">OP</span><span class="plain-syntax">), </span><span class="identifier-syntax">Task::language_of_syntax</span><span class="plain-syntax">());</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-tr.html#SP4">&#167;4</a>.</li></ul>

View file

@ -592,7 +592,7 @@ changed back again very soon after.
<span class="plain-syntax"> (</span><span class="identifier-syntax">n</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">expression_tokens</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">inline_command</span><span class="plain-syntax"> == </span><span class="constant-syntax">combine_ISINC</span><span class="plain-syntax">)) </span><span class="identifier-syntax">argc</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">argc</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">);</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>
<span class="plain-syntax"> </span><a href="3-prd.html#SP24" class="function-link"><span class="function-syntax">Produce::inv_primitive</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
</pre>

View file

@ -169,6 +169,12 @@ exist. See <a href="3-ic.html#SP7" class="internal">InterInstruction::tree_lint<
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">InterErrors::backtrace</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">InterErrors::backtrace</span></span>:<br/>Node Placement - <a href="2-np.html#SP3_1">&#167;3.1</a><br/>Inter Constructs - <a href="3-ic.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-it.html#SP4" class="function-link"><span class="function-syntax">InterTree::parent</span></a><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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"No backtrace possible because problem node has no parent:\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-ic.html#SP19" class="function-link"><span class="function-syntax">InterInstruction::write_construct_text_allowing_nop</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Backtrace of Inter code ('**' marks the problem node):\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">X</span><span class="plain-syntax"> = </span><span class="identifier-syntax">F</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">n</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">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">) {</span>

View file

@ -187,6 +187,9 @@ well the entire tree by the end.
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">NOP_IST:</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">COMMENT_IST:</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">INVALID_IST:</span><span class="plain-syntax"> </span><span class="identifier-syntax">InterErrors::backtrace</span><span class="plain-syntax">(</span><span class="identifier-syntax">DL</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">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"INVALID node type in Inter tree"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">default:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">InterInstruction::write_construct_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">DL</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">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"unexpected node type in Inter tree"</span><span class="plain-syntax">);</span>

View file

@ -379,7 +379,9 @@ the directive type as 0.
<pre class="displayed-code all-displayed-code code-font">
<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">(&amp;</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">Regexp::match</span><span class="plain-syntax">(&amp;</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">(&amp;</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>
@ -389,7 +391,6 @@ the directive type as 0.
<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>
<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">"["</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">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">"Attribute"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">I6_dir</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ATTRIBUTE_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">"Property"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">I6_dir</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PROPERTY_PLM</span><span class="plain-syntax">;</span>

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1,6 @@
Total memory consumption was 123347K = 120 MB
---- was used for 2044308 objects, in 362627 frames in 0 x 800K = 0K = 0 MB:
---- was used for 2044310 objects, in 362629 frames in 0 x 800K = 0K = 0 MB:
33.1% inter_tree_node_array 58 x 8192 = 475136 objects, 41813824 bytes
20.5% text_stream_array 4603 x 100 = 460300 objects, 25924096 bytes
@ -27,7 +27,7 @@ Total memory consumption was 123347K = 120 MB
0.7% adjective_meaning 202 objects, 1000304 bytes
0.7% excerpt_meaning 3101 objects, 967512 bytes
0.7% production 3877 objects, 899464 bytes
0.6% ptoken 8394 objects, 872976 bytes
0.6% ptoken 8396 objects, 873184 bytes
0.6% grammatical_usage 3612 objects, 866880 bytes
0.6% individual_form 2562 objects, 860832 bytes
0.6% inter_schema_node 8920 objects, 856320 bytes
@ -255,5 +255,5 @@ Total memory consumption was 123347K = 120 MB
---- code generation workspace for objects 1336 bytes in 4 claims
0.2% emitter array storage 280032 bytes in 1997 claims
-145.-5% was overhead - -183807336 bytes = -179499K = -175 MB
-145.-5% was overhead - -183807544 bytes = -179499K = -175 MB

View file

@ -1,11 +1,11 @@
<s-literal> hits 2100/23892 nti 22 constraint (none) extremes [1, infinity)
<s-literal> hits 2100/23892 nti 23 constraint (none) extremes [1, infinity)
English:
(@1)<cardinal-number>=1
(hits 171/171) (matched: '100') constraint CS = {r0} extremes [1, 1]
(@1)minus (@2)<cardinal-number>=1
(hits 0/1466) constraint DS = {22} extremes [2, 2]
(hits 0/1411) constraint DS = {23} extremes [2, 2]
(@1)<quoted-text>=1 (@2)( (@3)<response-letter>=2 (@4))
(hits 274/827) (matched: '"[current item from the multiple object list]: [run paragraph on]" ( a )') constraint DS = {22} extremes [4, 4]
(hits 274/731) (matched: '"[current item from the multiple object list]: [run paragraph on]" ( a )') constraint DS = {23} extremes [4, 4]
(@1)<quoted-text>=1
(hits 1566/5559) (matched: 'Represents geographical locations, both indoor
and outdoor, which are not necessarily areas in a building. A player in one
@ -14,12 +14,12 @@
<s-literal-real-number>=1
(hits 11/9935) (matched: 'plus infinity') constraint (none) extremes [1, infinity)
(@1)<s-literal-truth-state>=1
(hits 78/832) (matched: 'false') constraint CS = {16} extremes [1, 1]
(hits 78/833) (matched: 'false') constraint CS = {17} extremes [1, 1]
<s-literal-list>=1
(hits 0/3248) constraint DS = {18} extremes [2, infinity)
(hits 0/3261) constraint DS = {19} extremes [2, infinity)
(@1)unicode <s-unicode-character>=1
(hits 0/3474) constraint DS = {22} extremes [2, infinity)
(hits 0/3221) constraint DS = {23} extremes [2, infinity)
<s-literal-time>=1
(hits 0/3769) constraint DW = {19, 20, 21} extremes [2, 5]
(hits 0/3766) constraint DW = {20, 21, 22} extremes [2, 5]
<s-literal-unit-notation>=1
(hits 0/9846) constraint (none) extremes [1, infinity)

View file

@ -1,33 +1,37 @@
100.0% in inform7 run
71.2% in compilation to Inter
50.7% in //Sequence::undertake_queued_tasks//
4.4% in //MajorNodes::pre_pass//
3.4% in //MajorNodes::pass_1//
2.0% in //RTPhrasebook::compile_entries//
1.8% in //ImperativeDefinitions::assess_all//
1.6% in //RTKindConstructors::compile//
70.9% in compilation to Inter
50.8% in //Sequence::undertake_queued_tasks//
4.6% in //MajorNodes::pre_pass//
3.2% in //MajorNodes::pass_1//
1.9% in //ImperativeDefinitions::assess_all//
1.8% in //RTPhrasebook::compile_entries//
1.5% in //RTKindConstructors::compile//
1.0% in //Sequence::lint_inter//
0.6% in //MajorNodes::pass_2//
0.6% in //Sequence::undertake_queued_tasks//
0.6% in //World::stage_V//
0.4% in //ImperativeDefinitions::compile_first_block//
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//
0.2% in //World::stages_II_and_III//
2.6% not specifically accounted for
25.9% in running Inter pipeline
0.1% in //InferenceSubjects::emit_all//
0.1% in //Task::make_built_in_kind_constructors//
0.1% in //Understand::traverse//
0.1% in //World::stages_II_and_III//
2.2% not specifically accounted for
26.3% in running Inter pipeline
10.2% in step 14/15: generate inform6 -> auto.inf
5.8% in step 6/15: make-synoptic-module
5.6% in step 5/15: load-binary-kits
5.4% in step 6/15: make-synoptic-module
1.4% in step 9/15: make-identifiers-unique
1.5% 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.4% in step 8/15: detect-indirect-calls
0.3% in step 7/15: shorten-wiring
0.3% in step 8/15: detect-indirect-calls
0.2% in step 11/15: eliminate-redundant-labels
1.4% not specifically accounted for
2.4% in supervisor
0.1% in step 10/15: reconcile-verbs
0.1% in step 2/15: parse-insertions
0.1% in step 3/15: resolve-conditional-compilation
0.7% not specifically accounted for
2.2% in supervisor
0.5% not specifically accounted for

View file

@ -0,0 +1,27 @@
To begin:
perform the test.
To perform the test: (- beta(); -)
To expostulate mildly about (N - a number) (this is the irked function):
say "I do think this is a pity, given [N]."
To expostulate firmly (this is the riled function):
say "Oh really! This is too much!"
Include (-
[ alpha;
print "alpha called^";
];
[beta n plugh;
print "beta called^";
alpha();
plugh = alpha;
plugh();
((+ irked function +)-->1)(7);
((+ irked function +)-->1)(22);
((+ riled function +)-->1)();
];
-)

View file

@ -0,0 +1,6 @@
beta called
alpha called
alpha called
I do think this is a pity, given 7.
I do think this is a pity, given 22.
Oh really! This is too much!

View file

@ -3,11 +3,13 @@ inter: inter/Tests/Invalid/misinv.intert, line 10: no such symbol: 'K_odour'
inter: inter/Tests/Invalid/misinv.intert, line 27: value 'x' has type /main/K_colour which is not a /main/K_number
>--> ref (/main/K_number) x
inter: inter/Tests/Invalid/misinv.intert, line 19: this inv of !increment should have 1 argument(s), but has 0
Backtrace of Inter code ('**' marks the problem node):
1. package main _plain
2. package R_101 _code
3. code
4. ** inv !increment
inter: inter/Tests/Invalid/misinv.intert, line 22: operand 2 of inv 'R_102' should be val, but this is ref
Backtrace of Inter code ('**' marks the problem node):
1. package main _plain
2. package R_101 _code
3. code
@ -15,18 +17,21 @@ inter: inter/Tests/Invalid/misinv.intert, line 22: operand 2 of inv 'R_102' shou
5. val (/main/K_number) 12
5. ref S_stuff
inter: inter/Tests/Invalid/misinv.intert, line 24: operand 1 of inv '!increment' should be ref, but this is val
Backtrace of Inter code ('**' marks the problem node):
1. package main _plain
2. package R_101 _code
3. code
4. ** inv !increment
5. val (/main/K_number) 2
inter: inter/Tests/Invalid/misinv.intert, line 26: operand 1 of inv 'R_101' should be val, but this is void
Backtrace of Inter code ('**' marks the problem node):
1. package main _plain
2. package R_101 _code
3. code
4. ** inv /main/R_101
5. inv !increment
inter: inter/Tests/Invalid/misinv.intert, line 26: this inv of !increment should have 1 argument(s), but has 0
Backtrace of Inter code ('**' marks the problem node):
1. package main _plain
2. package R_101 _code
3. code
@ -34,6 +39,7 @@ inter: inter/Tests/Invalid/misinv.intert, line 26: this inv of !increment should
5. ** inv !increment
inter: inter/Tests/Invalid/misinv.intert, line 12: symbol undefined in package: 'S_stuff'
inter: inter/Tests/Invalid/misinv.intert, line 31: this inv of !increment should have 1 argument(s), but has 0
Backtrace of Inter code ('**' marks the problem node):
1. package main _plain
2. package R_102 _code
3. code

View file

@ -443,7 +443,7 @@ changed back again very soon after.
(n->expression_tokens->inline_command == combine_ISINC)) argc++;
argc++;
}
inter_ti BIP = Primitives::BIP_for_indirect_call_returning_value(argc);
inter_ti BIP = Primitives::BIP_for_indirect_call_returning_value(argc-1);
Produce::inv_primitive(I, BIP);
}

View file

@ -104,6 +104,12 @@ exist. See //InterInstruction::tree_lint//.
=
void InterErrors::backtrace(OUTPUT_STREAM, inter_tree_node *F) {
if (InterTree::parent(F) == NULL) {
WRITE("No backtrace possible because problem node has no parent:\n");
InterInstruction::write_construct_text_allowing_nop(OUT, F);
return;
}
WRITE("Backtrace of Inter code ('**' marks the problem node):\n");
inter_tree_node *X = F;
int n = 0;
while (TRUE) {

View file

@ -113,6 +113,9 @@ void Vanilla::node(code_generation *gen, inter_tree_node *P) {
case NOP_IST: break;
case COMMENT_IST: break;
case INVALID_IST: InterErrors::backtrace(DL, P);
internal_error("INVALID node type in Inter tree");
default:
InterInstruction::write_construct_text(DL, P);
internal_error("unexpected node type in Inter tree");

View file

@ -654,7 +654,7 @@ we can treat |INDIRECT0V_BIP| as the same as |INDIRECT0_BIP|, and so on.
@<Indirect function calls@> =
case INDIRECT0_BIP: case INDIRECT0V_BIP:
WRITE("("); VNODE_1C; WRITE(")()"); break;
case INDIRECT1_BIP: case INDIRECT1V_BIP:
case INDIRECT1_BIP: case INDIRECT1V_BIP:
WRITE("("); VNODE_1C; WRITE(")("); VNODE_2C; WRITE(")"); break;
case INDIRECT2_BIP: case INDIRECT2V_BIP:
WRITE("("); VNODE_1C; WRITE(")("); VNODE_2C; WRITE(","); VNODE_3C; WRITE(")");

View file

@ -290,7 +290,9 @@ the directive type as 0.
@<Find directive@> =
match_results mr = Regexp::create_mr();
if (Regexp::match(&mr, R, L" *(%C+) *(%c*);%c*")) {
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;
@ -300,7 +302,6 @@ the directive type as 0.
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;
else if (Str::eq_insensitive(mr.exp[0], I"[")) I6_dir = ROUTINE_PLM;
else if (Str::eq_insensitive(mr.exp[0], I"Attribute")) I6_dir = ATTRIBUTE_PLM;
else if (Str::eq_insensitive(mr.exp[0], I"Property")) I6_dir = PROPERTY_PLM;