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

Shaved about 5cs off

This commit is contained in:
Graham Nelson 2022-03-24 10:53:32 +00:00
parent ab4de63628
commit fdbb235a63
29 changed files with 225 additions and 170 deletions

View file

@ -1,6 +1,6 @@
# Inform 7
v10.1.0-alpha.1+6U65 'Krypton' (23 March 2022)
v10.1.0-alpha.1+6U66 'Krypton' (24 March 2022)
## About Inform 7

View file

@ -1,3 +1,3 @@
Prerelease: alpha.1
Build Date: 23 March 2022
Build Number: 6U65
Build Date: 24 March 2022
Build Number: 6U66

View file

@ -265,7 +265,7 @@ cleared.)
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">meaning_given</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">verb_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">current</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">VerbMeanings::first_unspecial_meaning_of_verb_form</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Verbs::first_unspecial_meaning_of_verb_form</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Verbs::find_form</span><span class="plain-syntax">(</span><span class="identifier-syntax">vi</span><span class="plain-syntax">, </span><span class="identifier-syntax">prep</span><span class="plain-syntax">, </span><span class="identifier-syntax">second_prep</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">VerbMeanings::is_meaningless</span><span class="plain-syntax">(</span><span class="identifier-syntax">current</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">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Currently $w means $y\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">vi</span><span class="plain-syntax">, </span><span class="identifier-syntax">current</span><span class="plain-syntax">);</span>
@ -360,7 +360,7 @@ now absolutely any non-empty word range is accepted as the property name.
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">verb_form</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vf</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RP</span><span class="plain-syntax">[1];</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">verb_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vm</span><span class="plain-syntax"> = </span><span class="identifier-syntax">VerbMeanings::first_unspecial_meaning_of_verb_form</span><span class="plain-syntax">(</span><span class="identifier-syntax">vf</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">verb_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vm</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Verbs::first_unspecial_meaning_of_verb_form</span><span class="plain-syntax">(</span><span class="identifier-syntax">vf</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">vm</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> ==&gt; { </span><span class="constant-syntax">VM_VERBM</span><span class="plain-syntax">, </span><span class="identifier-syntax">vm</span><span class="plain-syntax"> };</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>

View file

@ -118,7 +118,7 @@ I6S code can only come from within the compiler itself, and means a bug.
<span class="plain-syntax"> </span><span class="identifier-syntax">i6s_inter_schema_cache</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Dictionaries::new</span><span class="plain-syntax">(512, </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">dict_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">de</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Dictionaries::find</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="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">de</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> (</span><span class="reserved-syntax">inter_schema</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">Dictionaries::read_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="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">de</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> (</span><span class="reserved-syntax">inter_schema</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">Dictionaries::value_for_entry</span><span class="plain-syntax">(</span><span class="identifier-syntax">de</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">result</span><span class="plain-syntax"> = </span><a href="2-pis.html#SP5" class="function-link"><span class="function-syntax">ParsingSchemas::back_end</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">from</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">no_quoted_inames</span><span class="plain-syntax">, </span><span class="identifier-syntax">quoted_inames</span><span class="plain-syntax">);</span>

View file

@ -98,10 +98,10 @@ which use this module:
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">inter_construct</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">inter_annotation_form</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">inter_error_message</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">inter_error_stash</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">inter_package</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">inter_node_list</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">inter_node_array</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS_ALLOCATED_IN_ARRAYS</span><span class="plain-syntax">(</span><span class="reserved-syntax">inter_error_stash</span><span class="plain-syntax">, </span><span class="constant-syntax">1024</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS_ALLOCATED_IN_ARRAYS</span><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax">, </span><span class="constant-syntax">1024</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS_ALLOCATED_IN_ARRAYS</span><span class="plain-syntax">(</span><span class="reserved-syntax">inter_tree_node</span><span class="plain-syntax">, </span><span class="constant-syntax">8192</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS_ALLOCATED_IN_ARRAYS</span><span class="plain-syntax">(</span><span class="reserved-syntax">inter_annotation</span><span class="plain-syntax">, </span><span class="constant-syntax">8192</span><span class="plain-syntax">)</span>

View file

@ -211,7 +211,7 @@ binary code.)
<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">dict_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">de</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Dictionaries::find</span><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">symbols_dictionary</span><span class="plain-syntax">, </span><span class="identifier-syntax">name</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">de</span><span class="plain-syntax">) </span><span class="identifier-syntax">S</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">Dictionaries::read_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">symbols_dictionary</span><span class="plain-syntax">, </span><span class="identifier-syntax">name</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">de</span><span class="plain-syntax">) </span><span class="identifier-syntax">S</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">Dictionaries::value_for_entry</span><span class="plain-syntax">(</span><span class="identifier-syntax">de</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">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">wire_following</span><span class="plain-syntax">) </span><span class="identifier-syntax">S</span><span class="plain-syntax"> = </span><a href="2-tw2.html#SP3" class="function-link"><span class="function-syntax">Wiring::cable_end</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">);</span>

View file

@ -240,7 +240,6 @@ number of arguments, then we change it to the version with the right arity.
<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><a href="4-tpc5.html#SP8" class="function-link"><span class="function-syntax">PrimitiveInstruction::arity</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">prim_s</span><span class="plain-syntax">) != </span><span class="identifier-syntax">arity_as_invoked</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Made arity fix\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="constant-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">BIP</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Primitives::to_BIP</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">prim_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">Primitives::is_BIP_for_indirect_call_returning_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">BIP</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">prim_s</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Primitives::from_BIP</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">,</span>

View file

@ -84,38 +84,38 @@ which take more than 1/1000th of the total running time.
<pre class="undisplayed-code all-displayed-code code-font">
<span class="plain-syntax">100.0% in inform7 run</span>
<span class="plain-syntax"> 66.3% in compilation to Inter</span>
<span class="plain-syntax"> 47.6% in </span><a href="../core-module/1-htc.html#SP9" class="internal">Sequence::undertake_queued_tasks</a>
<span class="plain-syntax"> 4.2% in </span><a href="../assertions-module/2-ptmn.html#SP1" class="internal">MajorNodes::pre_pass</a>
<span class="plain-syntax"> 3.1% in </span><a href="../assertions-module/2-ptmn.html#SP1" class="internal">MajorNodes::pass_1</a>
<span class="plain-syntax"> 1.8% in </span><a href="../runtime-module/6-pi.html#SP1" class="internal">RTPhrasebook::compile_entries</a>
<span class="plain-syntax"> 1.6% in </span><a href="../assertions-module/5-id.html#SP4" class="internal">ImperativeDefinitions::assess_all</a>
<span class="plain-syntax"> 1.3% in </span><a href="../runtime-module/5-kc.html#SP10" class="internal">RTKindConstructors::compile</a>
<span class="plain-syntax"> 0.8% in </span><a href="../core-module/1-htc.html#SP12" class="internal">Sequence::lint_inter</a>
<span class="plain-syntax"> 69.0% in compilation to Inter</span>
<span class="plain-syntax"> 47.9% in </span><a href="../core-module/1-htc.html#SP9" class="internal">Sequence::undertake_queued_tasks</a>
<span class="plain-syntax"> 4.9% in </span><a href="../assertions-module/2-ptmn.html#SP1" class="internal">MajorNodes::pre_pass</a>
<span class="plain-syntax"> 3.4% in </span><a href="../assertions-module/2-ptmn.html#SP1" class="internal">MajorNodes::pass_1</a>
<span class="plain-syntax"> 2.4% in </span><a href="../runtime-module/6-pi.html#SP1" class="internal">RTPhrasebook::compile_entries</a>
<span class="plain-syntax"> 1.7% in </span><a href="../assertions-module/5-id.html#SP4" class="internal">ImperativeDefinitions::assess_all</a>
<span class="plain-syntax"> 1.5% in </span><a href="../runtime-module/5-kc.html#SP10" class="internal">RTKindConstructors::compile</a>
<span class="plain-syntax"> 0.9% in </span><a href="../core-module/1-htc.html#SP12" class="internal">Sequence::lint_inter</a>
<span class="plain-syntax"> 0.5% in </span><a href="../assertions-module/5-id.html#SP5" class="internal">ImperativeDefinitions::compile_first_block</a>
<span class="plain-syntax"> 0.5% in </span><a href="../assertions-module/2-ptmn.html#SP1" class="internal">MajorNodes::pass_2</a>
<span class="plain-syntax"> 0.5% in </span><a href="../core-module/1-htc.html#SP9" class="internal">Sequence::undertake_queued_tasks</a>
<span class="plain-syntax"> 0.5% in </span><a href="../core-module/1-htc.html#SP9" class="internal">Sequence::undertake_queued_tasks</a>
<span class="plain-syntax"> 0.5% in </span><a href="../knowledge-module/5-tmw.html#SP5" class="internal">World::stage_V</a>
<span class="plain-syntax"> 0.3% in </span><a href="../core-module/1-htc.html#SP9" class="internal">Sequence::undertake_queued_tasks</a>
<span class="plain-syntax"> 0.1% in </span><a href="../runtime-module/3-cm.html#SP1" class="internal">CompletionModule::compile</a>
<span class="plain-syntax"> 0.1% in </span><a href="../knowledge-module/4-is.html#SP27" class="internal">InferenceSubjects::emit_all</a>
<span class="plain-syntax"> 0.1% in </span><a href="../runtime-module/5-kc.html#SP10_7" class="internal">RTKindConstructors::compile_permissions</a>
<span class="plain-syntax"> 0.1% in </span><a href="../core-module/1-wtc.html#SP9" class="internal">Task::make_built_in_kind_constructors</a>
<span class="plain-syntax"> 0.1% in </span><a href="../knowledge-module/5-tmw.html#SP3" class="internal">World::stages_II_and_III</a>
<span class="plain-syntax"> 2.2% not specifically accounted for</span>
<span class="plain-syntax"> 31.3% in running Inter pipeline</span>
<span class="plain-syntax"> 11.9% in inter step 6/14: make-synoptic-module</span>
<span class="plain-syntax"> 9.2% in inter step 14/14: generate inform6 -&gt; auto.inf</span>
<span class="plain-syntax"> 5.7% in inter step 5/14: load-binary-kits</span>
<span class="plain-syntax"> 1.8% in inter step 9/14: make-identifiers-unique</span>
<span class="plain-syntax"> 2.4% not specifically accounted for</span>
<span class="plain-syntax"> 28.2% in running Inter pipeline</span>
<span class="plain-syntax"> 10.1% in inter step 14/14: generate inform6 -&gt; auto.inf</span>
<span class="plain-syntax"> 7.2% in inter step 5/14: load-binary-kits</span>
<span class="plain-syntax"> 6.2% in inter step 6/14: make-synoptic-module</span>
<span class="plain-syntax"> 1.5% in inter step 9/14: make-identifiers-unique</span>
<span class="plain-syntax"> 0.3% in inter step 12/14: eliminate-redundant-operations</span>
<span class="plain-syntax"> 0.3% in inter step 4/14: compile-splats</span>
<span class="plain-syntax"> 0.3% in inter step 7/14: shorten-wiring</span>
<span class="plain-syntax"> 0.3% in inter step 8/14: detect-indirect-calls</span>
<span class="plain-syntax"> 0.1% in inter step 11/14: eliminate-redundant-labels</span>
<span class="plain-syntax"> 0.1% in inter step 8/14: detect-indirect-calls</span>
<span class="plain-syntax"> 1.2% not specifically accounted for</span>
<span class="plain-syntax"> 1.3% not specifically accounted for</span>
<span class="plain-syntax"> 2.0% in supervisor</span>
<span class="plain-syntax"> 0.4% not specifically accounted for</span>
<span class="plain-syntax"> 0.6% not specifically accounted for</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. Memory consumption. </b>The following gives some idea of which classes of object have the most
instances, and also of how Inform's memory tends to be used in practice.
@ -124,18 +124,18 @@ represent less than 1/1000th of the total.
</p>
<pre class="undisplayed-code all-displayed-code code-font">
<span class="plain-syntax">Total memory consumption was 391100K = 382 MB</span>
<span class="plain-syntax">Total memory consumption was 379100K = 370 MB</span>
<span class="plain-syntax">67.7% was used for 2005032 objects, in 463326 frames in 331 x 800K = 264800K = 258 MB:</span>
<span class="plain-syntax">66.6% was used for 2005764 objects, in 360735 frames in 316 x 800K = 252800K = 246 MB:</span>
<span class="plain-syntax"> 10.4% inter_tree_node_array 58 x 8192 = 475136 objects, 41813824 bytes</span>
<span class="plain-syntax"> 6.1% text_stream_array 4340 x 100 = 434000 objects, 24442880 bytes</span>
<span class="plain-syntax"> 6.0% linked_list 43264 objects, 24227840 bytes</span>
<span class="plain-syntax"> 3.5% inter_symbol_array 132 x 1024 = 135168 objects, 14061696 bytes</span>
<span class="plain-syntax"> 3.2% inter_error_stash 102692 objects, 13144576 bytes</span>
<span class="plain-syntax"> 2.5% parse_node 129462 objects, 10356960 bytes</span>
<span class="plain-syntax"> 1.8% verb_conjugation 160 objects, 7425280 bytes</span>
<span class="plain-syntax"> 1.3% parse_node_annotation_array 345 x 500 = 172500 objects, 5531040 bytes</span>
<span class="plain-syntax"> 10.7% inter_tree_node_array 58 x 8192 = 475136 objects, 41813824 bytes</span>
<span class="plain-syntax"> 6.2% text_stream_array 4340 x 100 = 434000 objects, 24442880 bytes</span>
<span class="plain-syntax"> 6.2% linked_list 43264 objects, 24227840 bytes</span>
<span class="plain-syntax"> 3.6% inter_symbol_array 132 x 1024 = 135168 objects, 14061696 bytes</span>
<span class="plain-syntax"> 3.4% inter_error_stash_array 101 x 1024 = 103424 objects, 13241504 bytes</span>
<span class="plain-syntax"> 2.6% parse_node 129462 objects, 10356960 bytes</span>
<span class="plain-syntax"> 1.9% verb_conjugation 160 objects, 7425280 bytes</span>
<span class="plain-syntax"> 1.4% parse_node_annotation_array 345 x 500 = 172500 objects, 5531040 bytes</span>
<span class="plain-syntax"> 0.8% pcalc_prop_array 25 x 1000 = 25000 objects, 3400800 bytes</span>
<span class="plain-syntax"> 0.8% inter_name_array 67 x 1000 = 67000 objects, 3218144 bytes</span>
<span class="plain-syntax"> 0.6% kind_array 66 x 1000 = 66000 objects, 2642112 bytes</span>
@ -162,7 +162,7 @@ represent less than 1/1000th of the total.
<span class="plain-syntax"> 0.1% local_variable_array 47 x 100 = 4700 objects, 452704 bytes</span>
<span class="plain-syntax"> ---- verb_usage 1128 objects, 388032 bytes</span>
<span class="plain-syntax"> ---- rule 469 objects, 367696 bytes</span>
<span class="plain-syntax"> ---- verb_form 386 objects, 345856 bytes</span>
<span class="plain-syntax"> ---- verb_form 386 objects, 348944 bytes</span>
<span class="plain-syntax"> ---- dictionary 6619 objects, 317712 bytes</span>
<span class="plain-syntax"> ---- noun 2380 objects, 285600 bytes</span>
<span class="plain-syntax"> ---- compilation_subtask 3346 objects, 267680 bytes</span>
@ -248,10 +248,10 @@ represent less than 1/1000th of the total.
<span class="plain-syntax"> ---- shared_variable_array 1 x 100 objects, 7232 bytes</span>
<span class="plain-syntax"> ---- determiner 22 objects, 7216 bytes</span>
<span class="plain-syntax"> ---- build_vertex 60 objects, 7200 bytes</span>
<span class="plain-syntax"> ---- verb 108 objects, 6912 bytes</span>
<span class="plain-syntax"> ---- hierarchy_attachment_point 77 objects, 6776 bytes</span>
<span class="plain-syntax"> ---- text_literal_holder 163 objects, 6520 bytes</span>
<span class="plain-syntax"> ---- inbuild_work 101 objects, 6464 bytes</span>
<span class="plain-syntax"> ---- verb 108 objects, 6048 bytes</span>
<span class="plain-syntax"> ---- inbuild_copy 55 objects, 5720 bytes</span>
<span class="plain-syntax"> ---- heading_tree 20 objects, 5440 bytes</span>
<span class="plain-syntax"> ---- inbuild_edition 74 objects, 5328 bytes</span>
@ -361,19 +361,19 @@ represent less than 1/1000th of the total.
<span class="plain-syntax"> ---- loop_over_scope 1 object, 40 bytes</span>
<span class="plain-syntax"> ---- by_function_bp_data 1 object, 40 bytes</span>
<span class="plain-syntax">32.2% was used for memory not allocated for objects:</span>
<span class="plain-syntax">33.3% was used for memory not allocated for objects:</span>
<span class="plain-syntax"> 19.1% text stream storage 76619108 bytes in 452033 claims</span>
<span class="plain-syntax"> 19.7% text stream storage 76619108 bytes in 452033 claims</span>
<span class="plain-syntax"> 1.1% dictionary storage 4544512 bytes in 6619 claims</span>
<span class="plain-syntax"> ---- sorting 744 bytes in 3 claims</span>
<span class="plain-syntax"> 1.7% source text 7200000 bytes in 3 claims</span>
<span class="plain-syntax"> 2.6% source text details 10800000 bytes in 2 claims</span>
<span class="plain-syntax"> 1.8% source text 7200000 bytes in 3 claims</span>
<span class="plain-syntax"> 2.7% source text details 10800000 bytes in 2 claims</span>
<span class="plain-syntax"> ---- documentation fragments 262144 bytes in 1 claim</span>
<span class="plain-syntax"> ---- linguistic stock array 81920 bytes in 2 claims</span>
<span class="plain-syntax"> ---- small word set array 105600 bytes in 22 claims</span>
<span class="plain-syntax"> 1.1% inter symbols storage 4521792 bytes in 27920 claims</span>
<span class="plain-syntax"> 4.1% inter bytecode storage 16767748 bytes in 14 claims</span>
<span class="plain-syntax"> 1.5% inter links storage 6222976 bytes in 11 claims</span>
<span class="plain-syntax"> 4.3% inter bytecode storage 16767748 bytes in 14 claims</span>
<span class="plain-syntax"> 1.6% inter links storage 6222976 bytes in 11 claims</span>
<span class="plain-syntax"> ---- inter tree location list storage 191232 bytes in 32 claims</span>
<span class="plain-syntax"> 0.4% instance-of-kind counting 1695204 bytes in 1 claim</span>
<span class="plain-syntax"> ---- compilation workspace for objects 21856 bytes in 25 claims</span>
@ -381,7 +381,7 @@ represent less than 1/1000th of the total.
<span class="plain-syntax"> ---- code generation workspace for objects 1336 bytes in 4 claims</span>
<span class="plain-syntax"> ---- emitter array storage 279776 bytes in 1995 claims</span>
<span class="plain-syntax">22.3% was overhead - 89465184 bytes = 87368K = 85 MB</span>
<span class="plain-syntax">19.8% was overhead - 77076304 bytes = 75269K = 73 MB</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. Preform grammar. </b>The full annotated description of the Preform grammar (see <a href="../words-module/4-ap.html" class="internal">About Preform (in words)</a>),
with optimisation details and hit/miss statistics added, is also long: it's

View file

@ -163,7 +163,7 @@ which use this module:
<span class="plain-syntax"> </span><span class="identifier-syntax">Writers::register_logger</span><span class="plain-syntax">(</span><span class="character-syntax">'t'</span><span class="plain-syntax">, </span><a href="3-apoo.html#SP4" class="function-link"><span class="function-syntax">Occurrence::log</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Writers::register_logger</span><span class="plain-syntax">(</span><span class="character-syntax">'p'</span><span class="plain-syntax">, </span><a href="3-prp.html#SP5" class="function-link"><span class="function-syntax">Prepositions::log</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Writers::register_logger</span><span class="plain-syntax">(</span><span class="character-syntax">'w'</span><span class="plain-syntax">, </span><a href="3-vrb.html#SP4" class="function-link"><span class="function-syntax">Verbs::log_verb</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Writers::register_logger</span><span class="plain-syntax">(</span><span class="character-syntax">'y'</span><span class="plain-syntax">, </span><a href="3-vm.html#SP12" class="function-link"><span class="function-syntax">VerbMeanings::log</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Writers::register_logger</span><span class="plain-syntax">(</span><span class="character-syntax">'y'</span><span class="plain-syntax">, </span><a href="3-vm.html#SP11" class="function-link"><span class="function-syntax">VerbMeanings::log</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_WRITER</span><span class="plain-syntax">(</span><span class="character-syntax">'z'</span><span class="plain-syntax">, </span><a href="2-nns.html#SP10" class="function-link"><span class="function-syntax">Nouns::log</span></a><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="1-lm.html#SP3">&#167;3</a>.</li></ul>

View file

@ -73,7 +73,7 @@ function togglePopup(material_id) {
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Services</a></li><li><a href="index.html">linguistics</a></li><li><a href="index.html#3">Chapter 3: VP Categories</a></li><li><b>Verb Meanings</b></li></ul></div>
<p class="purpose">To abstract the meaning of a verb.</p>
<ul class="toc"><li><a href="3-vm.html#SP1">&#167;1. What we abstract</a></li><li><a href="3-vm.html#SP3">&#167;3. How this module stores verb meanings</a></li><li><a href="3-vm.html#SP9">&#167;9. Recording where assigned</a></li><li><a href="3-vm.html#SP10">&#167;10. The regular meaning</a></li><li><a href="3-vm.html#SP11">&#167;11. The special meaning</a></li><li><a href="3-vm.html#SP12">&#167;12. Logging</a></li></ul><hr class="tocbar">
<ul class="toc"><li><a href="3-vm.html#SP1">&#167;1. What we abstract</a></li><li><a href="3-vm.html#SP3">&#167;3. How this module stores verb meanings</a></li><li><a href="3-vm.html#SP8">&#167;8. Recording where assigned</a></li><li><a href="3-vm.html#SP9">&#167;9. The regular meaning</a></li><li><a href="3-vm.html#SP10">&#167;10. The special meaning</a></li><li><a href="3-vm.html#SP11">&#167;11. Logging</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. What we abstract. </b>Because this module is concerned with the structure of sentences and not
their meanings, we don't really want to get into what verbs "mean". Instead,
@ -95,7 +95,7 @@ to ask for a reversal to be performed when needed.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="constant-syntax">VERB_MEANING_LINGUISTICS_TYPE</span><span class="plain-syntax"> *</span><span class="function-syntax">VerbMeanings::reverse_VMT</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">VerbMeanings::reverse_VMT</span></span>:<br/><a href="3-vm.html#SP10">&#167;10</a><br/>Diagrams - <a href="1-dgr.html#SP7">&#167;7</a><br/>Verb Usages - <a href="3-vu.html#SP12">&#167;12</a><br/>Noun Phrases - <a href="4-np.html#SP15_1">&#167;15.1</a><br/>Verb Phrases - <a href="4-vp.html#SP7_1">&#167;7.1</a></span></button><span class="plain-syntax">(</span><span class="constant-syntax">VERB_MEANING_LINGUISTICS_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">recto</span><span class="plain-syntax">) {</span>
<span class="constant-syntax">VERB_MEANING_LINGUISTICS_TYPE</span><span class="plain-syntax"> *</span><span class="function-syntax">VerbMeanings::reverse_VMT</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">VerbMeanings::reverse_VMT</span></span>:<br/><a href="3-vm.html#SP9">&#167;9</a><br/>Diagrams - <a href="1-dgr.html#SP7">&#167;7</a><br/>Verb Usages - <a href="3-vu.html#SP12">&#167;12</a><br/>Noun Phrases - <a href="4-np.html#SP15_1">&#167;15.1</a><br/>Verb Phrases - <a href="4-vp.html#SP7_1">&#167;7.1</a></span></button><span class="plain-syntax">(</span><span class="constant-syntax">VERB_MEANING_LINGUISTICS_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">recto</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">VERB_MEANING_REVERSAL_LINGUISTICS_CALLBACK</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">VERB_MEANING_REVERSAL_LINGUISTICS_CALLBACK</span><span class="plain-syntax">(</span><span class="identifier-syntax">recto</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
@ -184,29 +184,15 @@ usages "is liking" and "is liked by" automatically change with it.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">verb_meaning</span><span class="plain-syntax"> *</span><span class="function-syntax">VerbMeanings::follow_indirection</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">VerbMeanings::follow_indirection</span></span>:<br/><a href="3-vm.html#SP4">&#167;4</a>, <a href="3-vm.html#SP10">&#167;10</a>, <a href="3-vm.html#SP11">&#167;11</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">verb_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vm</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">verb_meaning</span><span class="plain-syntax"> *</span><span class="function-syntax">VerbMeanings::follow_indirection</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">VerbMeanings::follow_indirection</span></span>:<br/><a href="3-vm.html#SP4">&#167;4</a>, <a href="3-vm.html#SP9">&#167;9</a>, <a href="3-vm.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">verb_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vm</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">vm</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">vm</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">take_meaning_from</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="3-vm.html#SP8" class="function-link"><span class="function-syntax">VerbMeanings::first_unspecial_meaning_of_verb_form</span></a><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="3-vrb.html#SP13" class="function-link"><span class="function-syntax">Verbs::first_unspecial_meaning_of_verb_form</span></a><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><a href="3-vrb.html#SP11" class="function-link"><span class="function-syntax">Verbs::base_form</span></a><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">vm</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">take_meaning_from</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">vm</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. </b>The following function may seem curious &mdash; what's so great about the first
regular sense of a verb? The answer is that Inform generally gives a verb at
most one regular sense.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">verb_meaning</span><span class="plain-syntax"> *</span><span class="function-syntax">VerbMeanings::first_unspecial_meaning_of_verb_form</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">VerbMeanings::first_unspecial_meaning_of_verb_form</span></span>:<br/><a href="3-vm.html#SP7">&#167;7</a>, <a href="3-vm.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">verb_form</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vf</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">vf</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">verb_sense</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vs</span><span class="plain-syntax"> = </span><span class="identifier-syntax">vf</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">list_of_senses</span><span class="plain-syntax">; </span><span class="identifier-syntax">vs</span><span class="plain-syntax">; </span><span class="identifier-syntax">vs</span><span class="plain-syntax"> = </span><span class="identifier-syntax">vs</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_sense</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="3-vm.html#SP11" class="function-link"><span class="function-syntax">VerbMeanings::get_special_meaning</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">vs</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">vm</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">return</span><span class="plain-syntax"> &amp;(</span><span class="identifier-syntax">vs</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">vm</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>&#167;9. Recording where assigned. </b>This helps Inform with correctly locating problem messages.
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. Recording where assigned. </b>This helps Inform with correctly locating problem messages.
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -215,17 +201,17 @@ most one regular sense.
<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>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">VerbMeanings::set_where_assigned</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">VerbMeanings::set_where_assigned</span></span>:<br/>Verbs - <a href="3-vrb.html#SP12">&#167;12</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">verb_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vm</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pn</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">VerbMeanings::set_where_assigned</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">VerbMeanings::set_where_assigned</span></span>:<br/>Verbs - <a href="3-vrb.html#SP12">&#167;12</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">verb_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vm</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pn</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">vm</span><span class="plain-syntax">) </span><span class="identifier-syntax">vm</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">where_assigned</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pn</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">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"assigned location to null meaning"</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. The regular meaning. </b>This is not as simple as returning the <span class="extract"><span class="extract-syntax">regular_meaning</span></span> field, because we
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>&#167;9. The regular meaning. </b>This is not as simple as returning the <span class="extract"><span class="extract-syntax">regular_meaning</span></span> field, because we
have to follow any indirection, and reverse if necessary.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="constant-syntax">VERB_MEANING_LINGUISTICS_TYPE</span><span class="plain-syntax"> *</span><span class="function-syntax">VerbMeanings::get_regular_meaning</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">VerbMeanings::get_regular_meaning</span></span>:<br/><a href="3-vm.html#SP12">&#167;12</a><br/>Verb Phrases - <a href="4-vp.html#SP6">&#167;6</a>, <a href="4-vp.html#SP7_1">&#167;7.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">verb_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vm</span><span class="plain-syntax">) {</span>
<span class="constant-syntax">VERB_MEANING_LINGUISTICS_TYPE</span><span class="plain-syntax"> *</span><span class="function-syntax">VerbMeanings::get_regular_meaning</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">VerbMeanings::get_regular_meaning</span></span>:<br/><a href="3-vm.html#SP11">&#167;11</a><br/>Verb Phrases - <a href="4-vp.html#SP6">&#167;6</a>, <a href="4-vp.html#SP7_1">&#167;7.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">verb_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vm</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">vm</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">rev</span><span class="plain-syntax"> = </span><span class="identifier-syntax">vm</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">take_meaning_reversed</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">vm</span><span class="plain-syntax"> = </span><a href="3-vm.html#SP7" class="function-link"><span class="function-syntax">VerbMeanings::follow_indirection</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vm</span><span class="plain-syntax">);</span>
@ -235,38 +221,38 @@ have to follow any indirection, and reverse if necessary.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">rel</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="constant-syntax">VERB_MEANING_LINGUISTICS_TYPE</span><span class="plain-syntax"> *</span><span class="function-syntax">VerbMeanings::get_regular_meaning_of_form</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">VerbMeanings::get_regular_meaning_of_form</span></span>:<br/>Verb Usages - <a href="3-vu.html#SP12">&#167;12</a><br/>Noun Phrases - <a href="4-np.html#SP15_1">&#167;15.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">verb_form</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vf</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="3-vm.html#SP10" class="function-link"><span class="function-syntax">VerbMeanings::get_regular_meaning</span></a><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><a href="3-vm.html#SP8" class="function-link"><span class="function-syntax">VerbMeanings::first_unspecial_meaning_of_verb_form</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vf</span><span class="plain-syntax">));</span>
<span class="constant-syntax">VERB_MEANING_LINGUISTICS_TYPE</span><span class="plain-syntax"> *</span><span class="function-syntax">VerbMeanings::get_regular_meaning_of_form</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">VerbMeanings::get_regular_meaning_of_form</span></span>:<br/>Verb Usages - <a href="3-vu.html#SP12">&#167;12</a><br/>Noun Phrases - <a href="4-np.html#SP15_1">&#167;15.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">verb_form</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vf</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="3-vm.html#SP9" class="function-link"><span class="function-syntax">VerbMeanings::get_regular_meaning</span></a><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><a href="3-vrb.html#SP13" class="function-link"><span class="function-syntax">Verbs::first_unspecial_meaning_of_verb_form</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vf</span><span class="plain-syntax">));</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>&#167;11. The special meaning. </b>This is also not as simple as returning the <span class="extract"><span class="extract-syntax">regular_meaning</span></span> field, because
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. The special meaning. </b>This is also not as simple as returning the <span class="extract"><span class="extract-syntax">regular_meaning</span></span> field, because
again we have to follow any indirection. Since we have no good way to modify
a special meaning function, we have to provide a function to tell the user
whether to reverse what that function does.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">special_meaning_holder</span><span class="plain-syntax"> *</span><span class="function-syntax">VerbMeanings::get_special_meaning</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">VerbMeanings::get_special_meaning</span></span>:<br/><a href="3-vm.html#SP8">&#167;8</a><br/>Verb Phrases - <a href="4-vp.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">verb_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vm</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">special_meaning_holder</span><span class="plain-syntax"> *</span><span class="function-syntax">VerbMeanings::get_special_meaning</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">VerbMeanings::get_special_meaning</span></span>:<br/>Verbs - <a href="3-vrb.html#SP12_2">&#167;12.2</a>, <a href="3-vrb.html#SP13">&#167;13</a><br/>Verb Phrases - <a href="4-vp.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">verb_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vm</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">vm</span><span class="plain-syntax"> = </span><a href="3-vm.html#SP7" class="function-link"><span class="function-syntax">VerbMeanings::follow_indirection</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vm</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">vm</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">vm</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">special_meaning</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">VerbMeanings::get_reversal_status_of_smf</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">VerbMeanings::get_reversal_status_of_smf</span></span>:<br/>Verb Phrases - <a href="4-vp.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">verb_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vm</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">VerbMeanings::get_reversal_status_of_smf</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">VerbMeanings::get_reversal_status_of_smf</span></span>:<br/>Verb Phrases - <a href="4-vp.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">verb_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vm</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">vm</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</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">vm</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">take_meaning_reversed</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>&#167;12. Logging. </b></p>
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>&#167;11. Logging. </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">VerbMeanings::log</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">VerbMeanings::log</span></span>:<br/>Linguistics Module - <a href="1-lm.html#SP3_2">&#167;3.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vvm</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">VerbMeanings::log</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">VerbMeanings::log</span></span>:<br/>Linguistics Module - <a href="1-lm.html#SP3_2">&#167;3.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vvm</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">verb_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vm</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">verb_meaning</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">vvm</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">vm</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) { </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&lt;none&gt;"</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">vm</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">take_meaning_reversed</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"reversed-"</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">vm</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">take_meaning_from</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&lt;$w&gt;="</span><span class="plain-syntax">, </span><span class="identifier-syntax">vm</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">take_meaning_from</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="constant-syntax">VERB_MEANING_LINGUISTICS_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">m</span><span class="plain-syntax"> = </span><a href="3-vm.html#SP10" class="function-link"><span class="function-syntax">VerbMeanings::get_regular_meaning</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vm</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="constant-syntax">VERB_MEANING_LINGUISTICS_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">m</span><span class="plain-syntax"> = </span><a href="3-vm.html#SP9" class="function-link"><span class="function-syntax">VerbMeanings::get_regular_meaning</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vm</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">m</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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"(%S)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">m</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">debugging_log_name</span><span class="plain-syntax">);</span>

View file

@ -90,6 +90,7 @@ usages in a sentence.
<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">verb</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">verb_conjugation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">conjugation</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">verb_form</span><span class="plain-syntax"> *</span><span class="identifier-syntax">first_form</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">verb_form</span><span class="plain-syntax"> *</span><span class="identifier-syntax">base_form</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">linguistic_stock_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">in_stock</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">VERB_COMPILATION_LINGUISTICS_CALLBACK</span>
@ -141,6 +142,7 @@ instead of a word: for example, the <span class="extract"><span class="extract-s
<span class="plain-syntax"> </span><span class="reserved-syntax">verb</span><span class="plain-syntax"> *</span><span class="identifier-syntax">V</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">verb</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">V</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">conjugation</span><span class="plain-syntax"> = </span><span class="identifier-syntax">vc</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">V</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">first_form</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">V</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">base_form</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">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">VERB_COMPILATION_LINGUISTICS_CALLBACK</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">VERB_COMPILATION_LINGUISTICS_CALLBACK</span><span class="plain-syntax">(</span><span class="identifier-syntax">V</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
@ -245,6 +247,7 @@ form usages can be legal for the same form, this is a bitmap:
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">neg_reference_text</span><span class="plain-syntax">; </span><span class="comment-syntax"> e.g. "do not translate into"</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">verb_sense</span><span class="plain-syntax"> *</span><span class="identifier-syntax">list_of_senses</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">verb_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">first_unspecial_meaning</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">verb_form</span><span class="plain-syntax"> *</span><span class="identifier-syntax">next_form</span><span class="plain-syntax">; </span><span class="comment-syntax"> within the linked list for the verb</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">linguistic_stock_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">in_stock</span><span class="plain-syntax">;</span>
@ -256,7 +259,7 @@ form usages can be legal for the same form, this is a bitmap:
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">verb_form</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure verb_form is accessed in 2/adj, 2/art, 2/daq, 2/nns, 2/prn, 3/vm, 3/vu, 3/prp, 4/vp and here.</li></ul>
<ul class="endnotetexts"><li>The structure verb_form is accessed in 2/adj, 2/art, 2/daq, 2/nns, 2/prn, 3/vu, 3/prp, 4/vp and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>&#167;9. </b>Verb forms are also a grammatical category:
</p>
@ -297,17 +300,21 @@ can be joined into a linked list. Verb meanings are described elsewhere.
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">verb_sense</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure verb_sense is accessed in 3/vm, 3/vu, 3/prp, 4/vp and here.</li></ul>
<ul class="endnotetexts"><li>The structure verb_sense is accessed in 3/vu, 3/prp, 4/vp and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>&#167;11. Creating forms and senses. </b>Forms are stored in a linked list, and are uniquely identified by the triplet
of verb and two prepositions:
of verb and two prepositions.
</p>
<p class="commentary">The base form is by definition the one where no prepositions are used. We could
therefore find that base form by calling <span class="extract"><span class="extract-syntax">Verbs::find_form(V, NULL, NULL)</span></span>,
but instead we cache this result in <span class="extract"><span class="extract-syntax">V-&gt;base_form</span></span> for speed: profiling shows
that Inform otherwise spends nearly 1% of its entire running time making that
innocent-looking call.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">verb_form</span><span class="plain-syntax"> *</span><span class="function-syntax">Verbs::base_form</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">Verbs::base_form</span></span>:<br/>Verb Meanings - <a href="3-vm.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">verb</span><span class="plain-syntax"> *</span><span class="identifier-syntax">V</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="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">verb_form</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vf</span><span class="plain-syntax"> = </span><span class="identifier-syntax">V</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">first_form</span><span class="plain-syntax">; </span><span class="identifier-syntax">vf</span><span class="plain-syntax">; </span><span class="identifier-syntax">vf</span><span class="plain-syntax"> = </span><span class="identifier-syntax">vf</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_form</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">vf</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">preposition</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">vf</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">second_clause_preposition</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">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">vf</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="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">V</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">base_form</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -329,7 +336,7 @@ of verb and two prepositions:
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">VERB_FORMS</span><span class="plain-syntax">, </span><span class="string-syntax">" Adding form: $w + $p + $p = $y\n"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">V</span><span class="plain-syntax">, </span><span class="identifier-syntax">prep</span><span class="plain-syntax">, </span><span class="identifier-syntax">second_prep</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">vm</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-vm.html#SP9" class="function-link"><span class="function-syntax">VerbMeanings::set_where_assigned</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">vm</span><span class="plain-syntax">, </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-vm.html#SP8" class="function-link"><span class="function-syntax">VerbMeanings::set_where_assigned</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">vm</span><span class="plain-syntax">, </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">V</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"added form to null verb"</span><span class="plain-syntax">);</span>
@ -355,6 +362,7 @@ of verb and two prepositions:
<span class="plain-syntax"> </span><span class="identifier-syntax">vf</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">form_structures</span><span class="plain-syntax"> = </span><span class="identifier-syntax">form_structs</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">vf</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">list_of_senses</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">vf</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_form</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">vf</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">first_unspecial_meaning</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">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">VERB_FORM_COMPILATION_LINGUISTICS_CALLBACK</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">VERB_FORM_COMPILATION_LINGUISTICS_CALLBACK</span><span class="plain-syntax">(</span><span class="identifier-syntax">vf</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
@ -430,6 +438,7 @@ in a canonical verbal form. For example, "translate into <span class="extract"><
<span class="plain-syntax"> </span><span class="identifier-syntax">vf</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_form</span><span class="plain-syntax"> = </span><span class="identifier-syntax">prev</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_form</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">prev</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_form</span><span class="plain-syntax"> = </span><span class="identifier-syntax">vf</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">prep</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">second_prep</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)) </span><span class="identifier-syntax">V</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">base_form</span><span class="plain-syntax"> = </span><span class="identifier-syntax">vf</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-vrb.html#SP12_1">&#167;12.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP12_2" class="paragraph-anchor"></a><b>&#167;12.2. </b>A new sense is normally just added to the end of the list of senses for
@ -447,14 +456,47 @@ we overwrite that with the new (presumably meaningful) one.
<span class="plain-syntax"> </span><span class="identifier-syntax">prev</span><span class="plain-syntax"> = </span><span class="identifier-syntax">vs</span><span class="plain-syntax">; </span><span class="identifier-syntax">vs</span><span class="plain-syntax"> = </span><span class="identifier-syntax">vs</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_sense</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">vs</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">verb_sense</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vs</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">verb_sense</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">vs</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">verb_sense</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">vs</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">vm</span><span class="plain-syntax"> = </span><span class="identifier-syntax">vm</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">vs</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_sense</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">prev</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">vf</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">list_of_senses</span><span class="plain-syntax"> = </span><span class="identifier-syntax">vs</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">prev</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_sense</span><span class="plain-syntax"> = </span><span class="identifier-syntax">vs</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><a href="3-vm.html#SP10" class="function-link"><span class="function-syntax">VerbMeanings::get_special_meaning</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">vs</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">vm</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">vf</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">first_unspecial_meaning</span><span class="plain-syntax"> = &amp;(</span><span class="identifier-syntax">vs</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">vm</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">vf</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">first_unspecial_meaning</span><span class="plain-syntax"> == &amp;(</span><span class="identifier-syntax">vs</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">vm</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">vf</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">first_unspecial_meaning</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-vrb.html#SP12">&#167;12</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>&#167;13. </b>The following function may seem curious &mdash; what's so great about the first
regular sense of a verb? The answer is that Inform generally gives a verb at
most one regular sense.
</p>
<p class="commentary">We cache the result in <span class="extract"><span class="extract-syntax">vf-&gt;first_unspecial_meaning</span></span> for speed, because profiling
of <a href="../inform7/index.html" class="internal">inform7</a> suggests this is worth it, but retain the uncached algorithm as
well in case we suspect bugs in future.
</p>
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">CACHE_FIRST_UNSPECIAL_MEANING</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">verb_meaning</span><span class="plain-syntax"> *</span><span class="function-syntax">Verbs::first_unspecial_meaning_of_verb_form</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">Verbs::first_unspecial_meaning_of_verb_form</span></span>:<br/>Verb Meanings - <a href="3-vm.html#SP7">&#167;7</a>, <a href="3-vm.html#SP9">&#167;9</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">verb_form</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vf</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">vf</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="constant-syntax">CACHE_FIRST_UNSPECIAL_MEANING</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">vf</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">first_unspecial_meaning</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="constant-syntax">CACHE_FIRST_UNSPECIAL_MEANING</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">verb_sense</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vs</span><span class="plain-syntax"> = </span><span class="identifier-syntax">vf</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">list_of_senses</span><span class="plain-syntax">; </span><span class="identifier-syntax">vs</span><span class="plain-syntax">; </span><span class="identifier-syntax">vs</span><span class="plain-syntax"> = </span><span class="identifier-syntax">vs</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_sense</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="3-vm.html#SP10" class="function-link"><span class="function-syntax">VerbMeanings::get_special_meaning</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">vs</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">vm</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">return</span><span class="plain-syntax"> &amp;(</span><span class="identifier-syntax">vs</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">vm</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><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>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="2-prn.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-lm.html">1</a></li><li class="progresschapter"><a href="2-adj.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresscurrent">vrb</li><li class="progresssection"><a href="3-vm.html">vm</a></li><li class="progresssection"><a href="3-sm.html">sm</a></li><li class="progresssection"><a href="3-vu.html">vu</a></li><li class="progresssection"><a href="3-prp.html">prp</a></li><li class="progresssection"><a href="3-aoc.html">aoc</a></li><li class="progresssection"><a href="3-apoo.html">apoo</a></li><li class="progresschapter"><a href="4-np.html">4</a></li><li class="progressnext"><a href="3-vm.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->

View file

@ -537,7 +537,7 @@ list, with lower priority numbers before higher ones.
<pre class="displayed-code all-displayed-code code-font">
<span class="constant-syntax">VERB_MEANING_LINGUISTICS_TYPE</span><span class="plain-syntax"> *</span><span class="function-syntax">VerbUsages::get_regular_meaning</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">VerbUsages::get_regular_meaning</span></span>:<br/><a href="3-vu.html#SP18">&#167;18</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">verb_usage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vu</span><span class="plain-syntax">, </span><span class="reserved-syntax">preposition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prep</span><span class="plain-syntax">, </span><span class="reserved-syntax">preposition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">second_prep</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">vu</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="constant-syntax">VERB_MEANING_LINGUISTICS_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">root</span><span class="plain-syntax"> = </span><a href="3-vm.html#SP10" class="function-link"><span class="function-syntax">VerbMeanings::get_regular_meaning_of_form</span></a><span class="plain-syntax">(</span><a href="3-vrb.html#SP11" class="function-link"><span class="function-syntax">Verbs::find_form</span></a><span class="plain-syntax">(</span><a href="3-vu.html#SP12" class="function-link"><span class="function-syntax">VerbUsages::get_verb</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vu</span><span class="plain-syntax">), </span><span class="identifier-syntax">prep</span><span class="plain-syntax">, </span><span class="identifier-syntax">second_prep</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="constant-syntax">VERB_MEANING_LINGUISTICS_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">root</span><span class="plain-syntax"> = </span><a href="3-vm.html#SP9" class="function-link"><span class="function-syntax">VerbMeanings::get_regular_meaning_of_form</span></a><span class="plain-syntax">(</span><a href="3-vrb.html#SP11" class="function-link"><span class="function-syntax">Verbs::find_form</span></a><span class="plain-syntax">(</span><a href="3-vu.html#SP12" class="function-link"><span class="function-syntax">VerbUsages::get_verb</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vu</span><span class="plain-syntax">), </span><span class="identifier-syntax">prep</span><span class="plain-syntax">, </span><span class="identifier-syntax">second_prep</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">root</span><span class="plain-syntax">) &amp;&amp; (</span><a href="3-vu.html#SP12" class="function-link"><span class="function-syntax">VerbUsages::get_voice</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vu</span><span class="plain-syntax">) == </span><span class="identifier-syntax">PASSIVE_VOICE</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">root</span><span class="plain-syntax"> != </span><span class="identifier-syntax">VERB_MEANING_EQUALITY</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">root</span><span class="plain-syntax"> = </span><a href="3-vm.html#SP2" class="function-link"><span class="function-syntax">VerbMeanings::reverse_VMT</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">root</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">root</span><span class="plain-syntax">;</span>

View file

@ -369,7 +369,7 @@ directions, in particular, a little better. But it means we do not recognise
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="constant-syntax">VERB_MEANING_LINGUISTICS_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax"> = </span><a href="3-vm.html#SP10" class="function-link"><span class="function-syntax">VerbMeanings::get_regular_meaning_of_form</span></a><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="constant-syntax">VERB_MEANING_LINGUISTICS_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax"> = </span><a href="3-vm.html#SP9" class="function-link"><span class="function-syntax">VerbMeanings::get_regular_meaning_of_form</span></a><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><a href="3-vrb.html#SP11" class="function-link"><span class="function-syntax">Verbs::find_form</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">permitted_verb</span><span class="plain-syntax">, </span><span class="identifier-syntax">RP</span><span class="plain-syntax">[1], </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">R</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</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"> ==&gt; { -, </span><a href="1-dgr.html#SP7" class="function-link"><span class="function-syntax">Diagrams::new_RELATIONSHIP</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><a href="3-vm.html#SP2" class="function-link"><span class="function-syntax">VerbMeanings::reverse_VMT</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">), </span><span class="identifier-syntax">RP</span><span class="plain-syntax">[2]) };</span>

View file

@ -777,10 +777,10 @@ if there is one.
<span class="plain-syntax"> </span><span class="reserved-syntax">verb_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vm</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">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">verb_sense</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vs</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">vf</span><span class="plain-syntax">)?</span><span class="identifier-syntax">vf</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">list_of_senses:NULL</span><span class="plain-syntax">; </span><span class="identifier-syntax">vs</span><span class="plain-syntax">; </span><span class="identifier-syntax">vs</span><span class="plain-syntax"> = </span><span class="identifier-syntax">vs</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_sense</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">vm</span><span class="plain-syntax"> = &amp;(</span><span class="identifier-syntax">vs</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">vm</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">special_meaning_holder</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sm</span><span class="plain-syntax"> = </span><a href="3-vm.html#SP11" class="function-link"><span class="function-syntax">VerbMeanings::get_special_meaning</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vm</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">special_meaning_holder</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sm</span><span class="plain-syntax"> = </span><a href="3-vm.html#SP10" class="function-link"><span class="function-syntax">VerbMeanings::get_special_meaning</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vm</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">sm</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">SNPs</span><span class="plain-syntax">[</span><span class="constant-syntax">MAX_NPS_IN_VP</span><span class="plain-syntax">];</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="3-vm.html#SP11" class="function-link"><span class="function-syntax">VerbMeanings::get_reversal_status_of_smf</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vm</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="3-vm.html#SP10" class="function-link"><span class="function-syntax">VerbMeanings::get_reversal_status_of_smf</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vm</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SNPs</span><span class="plain-syntax">[0] = </span><span class="identifier-syntax">NPs</span><span class="plain-syntax">[1]; </span><span class="identifier-syntax">SNPs</span><span class="plain-syntax">[1] = </span><span class="identifier-syntax">NPs</span><span class="plain-syntax">[0]; </span><span class="identifier-syntax">SNPs</span><span class="plain-syntax">[2] = </span><span class="identifier-syntax">NPs</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="plain-syntax"> </span><span class="identifier-syntax">SNPs</span><span class="plain-syntax">[0] = </span><span class="identifier-syntax">NPs</span><span class="plain-syntax">[0]; </span><span class="identifier-syntax">SNPs</span><span class="plain-syntax">[1] = </span><span class="identifier-syntax">NPs</span><span class="plain-syntax">[1]; </span><span class="identifier-syntax">SNPs</span><span class="plain-syntax">[2] = </span><span class="identifier-syntax">NPs</span><span class="plain-syntax">[2];</span>
@ -791,7 +791,7 @@ if there is one.
<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><a href="3-vm.html#SP10" class="function-link"><span class="function-syntax">VerbMeanings::get_regular_meaning</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vm</span><span class="plain-syntax">)) &amp;&amp;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><a href="3-vm.html#SP9" class="function-link"><span class="function-syntax">VerbMeanings::get_regular_meaning</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vm</span><span class="plain-syntax">)) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">NPs</span><span class="plain-syntax">[0])) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">NPs</span><span class="plain-syntax">[1])) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::empty</span><span class="plain-syntax">(</span><span class="identifier-syntax">NPs</span><span class="plain-syntax">[2])) &amp;&amp;</span>
@ -845,7 +845,7 @@ point of view, it is being worn.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="constant-syntax">VERB_MEANING_LINGUISTICS_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">meaning</span><span class="plain-syntax"> = </span><a href="3-vm.html#SP10" class="function-link"><span class="function-syntax">VerbMeanings::get_regular_meaning</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vm</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="constant-syntax">VERB_MEANING_LINGUISTICS_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">meaning</span><span class="plain-syntax"> = </span><a href="3-vm.html#SP9" class="function-link"><span class="function-syntax">VerbMeanings::get_regular_meaning</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">vm</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">meaning</span><span class="plain-syntax"> != </span><span class="identifier-syntax">VERB_MEANING_EQUALITY</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">V</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax"> = </span><a href="1-dgr.html#SP7" class="function-link"><span class="function-syntax">Diagrams::new_RELATIONSHIP</span></a><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">V</span><span class="plain-syntax">), </span><a href="3-vm.html#SP2" class="function-link"><span class="function-syntax">VerbMeanings::reverse_VMT</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">meaning</span><span class="plain-syntax">), </span><span class="identifier-syntax">O_PN</span><span class="plain-syntax">);</span>

View file

@ -571,8 +571,8 @@ Within each categpry, items are listed in order of creation.
<span class="plain-syntax">noun: proper: 'mapping down relation'</span>
<span class="plain-syntax">noun: proper: 'mapping inside relation'</span>
<span class="plain-syntax">noun: proper: 'mapping outside relation'</span>
<span class="plain-syntax">noun: proper: 'other side'</span>
<span class="plain-syntax">noun: proper: 'property other side'</span>
<span class="plain-syntax">noun: proper: 'leading-through destination'</span>
<span class="plain-syntax">noun: proper: 'property leading-through destination'</span>
<span class="plain-syntax">noun: proper: 'leading-through relation'</span>
<span class="plain-syntax">noun: proper: 'carrying capacity'</span>
<span class="plain-syntax">noun: proper: 'property carrying capacity'</span>
@ -995,7 +995,7 @@ Within each categpry, items are listed in order of creation.
<span class="plain-syntax">noun: proper: 'after starting the virtual machine'</span>
<span class="plain-syntax">noun: proper: 'after starting the virtual machine rules'</span>
<span class="plain-syntax">noun: proper: 'after starting the virtual machine rulebook'</span>
<span class="plain-syntax">noun: proper: 'enable glulx acceleration rule'</span>
<span class="plain-syntax">noun: proper: 'final code startup rule'</span>
<span class="plain-syntax">noun: proper: 'printing the name'</span>
<span class="plain-syntax">noun: proper: 'printing the name activity'</span>
<span class="plain-syntax">noun: proper: 'before printing the name'</span>
@ -2825,7 +2825,7 @@ Within each categpry, items are listed in order of creation.
<span class="plain-syntax">noun: proper: 'same-map-region-as relation'</span>
<span class="plain-syntax">noun: proper: 'same-initial-appearance-as relation'</span>
<span class="plain-syntax">noun: proper: 'same-opposite-as relation'</span>
<span class="plain-syntax">noun: proper: 'same-other-side-as relation'</span>
<span class="plain-syntax">noun: proper: 'same-leading-through-destination-as relation'</span>
<span class="plain-syntax">noun: proper: 'same-carrying-capacity-as relation'</span>
<span class="plain-syntax">noun: proper: 'same-matching-key-as relation'</span>
<span class="plain-syntax">noun: proper: 'same-list-grouping-key-as relation'</span>
@ -3108,7 +3108,7 @@ Within each categpry, items are listed in order of creation.
<span class="plain-syntax">preposition: the same map region as</span>
<span class="plain-syntax">preposition: the same initial appearance as</span>
<span class="plain-syntax">preposition: the same opposite as</span>
<span class="plain-syntax">preposition: the same other side as</span>
<span class="plain-syntax">preposition: the same leading-through destination as</span>
<span class="plain-syntax">preposition: the same carrying capacity as</span>
<span class="plain-syntax">preposition: the same matching key as</span>
<span class="plain-syntax">preposition: the same list grouping key as</span>
@ -3627,7 +3627,7 @@ Within each categpry, items are listed in order of creation.
<span class="plain-syntax">verb_form: be(0) + the same map region as + ___ SVO</span>
<span class="plain-syntax">verb_form: be(0) + the same initial appearance as + ___ SVO</span>
<span class="plain-syntax">verb_form: be(0) + the same opposite as + ___ SVO</span>
<span class="plain-syntax">verb_form: be(0) + the same other side as + ___ SVO</span>
<span class="plain-syntax">verb_form: be(0) + the same leading-through destination as + ___ SVO</span>
<span class="plain-syntax">verb_form: be(0) + the same carrying capacity as + ___ SVO</span>
<span class="plain-syntax">verb_form: be(0) + the same matching key as + ___ SVO</span>
<span class="plain-syntax">verb_form: be(0) + the same list grouping key as + ___ SVO</span>

View file

@ -168,8 +168,9 @@ translation in that case.
<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">N</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InterSymbol::identifier</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">uniqueness_count</span><span class="plain-syntax"> *</span><span class="identifier-syntax">U</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">Dictionaries::find</span><span class="plain-syntax">(</span><span class="identifier-syntax">D</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">U</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">uniqueness_count</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">Dictionaries::read_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">D</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">dict_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">de</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Dictionaries::find</span><span class="plain-syntax">(</span><span class="identifier-syntax">D</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">de</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">U</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">uniqueness_count</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">Dictionaries::value_for_entry</span><span class="plain-syntax">(</span><span class="identifier-syntax">de</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">U</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">uniqueness_count</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">U</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">count</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>

View file

@ -329,7 +329,7 @@ modal or nonmodal verb:
<span class="plain-syntax"> </span><span class="identifier-syntax">verb</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vi</span><span class="plain-syntax"> = </span><span class="identifier-syntax">vc</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">vc_conjugates</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">verb_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vm</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">vi</span><span class="plain-syntax">)?</span><span class="identifier-syntax">VerbMeanings::first_unspecial_meaning_of_verb_form</span><span class="plain-syntax">(</span><span class="identifier-syntax">Verbs::base_form</span><span class="plain-syntax">(</span><span class="identifier-syntax">vi</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">vi</span><span class="plain-syntax">)?</span><span class="identifier-syntax">Verbs::first_unspecial_meaning_of_verb_form</span><span class="plain-syntax">(</span><span class="identifier-syntax">Verbs::base_form</span><span class="plain-syntax">(</span><span class="identifier-syntax">vi</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">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">meaning</span><span class="plain-syntax"> = </span><span class="identifier-syntax">VerbMeanings::get_regular_meaning</span><span class="plain-syntax">(</span><span class="identifier-syntax">vm</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rel_iname</span><span class="plain-syntax"> = </span><a href="5-rlt.html#SP4" class="function-link"><span class="function-syntax">RTRelations::default_iname</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">meaning</span><span class="plain-syntax">) </span><span class="identifier-syntax">rel_iname</span><span class="plain-syntax"> = </span><a href="5-rlt.html#SP4" class="function-link"><span class="function-syntax">RTRelations::iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">meaning</span><span class="plain-syntax">);</span>

View file

@ -254,7 +254,6 @@ of the kind which the constructor makes:
<span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="function-syntax">RTKindConstructors::get_exp_kind_GPR_iname</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">RTKindConstructors::get_exp_kind_GPR_iname</span></span>:<br/>Command Grammar Tokens - <a href="7-cgt.html#SP1_4_3">&#167;1.4.3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">GPR</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">GPR_fn_identifier</span><span class="plain-syntax"> = </span><a href="5-kc.html#SP5" class="function-link"><span class="function-syntax">RTKindConstructors::get_explicit_I6_GPR</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Looking for %u: %S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">GPR_fn_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">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">GPR_fn_identifier</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">GPR</span><span class="plain-syntax"> = </span><span class="identifier-syntax">HierarchyLocations::find_by_name</span><span class="plain-syntax">(</span><a href="2-emt.html#SP1" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">GPR_fn_identifier</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span>

View file

@ -1,15 +1,15 @@
Total memory consumption was 391100K = 382 MB
Total memory consumption was 379100K = 370 MB
67.7% was used for 2005032 objects, in 463326 frames in 331 x 800K = 264800K = 258 MB:
66.6% was used for 2005764 objects, in 360735 frames in 316 x 800K = 252800K = 246 MB:
10.4% inter_tree_node_array 58 x 8192 = 475136 objects, 41813824 bytes
6.1% text_stream_array 4340 x 100 = 434000 objects, 24442880 bytes
6.0% linked_list 43264 objects, 24227840 bytes
3.5% inter_symbol_array 132 x 1024 = 135168 objects, 14061696 bytes
3.2% inter_error_stash 102692 objects, 13144576 bytes
2.5% parse_node 129462 objects, 10356960 bytes
1.8% verb_conjugation 160 objects, 7425280 bytes
1.3% parse_node_annotation_array 345 x 500 = 172500 objects, 5531040 bytes
10.7% inter_tree_node_array 58 x 8192 = 475136 objects, 41813824 bytes
6.2% text_stream_array 4340 x 100 = 434000 objects, 24442880 bytes
6.2% linked_list 43264 objects, 24227840 bytes
3.6% inter_symbol_array 132 x 1024 = 135168 objects, 14061696 bytes
3.4% inter_error_stash_array 101 x 1024 = 103424 objects, 13241504 bytes
2.6% parse_node 129462 objects, 10356960 bytes
1.9% verb_conjugation 160 objects, 7425280 bytes
1.4% parse_node_annotation_array 345 x 500 = 172500 objects, 5531040 bytes
0.8% pcalc_prop_array 25 x 1000 = 25000 objects, 3400800 bytes
0.8% inter_name_array 67 x 1000 = 67000 objects, 3218144 bytes
0.6% kind_array 66 x 1000 = 66000 objects, 2642112 bytes
@ -36,7 +36,7 @@ Total memory consumption was 391100K = 382 MB
0.1% local_variable_array 47 x 100 = 4700 objects, 452704 bytes
---- verb_usage 1128 objects, 388032 bytes
---- rule 469 objects, 367696 bytes
---- verb_form 386 objects, 345856 bytes
---- verb_form 386 objects, 348944 bytes
---- dictionary 6619 objects, 317712 bytes
---- noun 2380 objects, 285600 bytes
---- compilation_subtask 3346 objects, 267680 bytes
@ -122,10 +122,10 @@ Total memory consumption was 391100K = 382 MB
---- shared_variable_array 1 x 100 objects, 7232 bytes
---- determiner 22 objects, 7216 bytes
---- build_vertex 60 objects, 7200 bytes
---- verb 108 objects, 6912 bytes
---- hierarchy_attachment_point 77 objects, 6776 bytes
---- text_literal_holder 163 objects, 6520 bytes
---- inbuild_work 101 objects, 6464 bytes
---- verb 108 objects, 6048 bytes
---- inbuild_copy 55 objects, 5720 bytes
---- heading_tree 20 objects, 5440 bytes
---- inbuild_edition 74 objects, 5328 bytes
@ -235,19 +235,19 @@ Total memory consumption was 391100K = 382 MB
---- loop_over_scope 1 object, 40 bytes
---- by_function_bp_data 1 object, 40 bytes
32.2% was used for memory not allocated for objects:
33.3% was used for memory not allocated for objects:
19.1% text stream storage 76619108 bytes in 452033 claims
19.7% text stream storage 76619108 bytes in 452033 claims
1.1% dictionary storage 4544512 bytes in 6619 claims
---- sorting 744 bytes in 3 claims
1.7% source text 7200000 bytes in 3 claims
2.6% source text details 10800000 bytes in 2 claims
1.8% source text 7200000 bytes in 3 claims
2.7% source text details 10800000 bytes in 2 claims
---- documentation fragments 262144 bytes in 1 claim
---- linguistic stock array 81920 bytes in 2 claims
---- small word set array 105600 bytes in 22 claims
1.1% inter symbols storage 4521792 bytes in 27920 claims
4.1% inter bytecode storage 16767748 bytes in 14 claims
1.5% inter links storage 6222976 bytes in 11 claims
4.3% inter bytecode storage 16767748 bytes in 14 claims
1.6% inter links storage 6222976 bytes in 11 claims
---- inter tree location list storage 191232 bytes in 32 claims
0.4% instance-of-kind counting 1695204 bytes in 1 claim
---- compilation workspace for objects 21856 bytes in 25 claims
@ -255,5 +255,5 @@ Total memory consumption was 391100K = 382 MB
---- code generation workspace for objects 1336 bytes in 4 claims
---- emitter array storage 279776 bytes in 1995 claims
22.3% was overhead - 89465184 bytes = 87368K = 85 MB
19.8% was overhead - 77076304 bytes = 75269K = 73 MB

View file

@ -1,33 +1,34 @@
100.0% in inform7 run
66.3% in compilation to Inter
47.6% in //Sequence::undertake_queued_tasks//
4.2% in //MajorNodes::pre_pass//
3.1% in //MajorNodes::pass_1//
1.8% in //RTPhrasebook::compile_entries//
1.6% in //ImperativeDefinitions::assess_all//
1.3% in //RTKindConstructors::compile//
0.8% in //Sequence::lint_inter//
69.0% in compilation to Inter
48.1% in //Sequence::undertake_queued_tasks//
4.6% in //MajorNodes::pre_pass//
3.5% in //MajorNodes::pass_1//
2.3% in //RTPhrasebook::compile_entries//
1.8% in //ImperativeDefinitions::assess_all//
1.4% in //RTKindConstructors::compile//
0.9% in //Sequence::lint_inter//
0.5% in //ImperativeDefinitions::compile_first_block//
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 //Sequence::undertake_queued_tasks//
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.2% not specifically accounted for
31.3% in running Inter pipeline
11.9% in inter step 6/14: make-synoptic-module
9.2% in inter step 14/14: generate inform6 -> auto.inf
5.7% in inter step 5/14: load-binary-kits
1.8% in inter step 9/14: make-identifiers-unique
2.6% not specifically accounted for
28.4% in running Inter pipeline
10.1% in inter step 14/14: generate inform6 -> auto.inf
7.3% in inter step 5/14: load-binary-kits
6.2% in inter step 6/14: make-synoptic-module
1.4% in inter step 9/14: make-identifiers-unique
0.3% in inter step 12/14: eliminate-redundant-operations
0.3% in inter step 4/14: compile-splats
0.3% in inter step 7/14: shorten-wiring
0.3% in inter step 8/14: detect-indirect-calls
0.1% in inter step 10/14: reconcile-verbs
0.1% in inter step 11/14: eliminate-redundant-labels
0.1% in inter step 8/14: detect-indirect-calls
1.2% not specifically accounted for
2.0% in supervisor
1.3% not specifically accounted for
2.2% in supervisor
0.4% not specifically accounted for

View file

@ -27746,7 +27746,7 @@ package main _plain
constant (int32) KIT_CONFIGURATION_BITMAP = 0
constant (int32) KIT_CONFIGURATION_LOOKMODE = 2
constant (text) I7_VERSION_NUMBER = "10.1.0"
constant (text) I7_FULL_VERSION_NUMBER = "10.1.0-alpha.1+6U64"
constant (text) I7_FULL_VERSION_NUMBER = "10.1.0-alpha.1+6U65"
constant (text) ^virtual_machine = "C/32d/v1/no-main"
constant (text) ^virtual_machine_icon = "vm_glulx.png"
constant (text) ^language_elements_used = "core, naming, instance counting, glulx external files"

View file

@ -176,7 +176,7 @@ cleared.)
if (meaning_given) {
verb_meaning *current =
VerbMeanings::first_unspecial_meaning_of_verb_form(
Verbs::first_unspecial_meaning_of_verb_form(
Verbs::find_form(vi, prep, second_prep));
if (VerbMeanings::is_meaningless(current) == FALSE) {
LOG("Currently $w means $y\n", vi, current);
@ -249,7 +249,7 @@ now absolutely any non-empty word range is accepted as the property name.
@<Use verb infinitive as shorthand@> =
verb_form *vf = RP[1];
verb_meaning *vm = VerbMeanings::first_unspecial_meaning_of_verb_form(vf);
verb_meaning *vm = Verbs::first_unspecial_meaning_of_verb_form(vf);
if (vm) {
==> { VM_VERBM, vm };
} else {

View file

@ -252,7 +252,7 @@ void RTVerbs::vc_compilation_agent(compilation_subtask *t) {
verb *vi = vc->vc_conjugates;
verb_meaning *vm =
(vi)?VerbMeanings::first_unspecial_meaning_of_verb_form(Verbs::base_form(vi)):NULL;
(vi)?Verbs::first_unspecial_meaning_of_verb_form(Verbs::base_form(vi)):NULL;
binary_predicate *meaning = VerbMeanings::get_regular_meaning(vm);
inter_name *rel_iname = RTRelations::default_iname();
if (meaning) rel_iname = RTRelations::iname(meaning);

View file

@ -42,7 +42,7 @@ inter_schema *ParsingSchemas::from_i6s(text_stream *from,
i6s_inter_schema_cache = Dictionaries::new(512, FALSE);
}
dict_entry *de = Dictionaries::find(i6s_inter_schema_cache, from);
if (de) return (inter_schema *) Dictionaries::read_value(i6s_inter_schema_cache, from);
if (de) return (inter_schema *) Dictionaries::value_for_entry(de);
inter_schema *result = ParsingSchemas::back_end(from, TRUE,
no_quoted_inames, quoted_inames);

View file

@ -33,10 +33,10 @@ DECLARE_CLASS(inter_symbols_table)
DECLARE_CLASS(inter_construct)
DECLARE_CLASS(inter_annotation_form)
DECLARE_CLASS(inter_error_message)
DECLARE_CLASS(inter_error_stash)
DECLARE_CLASS(inter_package)
DECLARE_CLASS(inter_node_list)
DECLARE_CLASS(inter_node_array)
DECLARE_CLASS_ALLOCATED_IN_ARRAYS(inter_error_stash, 1024)
DECLARE_CLASS_ALLOCATED_IN_ARRAYS(inter_symbol, 1024)
DECLARE_CLASS_ALLOCATED_IN_ARRAYS(inter_tree_node, 8192)
DECLARE_CLASS_ALLOCATED_IN_ARRAYS(inter_annotation, 8192)

View file

@ -120,7 +120,7 @@ inter_symbol *InterSymbolsTable::search_inner(inter_symbols_table *T, text_strea
}
} else {
dict_entry *de = Dictionaries::find(T->symbols_dictionary, name);
if (de) S = (inter_symbol *) Dictionaries::read_value(T->symbols_dictionary, name);
if (de) S = (inter_symbol *) Dictionaries::value_for_entry(de);
}
if (S) {
if (wire_following) S = Wiring::cable_end(S);

View file

@ -83,8 +83,9 @@ void MakeIdentifiersUniqueStage::visitor(inter_tree *I, inter_tree_node *P, void
@<Give this symbol a unique translation@> =
text_stream *N = InterSymbol::identifier(S);
uniqueness_count *U = NULL;
if (Dictionaries::find(D, N)) {
U = (uniqueness_count *) Dictionaries::read_value(D, N);
dict_entry *de = Dictionaries::find(D, N);
if (de) {
U = (uniqueness_count *) Dictionaries::value_for_entry(de);
} else {
U = CREATE(uniqueness_count);
U->count = 0;

View file

@ -104,25 +104,12 @@ verb_meaning VerbMeanings::indirected(verb *from, int reversed) {
=
verb_meaning *VerbMeanings::follow_indirection(verb_meaning *vm) {
if ((vm) && (vm->take_meaning_from))
return VerbMeanings::first_unspecial_meaning_of_verb_form(
return Verbs::first_unspecial_meaning_of_verb_form(
Verbs::base_form(
vm->take_meaning_from));
return vm;
}
@ The following function may seem curious -- what's so great about the first
regular sense of a verb? The answer is that Inform generally gives a verb at
most one regular sense.
=
verb_meaning *VerbMeanings::first_unspecial_meaning_of_verb_form(verb_form *vf) {
if (vf)
for (verb_sense *vs = vf->list_of_senses; vs; vs = vs->next_sense)
if (VerbMeanings::get_special_meaning(&(vs->vm)) == NULL)
return &(vs->vm);
return NULL;
}
@h Recording where assigned.
This helps Inform with correctly locating problem messages.
@ -154,7 +141,7 @@ VERB_MEANING_LINGUISTICS_TYPE *VerbMeanings::get_regular_meaning(verb_meaning *v
VERB_MEANING_LINGUISTICS_TYPE *VerbMeanings::get_regular_meaning_of_form(verb_form *vf) {
return VerbMeanings::get_regular_meaning(
VerbMeanings::first_unspecial_meaning_of_verb_form(vf));
Verbs::first_unspecial_meaning_of_verb_form(vf));
}
@h The special meaning.

View file

@ -16,6 +16,7 @@ usages in a sentence.
typedef struct verb {
struct verb_conjugation *conjugation;
struct verb_form *first_form;
struct verb_form *base_form;
struct linguistic_stock_item *in_stock;
#ifdef VERB_COMPILATION_LINGUISTICS_CALLBACK
@ -63,6 +64,7 @@ verb *Verbs::new_verb(verb_conjugation *vc, int cop) {
verb *V = CREATE(verb);
V->conjugation = vc;
V->first_form = NULL;
V->base_form = NULL;
#ifdef VERB_COMPILATION_LINGUISTICS_CALLBACK
VERB_COMPILATION_LINGUISTICS_CALLBACK(V);
#endif
@ -154,6 +156,7 @@ typedef struct verb_form {
struct word_assemblage neg_reference_text; /* e.g. "do not translate into" */
struct verb_sense *list_of_senses;
struct verb_meaning *first_unspecial_meaning;
struct verb_form *next_form; /* within the linked list for the verb */
struct linguistic_stock_item *in_stock;
@ -205,14 +208,17 @@ typedef struct verb_sense {
@h Creating forms and senses.
Forms are stored in a linked list, and are uniquely identified by the triplet
of verb and two prepositions:
of verb and two prepositions.
The base form is by definition the one where no prepositions are used. We could
therefore find that base form by calling |Verbs::find_form(V, NULL, NULL)|,
but instead we cache this result in |V->base_form| for speed: profiling shows
that Inform otherwise spends nearly 1% of its entire running time making that
innocent-looking call.
=
verb_form *Verbs::base_form(verb *V) {
if (V)
for (verb_form *vf = V->first_form; vf; vf = vf->next_form)
if ((vf->preposition == NULL) && (vf->second_clause_preposition == NULL))
return vf;
if (V) return V->base_form;
return NULL;
}
@ -256,6 +262,7 @@ void Verbs::add_form(verb *V, preposition *prep,
vf->form_structures = form_structs;
vf->list_of_senses = NULL;
vf->next_form = NULL;
vf->first_unspecial_meaning = NULL;
#ifdef VERB_FORM_COMPILATION_LINGUISTICS_CALLBACK
VERB_FORM_COMPILATION_LINGUISTICS_CALLBACK(vf);
#endif
@ -321,6 +328,7 @@ in a canonical verbal form. For example, "translate into |+| as".
vf->next_form = prev->next_form;
prev->next_form = vf;
}
if ((prep == NULL) && (second_prep == NULL)) V->base_form = vf;
@ A new sense is normally just added to the end of the list of senses for
the given form, except that if there's a meaningless sense present already,
@ -333,9 +341,40 @@ we overwrite that with the new (presumably meaningful) one.
prev = vs; vs = vs->next_sense;
}
if (vs == NULL) {
verb_sense *vs = CREATE(verb_sense);
vs = CREATE(verb_sense);
vs->vm = vm;
vs->next_sense = NULL;
if (prev == NULL) vf->list_of_senses = vs;
else prev->next_sense = vs;
}
if (VerbMeanings::get_special_meaning(&(vs->vm)) == NULL) {
vf->first_unspecial_meaning = &(vs->vm);
} else {
if (vf->first_unspecial_meaning == &(vs->vm))
vf->first_unspecial_meaning = NULL;
}
@ The following function may seem curious -- what's so great about the first
regular sense of a verb? The answer is that Inform generally gives a verb at
most one regular sense.
We cache the result in |vf->first_unspecial_meaning| for speed, because profiling
of //inform7// suggests this is worth it, but retain the uncached algorithm as
well in case we suspect bugs in future.
@d CACHE_FIRST_UNSPECIAL_MEANING
=
verb_meaning *Verbs::first_unspecial_meaning_of_verb_form(verb_form *vf) {
if (vf) {
#ifdef CACHE_FIRST_UNSPECIAL_MEANING
return vf->first_unspecial_meaning;
#endif
#ifndef CACHE_FIRST_UNSPECIAL_MEANING
for (verb_sense *vs = vf->list_of_senses; vs; vs = vs->next_sense)
if (VerbMeanings::get_special_meaning(&(vs->vm)) == NULL)
return &(vs->vm);
#endif
}
return NULL;
}