1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-08 18:14:21 +03:00
inform7/docs/core-module/26-pc.html
2019-08-24 11:21:48 +01:00

355 lines
44 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>26/pl</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Language" content="en-gb">
<link href="inweb.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body>
<!--Weave of '26/pc' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">&#9733;</a></li><li><a href="index.html">core</a></li><li><a href="index.html#26">Chapter 26: Compilation Utilities</a></li><li><b>Plugin Calls</b></li></ul><p class="purpose">To place calls to the plugins.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Definitions</a></li><li><a href="#SP5">&#167;5. Plugin calls</a></li></ul><hr class="tocbar">
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. Definitions. </b></p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. </b></p>
<pre class="definitions">
<span class="definitionkeyword">define</span> <span class="constant">PLUGIN_NEW_VARIABLE_NOTIFY</span><span class="plain"> 1</span>
<span class="definitionkeyword">define</span> <span class="constant">PLUGIN_IRREGULAR_GENITIVE</span><span class="plain"> 4</span>
<span class="definitionkeyword">define</span> <span class="constant">PLUGIN_SET_KIND_NOTIFY</span><span class="plain"> 6</span>
<span class="definitionkeyword">define</span> <span class="constant">PLUGIN_COMPLETE_MODEL</span><span class="plain"> 11</span>
<span class="definitionkeyword">define</span> <span class="constant">PLUGIN_PARSE_COMPOSITE_NQS</span><span class="plain"> 12</span>
<span class="definitionkeyword">define</span> <span class="constant">PLUGIN_REFINE_IMPLICIT_NOUN</span><span class="plain"> 14</span>
<span class="definitionkeyword">define</span> <span class="constant">PLUGIN_ACT_ON_SPECIAL_NPS</span><span class="plain"> 15</span>
<span class="definitionkeyword">define</span> <span class="constant">PLUGIN_NEW_PROPERTY_NOTIFY</span><span class="plain"> 16</span>
<span class="definitionkeyword">define</span> <span class="constant">PLUGIN_PROPERTY_VALUE_NOTIFY</span><span class="plain"> 17</span>
<span class="definitionkeyword">define</span> <span class="constant">PLUGIN_MORE_SPECIFIC</span><span class="plain"> 18</span>
<span class="definitionkeyword">define</span> <span class="constant">PLUGIN_INFERENCES_CONTRADICT</span><span class="plain"> 19</span>
<span class="definitionkeyword">define</span> <span class="constant">PLUGIN_INTERVENE_IN_ASSERTION</span><span class="plain"> 20</span>
<span class="definitionkeyword">define</span> <span class="constant">PLUGIN_LOG_INFERENCE_TYPE</span><span class="plain"> 21</span>
<span class="definitionkeyword">define</span> <span class="constant">PLUGIN_COMPILE_OBJECT_HEADER</span><span class="plain"> 22</span>
<span class="definitionkeyword">define</span> <span class="constant">PLUGIN_ESTIMATE_PROPERTY_USAGE</span><span class="plain"> 23</span>
<span class="definitionkeyword">define</span> <span class="constant">PLUGIN_CHECK_GOING</span><span class="plain"> 24</span>
<span class="definitionkeyword">define</span> <span class="constant">PLUGIN_COMPILE_MODEL_TABLES</span><span class="plain"> 25</span>
<span class="definitionkeyword">define</span> <span class="constant">PLUGIN_DEFAULT_APPEARANCE</span><span class="plain"> 26</span>
<span class="definitionkeyword">define</span> <span class="constant">PLUGIN_NEW_PERMISSION_NOTIFY</span><span class="plain"> 27</span>
<span class="definitionkeyword">define</span> <span class="constant">PLUGIN_NAME_TO_EARLY_INFS</span><span class="plain"> 28</span>
<span class="definitionkeyword">define</span> <span class="constant">PLUGIN_NEW_BASE_KIND_NOTIFY</span><span class="plain"> 29</span>
<span class="definitionkeyword">define</span> <span class="constant">PLUGIN_COMPILE_CONSTANT</span><span class="plain"> 30</span>
<span class="definitionkeyword">define</span> <span class="constant">PLUGIN_NEW_INSTANCE_NOTIFY</span><span class="plain"> 31</span>
<span class="definitionkeyword">define</span> <span class="constant">PLUGIN_OFFERED_PROPERTY</span><span class="plain"> 32</span>
<span class="definitionkeyword">define</span> <span class="constant">PLUGIN_OFFERED_SPECIFICATION</span><span class="plain"> 33</span>
<span class="definitionkeyword">define</span> <span class="constant">PLUGIN_TYPECHECK_EQUALITY</span><span class="plain"> 34</span>
<span class="definitionkeyword">define</span> <span class="constant">PLUGIN_FORBID_SETTING</span><span class="plain"> 35</span>
<span class="definitionkeyword">define</span> <span class="constant">PLUGIN_VARIABLE_SET_WARNING</span><span class="plain"> 36</span>
<span class="definitionkeyword">define</span> <span class="constant">PLUGIN_DETECT_BODYSNATCHING</span><span class="plain"> 37</span>
<span class="definitionkeyword">define</span> <span class="constant">PLUGIN_NEW_SUBJECT_NOTIFY</span><span class="plain"> 38</span>
<span class="definitionkeyword">define</span> <span class="constant">PLUGIN_EXPLAIN_CONTRADICTION</span><span class="plain"> 39</span>
<span class="definitionkeyword">define</span> <span class="constant">PLUGIN_ADD_TO_WORLD_INDEX</span><span class="plain"> 40</span>
<span class="definitionkeyword">define</span> <span class="constant">PLUGIN_ANNOTATE_IN_WORLD_INDEX</span><span class="plain"> 41</span>
<span class="definitionkeyword">define</span> <span class="constant">PLUGIN_SET_SUBKIND_NOTIFY</span><span class="plain"> 42</span>
</pre>
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. </b></p>
<pre class="definitions">
<span class="definitionkeyword">define</span> <span class="constant">MAX_PLUGS</span><span class="plain"> 100</span>
</pre>
<pre class="display">
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">plugin_call</span><span class="plain"> {</span>
<span class="reserved">void</span><span class="plain"> *</span><span class="identifier">routine</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">plugin_call</span><span class="plain"> *</span><span class="identifier">next</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">plugin_call</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The structure plugin_call is accessed in 3/pd, 5/lp, 5/ut, 5/un, 5/ins, 6/rlt, 6/nv, 7/ss, 7/hdn, 7/ns, 7/oaf, 7/rs, 8/ie, 8/ec, 8/ed, 9/tfa, 9/tbath, 9/rpt, 9/tc, 9/ma, 9/rk, 9/ass, 9/imp, 9/pd, 10/teav, 10/cap, 11/ap, 11/pr, 11/bas, 11/tc, 11/sm, 12/dtd, 12/cdp, 14/rv, 14/lv, 14/cn, 14/ds, 14/ds2, 15/cp, 16/is, 16/in, 19/tb, 19/rsft, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/ph, 22/tp, 22/tp2, 23/ad, 24/lv, 24/sf, 25/in, 25/pi, 25/cii, 25/cp, 26/uo, 26/tti, 26/ts, 27/cm and here.</p>
<p class="inwebparagraph"><a id="SP4"></a><b>&#167;4. </b></p>
<pre class="display">
<span class="reserved">plugin_call</span><span class="plain"> *</span><span class="identifier">plugins_stack</span><span class="plain">[</span><span class="constant">MAX_PLUGS</span><span class="plain">];</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP5"></a><b>&#167;5. Plugin calls. </b></p>
<pre class="definitions">
<span class="definitionkeyword">define</span> <span class="identifier">PLUGINS_CALL</span><span class="plain">(</span><span class="identifier">code</span><span class="plain">, </span><span class="identifier">args</span><span class="plain">...) {</span>
<span class="reserved">plugin_call</span><span class="plain"> *</span><span class="identifier">pc</span><span class="plain"> = </span><span class="identifier">plugins_stack</span><span class="plain">[</span><span class="identifier">code</span><span class="plain">];</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">pc</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> (*</span><span class="identifier">R</span><span class="plain">)() = (</span><span class="reserved">int</span><span class="plain"> (*)()) </span><span class="identifier">pc</span><span class="plain">-</span><span class="element">&gt;routine</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">Q</span><span class="plain"> = (*</span><span class="identifier">R</span><span class="plain">)(</span><span class="identifier">args</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Q</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">Q</span><span class="plain">;</span>
<span class="identifier">pc</span><span class="plain"> = </span><span class="identifier">pc</span><span class="plain">-</span><span class="element">&gt;next</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="definitionkeyword">define</span> <span class="identifier">PLUGINS_CALLV</span><span class="plain">(</span><span class="identifier">code</span><span class="plain">) {</span>
<span class="reserved">plugin_call</span><span class="plain"> *</span><span class="identifier">pc</span><span class="plain"> = </span><span class="identifier">plugins_stack</span><span class="plain">[</span><span class="identifier">code</span><span class="plain">];</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">pc</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> (*</span><span class="identifier">R</span><span class="plain">)() = (</span><span class="reserved">int</span><span class="plain"> (*)()) </span><span class="identifier">pc</span><span class="plain">-</span><span class="element">&gt;routine</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">Q</span><span class="plain"> = (*</span><span class="identifier">R</span><span class="plain">)();</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Q</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">Q</span><span class="plain">;</span>
<span class="identifier">pc</span><span class="plain"> = </span><span class="identifier">pc</span><span class="plain">-</span><span class="element">&gt;next</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="definitionkeyword">define</span> <span class="identifier">PLUGIN_REGISTER</span><span class="plain">(</span><span class="identifier">code</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">) {</span>
<span class="reserved">plugin_call</span><span class="plain"> *</span><span class="identifier">new</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">plugin_call</span><span class="plain">);</span>
<span class="identifier">new</span><span class="plain">-</span><span class="element">&gt;routine</span><span class="plain"> = (</span><span class="reserved">void</span><span class="plain"> *) (&amp;</span><span class="identifier">R</span><span class="plain">);</span>
<span class="identifier">new</span><span class="plain">-</span><span class="element">&gt;next</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">plugins_stack</span><span class="plain">[</span><span class="identifier">code</span><span class="plain">] == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">plugins_stack</span><span class="plain">[</span><span class="identifier">code</span><span class="plain">] = </span><span class="identifier">new</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> {</span>
<span class="reserved">plugin_call</span><span class="plain"> *</span><span class="identifier">PC</span><span class="plain"> = </span><span class="identifier">plugins_stack</span><span class="plain">[</span><span class="identifier">code</span><span class="plain">];</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">PC</span><span class="plain">) &amp;&amp; (</span><span class="identifier">PC</span><span class="plain">-</span><span class="element">&gt;next</span><span class="plain">)) </span><span class="identifier">PC</span><span class="plain"> = </span><span class="identifier">PC</span><span class="plain">-</span><span class="element">&gt;next</span><span class="plain">;</span>
<span class="identifier">PC</span><span class="plain">-</span><span class="element">&gt;next</span><span class="plain"> = </span><span class="identifier">new</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Plugins::Call::initialise_calls</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="constant">MAX_PLUGS</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) </span><span class="identifier">plugins_stack</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">] = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function Plugins::Call::initialise_calls is used in 26/pl (<a href="26-pl.html#SP8">&#167;8</a>).</p>
<p class="inwebparagraph"><a id="SP6"></a><b>&#167;6. </b>And here goes:
</p>
<pre class="definitions">
<span class="definitionkeyword">define</span> <span class="constant">NEW_BASE_KIND_NOTIFY</span><span class="plain"> </span><span class="functiontext">Plugins::Call::new_base_kind_notify</span>
<span class="definitionkeyword">define</span> <span class="constant">NEW_SUBKIND_NOTIFY</span><span class="plain"> </span><span class="functiontext">Plugins::Call::set_subkind_notify</span>
</pre>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Plugins::Call::name_to_early_infs</span><span class="plain">(</span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">inference_subject</span><span class="plain"> **</span><span class="identifier">infs</span><span class="plain">) {</span>
<span class="identifier">PLUGINS_CALL</span><span class="plain">(</span><span class="constant">PLUGIN_NAME_TO_EARLY_INFS</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">infs</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Plugins::Call::new_variable_notify</span><span class="plain">(</span><span class="reserved">nonlocal_variable</span><span class="plain"> *</span><span class="identifier">q</span><span class="plain">) {</span>
<span class="identifier">PLUGINS_CALL</span><span class="plain">(</span><span class="constant">PLUGIN_NEW_VARIABLE_NOTIFY</span><span class="plain">, </span><span class="identifier">q</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Plugins::Call::new_base_kind_notify</span><span class="plain">(</span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">d</span><span class="plain">, </span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain">) {</span>
<span class="identifier">PLUGINS_CALL</span><span class="plain">(</span><span class="constant">PLUGIN_NEW_BASE_KIND_NOTIFY</span><span class="plain">, </span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">d</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Plugins::Call::compile_constant</span><span class="plain">(</span><span class="identifier">value_holster</span><span class="plain"> *</span><span class="identifier">VH</span><span class="plain">, </span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">spec</span><span class="plain">) {</span>
<span class="identifier">PLUGINS_CALL</span><span class="plain">(</span><span class="constant">PLUGIN_COMPILE_CONSTANT</span><span class="plain">, </span><span class="identifier">VH</span><span class="plain">, </span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">spec</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Plugins::Call::new_subject_notify</span><span class="plain">(</span><span class="reserved">inference_subject</span><span class="plain"> *</span><span class="identifier">subj</span><span class="plain">) {</span>
<span class="identifier">PLUGINS_CALL</span><span class="plain">(</span><span class="constant">PLUGIN_NEW_SUBJECT_NOTIFY</span><span class="plain">, </span><span class="identifier">subj</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Plugins::Call::new_named_instance_notify</span><span class="plain">(</span><span class="reserved">instance</span><span class="plain"> *</span><span class="identifier">nc</span><span class="plain">) {</span>
<span class="identifier">PLUGINS_CALL</span><span class="plain">(</span><span class="constant">PLUGIN_NEW_INSTANCE_NOTIFY</span><span class="plain">, </span><span class="identifier">nc</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Plugins::Call::new_permission_notify</span><span class="plain">(</span><span class="reserved">property_permission</span><span class="plain"> *</span><span class="identifier">pp</span><span class="plain">) {</span>
<span class="identifier">PLUGINS_CALL</span><span class="plain">(</span><span class="constant">PLUGIN_NEW_PERMISSION_NOTIFY</span><span class="plain">, </span><span class="identifier">pp</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Plugins::Call::irregular_genitive</span><span class="plain">(</span><span class="reserved">inference_subject</span><span class="plain"> *</span><span class="identifier">owner</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">genitive</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> *</span><span class="identifier">propriety</span><span class="plain">) {</span>
<span class="identifier">PLUGINS_CALL</span><span class="plain">(</span><span class="constant">PLUGIN_IRREGULAR_GENITIVE</span><span class="plain">, </span><span class="identifier">owner</span><span class="plain">, </span><span class="identifier">genitive</span><span class="plain">, </span><span class="identifier">propriety</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Plugins::Call::set_kind_notify</span><span class="plain">(</span><span class="reserved">instance</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">k</span><span class="plain">) {</span>
<span class="identifier">PLUGINS_CALL</span><span class="plain">(</span><span class="constant">PLUGIN_SET_KIND_NOTIFY</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">k</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Plugins::Call::set_subkind_notify</span><span class="plain">(</span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">sub</span><span class="plain">, </span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">super</span><span class="plain">) {</span>
<span class="identifier">PLUGINS_CALL</span><span class="plain">(</span><span class="constant">PLUGIN_SET_SUBKIND_NOTIFY</span><span class="plain">, </span><span class="identifier">sub</span><span class="plain">, </span><span class="identifier">super</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Plugins::Call::complete_model</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">stage</span><span class="plain">) {</span>
<span class="functiontext">World::Inferences::diversion_off</span><span class="plain">();</span>
<span class="identifier">PLUGINS_CALL</span><span class="plain">(</span><span class="constant">PLUGIN_COMPLETE_MODEL</span><span class="plain">, </span><span class="identifier">stage</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Plugins::Call::parse_composite_NQs</span><span class="plain">(</span><span class="identifier">wording</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">wording</span><span class="plain"> *</span><span class="identifier">DW</span><span class="plain">,</span>
<span class="identifier">quantifier</span><span class="plain"> **</span><span class="identifier">quantifier_used</span><span class="plain">, </span><span class="identifier">kind</span><span class="plain"> **</span><span class="identifier">some_kind</span><span class="plain">) {</span>
<span class="identifier">PLUGINS_CALL</span><span class="plain">(</span><span class="constant">PLUGIN_PARSE_COMPOSITE_NQS</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">DW</span><span class="plain">, </span><span class="identifier">quantifier_used</span><span class="plain">, </span><span class="identifier">some_kind</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Plugins::Call::refine_implicit_noun</span><span class="plain">(</span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">) {</span>
<span class="identifier">PLUGINS_CALL</span><span class="plain">(</span><span class="constant">PLUGIN_REFINE_IMPLICIT_NOUN</span><span class="plain">, </span><span class="identifier">p</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Plugins::Call::act_on_special_NPs</span><span class="plain">(</span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">) {</span>
<span class="identifier">PLUGINS_CALL</span><span class="plain">(</span><span class="constant">PLUGIN_ACT_ON_SPECIAL_NPS</span><span class="plain">, </span><span class="identifier">p</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Plugins::Call::new_property_notify</span><span class="plain">(</span><span class="reserved">property</span><span class="plain"> *</span><span class="identifier">prn</span><span class="plain">) {</span>
<span class="identifier">PLUGINS_CALL</span><span class="plain">(</span><span class="constant">PLUGIN_NEW_PROPERTY_NOTIFY</span><span class="plain">, </span><span class="identifier">prn</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Plugins::Call::property_value_notify</span><span class="plain">(</span><span class="reserved">property</span><span class="plain"> *</span><span class="identifier">prn</span><span class="plain">, </span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">val</span><span class="plain">) {</span>
<span class="identifier">PLUGINS_CALL</span><span class="plain">(</span><span class="constant">PLUGIN_PROPERTY_VALUE_NOTIFY</span><span class="plain">, </span><span class="identifier">prn</span><span class="plain">, </span><span class="identifier">val</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Plugins::Call::more_specific</span><span class="plain">(</span><span class="reserved">instance</span><span class="plain"> *</span><span class="identifier">I1</span><span class="plain">, </span><span class="reserved">instance</span><span class="plain"> *</span><span class="identifier">I2</span><span class="plain">) {</span>
<span class="identifier">PLUGINS_CALL</span><span class="plain">(</span><span class="constant">PLUGIN_MORE_SPECIFIC</span><span class="plain">, </span><span class="identifier">I1</span><span class="plain">, </span><span class="identifier">I2</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Plugins::Call::inferences_contradict</span><span class="plain">(</span><span class="reserved">inference</span><span class="plain"> *</span><span class="identifier">A</span><span class="plain">, </span><span class="reserved">inference</span><span class="plain"> *</span><span class="identifier">B</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">similarity</span><span class="plain">) {</span>
<span class="identifier">PLUGINS_CALL</span><span class="plain">(</span><span class="constant">PLUGIN_INFERENCES_CONTRADICT</span><span class="plain">, </span><span class="identifier">A</span><span class="plain">, </span><span class="identifier">B</span><span class="plain">, </span><span class="identifier">similarity</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Plugins::Call::explain_contradiction</span><span class="plain">(</span><span class="reserved">inference</span><span class="plain"> *</span><span class="identifier">A</span><span class="plain">, </span><span class="reserved">inference</span><span class="plain"> *</span><span class="identifier">B</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">similarity</span><span class="plain">,</span>
<span class="reserved">inference_subject</span><span class="plain"> *</span><span class="identifier">subj</span><span class="plain">) {</span>
<span class="identifier">PLUGINS_CALL</span><span class="plain">(</span><span class="constant">PLUGIN_EXPLAIN_CONTRADICTION</span><span class="plain">, </span><span class="identifier">A</span><span class="plain">, </span><span class="identifier">B</span><span class="plain">, </span><span class="identifier">similarity</span><span class="plain">, </span><span class="identifier">subj</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Plugins::Call::intervene_in_assertion</span><span class="plain">(</span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">px</span><span class="plain">, </span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">py</span><span class="plain">) {</span>
<span class="identifier">PLUGINS_CALL</span><span class="plain">(</span><span class="constant">PLUGIN_INTERVENE_IN_ASSERTION</span><span class="plain">, </span><span class="identifier">px</span><span class="plain">, </span><span class="identifier">py</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Plugins::Call::log_inference_type</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">it</span><span class="plain">) {</span>
<span class="identifier">PLUGINS_CALL</span><span class="plain">(</span><span class="constant">PLUGIN_LOG_INFERENCE_TYPE</span><span class="plain">, </span><span class="identifier">it</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Plugins::Call::estimate_property_usage</span><span class="plain">(</span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">k</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> *</span><span class="identifier">words_used</span><span class="plain">) {</span>
<span class="identifier">PLUGINS_CALL</span><span class="plain">(</span><span class="constant">PLUGIN_ESTIMATE_PROPERTY_USAGE</span><span class="plain">, </span><span class="identifier">k</span><span class="plain">, </span><span class="identifier">words_used</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Plugins::Call::check_going</span><span class="plain">(</span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">to</span><span class="plain">,</span>
<span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">by</span><span class="plain">, </span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">through</span><span class="plain">, </span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">pushing</span><span class="plain">) {</span>
<span class="identifier">PLUGINS_CALL</span><span class="plain">(</span><span class="constant">PLUGIN_CHECK_GOING</span><span class="plain">, </span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">to</span><span class="plain">, </span><span class="identifier">by</span><span class="plain">, </span><span class="identifier">through</span><span class="plain">, </span><span class="identifier">pushing</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Plugins::Call::compile_model_tables</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="identifier">PLUGINS_CALLV</span><span class="plain">(</span><span class="constant">PLUGIN_COMPILE_MODEL_TABLES</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Plugins::Call::default_appearance</span><span class="plain">(</span><span class="reserved">inference_subject</span><span class="plain"> *</span><span class="identifier">infs</span><span class="plain">, </span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">txt</span><span class="plain">) {</span>
<span class="identifier">PLUGINS_CALL</span><span class="plain">(</span><span class="constant">PLUGIN_DEFAULT_APPEARANCE</span><span class="plain">, </span><span class="identifier">infs</span><span class="plain">, </span><span class="identifier">txt</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Plugins::Call::offered_property</span><span class="plain">(</span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">owner</span><span class="plain">, </span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">what</span><span class="plain">) {</span>
<span class="identifier">PLUGINS_CALL</span><span class="plain">(</span><span class="constant">PLUGIN_OFFERED_PROPERTY</span><span class="plain">, </span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">owner</span><span class="plain">, </span><span class="identifier">what</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Plugins::Call::offered_specification</span><span class="plain">(</span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">owner</span><span class="plain">, </span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain">) {</span>
<span class="identifier">PLUGINS_CALL</span><span class="plain">(</span><span class="constant">PLUGIN_OFFERED_SPECIFICATION</span><span class="plain">, </span><span class="identifier">owner</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Plugins::Call::typecheck_equality</span><span class="plain">(</span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K1</span><span class="plain">, </span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K2</span><span class="plain">) {</span>
<span class="identifier">PLUGINS_CALL</span><span class="plain">(</span><span class="constant">PLUGIN_TYPECHECK_EQUALITY</span><span class="plain">, </span><span class="identifier">K1</span><span class="plain">, </span><span class="identifier">K2</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Plugins::Call::forbid_setting</span><span class="plain">(</span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">) {</span>
<span class="identifier">PLUGINS_CALL</span><span class="plain">(</span><span class="constant">PLUGIN_FORBID_SETTING</span><span class="plain">, </span><span class="identifier">K</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Plugins::Call::variable_set_warning</span><span class="plain">(</span><span class="reserved">nonlocal_variable</span><span class="plain"> *</span><span class="identifier">q</span><span class="plain">, </span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">val</span><span class="plain">) {</span>
<span class="identifier">PLUGINS_CALL</span><span class="plain">(</span><span class="constant">PLUGIN_VARIABLE_SET_WARNING</span><span class="plain">, </span><span class="identifier">q</span><span class="plain">, </span><span class="identifier">val</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Plugins::Call::detect_bodysnatching</span><span class="plain">(</span><span class="reserved">inference_subject</span><span class="plain"> *</span><span class="identifier">body</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> *</span><span class="identifier">snatcher</span><span class="plain">,</span>
<span class="reserved">inference_subject</span><span class="plain"> **</span><span class="identifier">counterpart</span><span class="plain">) {</span>
<span class="identifier">PLUGINS_CALL</span><span class="plain">(</span><span class="constant">PLUGIN_DETECT_BODYSNATCHING</span><span class="plain">, </span><span class="identifier">body</span><span class="plain">, </span><span class="identifier">snatcher</span><span class="plain">, </span><span class="identifier">counterpart</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Plugins::Call::add_to_World_index</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">instance</span><span class="plain"> *</span><span class="identifier">O</span><span class="plain">) {</span>
<span class="identifier">PLUGINS_CALL</span><span class="plain">(</span><span class="constant">PLUGIN_ADD_TO_WORLD_INDEX</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">O</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Plugins::Call::annotate_in_World_index</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">instance</span><span class="plain"> *</span><span class="identifier">O</span><span class="plain">) {</span>
<span class="identifier">PLUGINS_CALL</span><span class="plain">(</span><span class="constant">PLUGIN_ANNOTATE_IN_WORLD_INDEX</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">O</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function Plugins::Call::name_to_early_infs appears nowhere else.</p>
<p class="endnote">The function Plugins::Call::new_variable_notify is used in 5/nv (<a href="5-nv.html#SP7">&#167;7</a>).</p>
<p class="endnote">The function Plugins::Call::new_base_kind_notify appears nowhere else.</p>
<p class="endnote">The function Plugins::Call::compile_constant is used in 14/rv (<a href="14-rv.html#SP24_3">&#167;24.3</a>).</p>
<p class="endnote">The function Plugins::Call::new_subject_notify is used in 16/is (<a href="16-is.html#SP10">&#167;10</a>).</p>
<p class="endnote">The function Plugins::Call::new_named_instance_notify is used in 5/ins (<a href="5-ins.html#SP6">&#167;6</a>).</p>
<p class="endnote">The function Plugins::Call::new_permission_notify is used in 16/pp (<a href="16-pp.html#SP9_4">&#167;9.4</a>).</p>
<p class="endnote">The function Plugins::Call::irregular_genitive is used in 9/tc (<a href="9-tc.html#SP8_4_1_1_1">&#167;8.4.1.1.1</a>).</p>
<p class="endnote">The function Plugins::Call::set_kind_notify is used in 5/ins (<a href="5-ins.html#SP19">&#167;19</a>).</p>
<p class="endnote">The function Plugins::Call::set_subkind_notify appears nowhere else.</p>
<p class="endnote">The function Plugins::Call::complete_model is used in 9/tfa (<a href="9-tfa.html#SP7_1">&#167;7.1</a>), 16/cmw (<a href="16-cmw.html#SP1_1">&#167;1.1</a>, <a href="16-cmw.html#SP1_2">&#167;1.2</a>, <a href="16-cmw.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Plugins::Call::parse_composite_NQs is used in 10/cad (<a href="10-cad.html#SP22">&#167;22</a>).</p>
<p class="endnote">The function Plugins::Call::refine_implicit_noun is used in 9/rpt (<a href="9-rpt.html#SP9_7_1">&#167;9.7.1</a>).</p>
<p class="endnote">The function Plugins::Call::act_on_special_NPs is used in 9/rpt (<a href="9-rpt.html#SP9_7_5">&#167;9.7.5</a>).</p>
<p class="endnote">The function Plugins::Call::new_property_notify is used in 15/pr (<a href="15-pr.html#SP5_6">&#167;5.6</a>).</p>
<p class="endnote">The function Plugins::Call::property_value_notify is used in 16/in (<a href="16-in.html#SP20">&#167;20</a>).</p>
<p class="endnote">The function Plugins::Call::more_specific is used in 14/sp (<a href="14-sp.html#SP7_4">&#167;7.4</a>).</p>
<p class="endnote">The function Plugins::Call::inferences_contradict is used in 16/in (<a href="16-in.html#SP20_3_2">&#167;20.3.2</a>).</p>
<p class="endnote">The function Plugins::Call::explain_contradiction is used in 16/in (<a href="16-in.html#SP20_3_3">&#167;20.3.3</a>).</p>
<p class="endnote">The function Plugins::Call::intervene_in_assertion is used in 9/ma (<a href="9-ma.html#SP3_1">&#167;3.1</a>).</p>
<p class="endnote">The function Plugins::Call::log_inference_type is used in 16/in (<a href="16-in.html#SP22">&#167;22</a>).</p>
<p class="endnote">The function Plugins::Call::estimate_property_usage is used in 15/epv (<a href="15-epv.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function Plugins::Call::check_going appears nowhere else.</p>
<p class="endnote">The function Plugins::Call::compile_model_tables is used in 16/cmw2 (<a href="16-cmw2.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Plugins::Call::default_appearance is used in 15/ia (<a href="15-ia.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Plugins::Call::offered_property is used in 9/ma (<a href="9-ma.html#SP3_3_25">&#167;3.3.25</a>).</p>
<p class="endnote">The function Plugins::Call::offered_specification is used in 9/ma (<a href="9-ma.html#SP3_3_26_1">&#167;3.3.26.1</a>).</p>
<p class="endnote">The function Plugins::Call::typecheck_equality is used in 12/ter (<a href="12-ter.html#SP5">&#167;5</a>).</p>
<p class="endnote">The function Plugins::Call::forbid_setting is used in 12/ter (<a href="12-ter.html#SP8">&#167;8</a>).</p>
<p class="endnote">The function Plugins::Call::variable_set_warning is used in 9/ma (<a href="9-ma.html#SP3_3_41_3">&#167;3.3.41.3</a>).</p>
<p class="endnote">The function Plugins::Call::detect_bodysnatching is used in 9/ass (<a href="9-ass.html#SP14">&#167;14</a>).</p>
<p class="endnote">The function Plugins::Call::add_to_World_index is used in 5/ipw (<a href="5-ipw.html#SP3">&#167;3</a>).</p>
<p class="endnote">The function Plugins::Call::annotate_in_World_index is used in 5/ipw (<a href="5-ipw.html#SP3_4">&#167;3.4</a>).</p>
<hr class="tocbar">
<ul class="toc"><li><a href="26-pl.html">Back to 'Plugins'</a></li><li><a href="26-ts.html">Continue with 'Test Scripts'</a></li></ul><hr class="tocbar">
<!--End of weave-->
</body>
</html>