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/2-sq.html
2019-04-22 15:42:10 +01:00

208 lines
35 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>2/up</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 '2/sq' 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#2">Chapter 2: Bridge to Problems Module</a></li><li><b>Supplementary Quotes</b></li></ul><p class="purpose">More things to quote in problem messages.</p>
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. </b>We provide some simple extensions to the Problems module's stock of data
structures which can be quoted. (These routines look as if they ought to be
automated with macros, but that would be a nuisance because the tangler then
wouldn't auto-predeclare them; and there aren't so very many of them.)
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Problems::quote_spec</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">t</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">Problems::problem_quote</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, (</span><span class="reserved">void</span><span class="plain"> *) </span><span class="identifier">p</span><span class="plain">, </span><span class="functiontext">Problems::expand_spec</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Problems::expand_spec</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">) {</span>
<span class="functiontext">Specifications::write_out_in_English</span><span class="plain">(</span><span class="identifier">OUT</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="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Problems::quote_relation</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">t</span><span class="plain">, </span><span class="reserved">binary_predicate</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">) {</span>
<span class="identifier">Problems::problem_quote</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, (</span><span class="reserved">void</span><span class="plain"> *) </span><span class="identifier">p</span><span class="plain">, </span><span class="functiontext">Problems::expand_relation</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Problems::expand_relation</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">) {</span>
<span class="functiontext">BinaryPredicates::describe_for_problems</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, (</span><span class="reserved">binary_predicate</span><span class="plain"> *) </span><span class="identifier">p</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Problems::quote_phrase</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">t</span><span class="plain">, </span><span class="reserved">phrase</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">) {</span>
<span class="identifier">Problems::problem_quote</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, (</span><span class="reserved">void</span><span class="plain"> *) </span><span class="identifier">p</span><span class="plain">, </span><span class="functiontext">Problems::expand_phrase</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Problems::expand_phrase</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">) {</span>
<span class="functiontext">Phrases::write_HTML_representation</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, (</span><span class="reserved">phrase</span><span class="plain"> *) </span><span class="identifier">p</span><span class="plain">, </span><span class="constant">INDEX_PHRASE_FORMAT</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Problems::quote_extension</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">t</span><span class="plain">, </span><span class="reserved">extension_file</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">) {</span>
<span class="identifier">Problems::problem_quote</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, (</span><span class="reserved">void</span><span class="plain"> *) </span><span class="identifier">p</span><span class="plain">, </span><span class="functiontext">Problems::expand_extension</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Problems::expand_extension</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">) {</span>
<span class="functiontext">Extensions::Files::write_full_title_to_stream</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, (</span><span class="reserved">extension_file</span><span class="plain"> *) </span><span class="identifier">p</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Problems::quote_object</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">t</span><span class="plain">, </span><span class="reserved">instance</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">) {</span>
<span class="identifier">Problems::problem_quote</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, (</span><span class="reserved">void</span><span class="plain"> *) </span><span class="identifier">p</span><span class="plain">, </span><span class="functiontext">Problems::expand_object</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function Problems::quote_spec is used in <a href="#SP4">&#167;4</a>, 9/pk (<a href="9-pk.html#SP3_2">&#167;3.2</a>), 9/pd (<a href="9-pd.html#SP5_11_1">&#167;5.11.1</a>), 12/dtd (<a href="12-dtd.html#SP13">&#167;13</a>), 14/ds2 (<a href="14-ds2.html#SP10_1_1_3_1">&#167;10.1.1.3.1</a>, <a href="14-ds2.html#SP11_6_1">&#167;11.6.1</a>), 16/in (<a href="16-in.html#SP20_3_3">&#167;20.3.3</a>), 18/lc (<a href="18-lc.html#SP8_1_2">&#167;8.1.2</a>), 20/eq (<a href="20-eq.html#SP47_1">&#167;47.1</a>), 25/cii (<a href="25-cii.html#SP3_1_1_2">&#167;3.1.1.2</a>, <a href="25-cii.html#SP3_1_1_4_6">&#167;3.1.1.4.6</a>, <a href="25-cii.html#SP3_7_1">&#167;3.7.1</a>), 25/cp (<a href="25-cp.html#SP5_3_5">&#167;5.3.5</a>).</p>
<p class="endnote">The function Problems::expand_spec appears nowhere else.</p>
<p class="endnote">The function Problems::quote_relation is used in 11/tcp (<a href="11-tcp.html#SP12">&#167;12</a>), 14/ds2 (<a href="14-ds2.html#SP10_1_1_3_1_3">&#167;10.1.1.3.1.3</a>), 16/in (<a href="16-in.html#SP20_3_3">&#167;20.3.3</a>).</p>
<p class="endnote">The function Problems::expand_relation appears nowhere else.</p>
<p class="endnote">The function Problems::quote_phrase is used in 22/po (<a href="22-po.html#SP10_1_1">&#167;10.1.1</a>, <a href="22-po.html#SP11_1">&#167;11.1</a>), 22/tp (<a href="22-tp.html#SP8">&#167;8</a>).</p>
<p class="endnote">The function Problems::expand_phrase appears nowhere else.</p>
<p class="endnote">The function Problems::quote_extension is used in 2/si (<a href="2-si.html#SP11">&#167;11</a>), 8/ef (<a href="8-ef.html#SP18">&#167;18</a>), 8/ie (<a href="8-ie.html#SP9">&#167;9</a>, <a href="8-ie.html#SP9_2">&#167;9.2</a>, <a href="8-ie.html#SP9_1_1">&#167;9.1.1</a>, <a href="8-ie.html#SP10">&#167;10</a>).</p>
<p class="endnote">The function Problems::expand_extension appears nowhere else.</p>
<p class="endnote">The function Problems::quote_object is used in <a href="#SP2">&#167;2</a>, 2/si (<a href="2-si.html#SP2">&#167;2</a>, <a href="2-si.html#SP7">&#167;7</a>), 5/ins (<a href="5-ins.html#SP19_1">&#167;19.1</a>).</p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. </b>Since numerous instances are created without explicit and distinct
names, for instance by sentences like
</p>
<blockquote>
<p>Four coins are in the box.</p>
</blockquote>
<p class="inwebparagraph">...it's prudent to quote instances without names carefully, and not to ignore
this as some kind of marginal will-never-happen case.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Problems::expand_object</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">p</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="reserved">instance</span><span class="plain"> *) </span><span class="identifier">p</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">I</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="functiontext">Instances::get_name</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Wordings::nonempty</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">))</span>
<span class="identifier">Problems::expand_text_within_reason</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"nameless "</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="functiontext">Instances::to_kind</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">KW</span><span class="plain"> = </span><span class="identifier">Kinds::Behaviour::get_name</span><span class="plain">(</span><span class="identifier">k</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Wordings::nonempty</span><span class="plain">(</span><span class="identifier">KW</span><span class="plain">)) </span><span class="identifier">Problems::expand_text_within_reason</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">KW</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"thing"</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="functiontext">Instances::get_creating_sentence</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">from</span><span class="plain">) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" created in the sentence "</span><span class="plain">);</span>
<span class="identifier">Problems::append_source</span><span class="plain">(</span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">from</span><span class="plain">));</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Problems::quote_subject</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">t</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="reserved">if</span><span class="plain"> (</span><span class="identifier">infs</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) { </span><span class="identifier">Problems::quote_text</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, </span><span class="string">"something"</span><span class="plain">); </span><span class="reserved">return</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="functiontext">InferenceSubjects::get_name_text</span><span class="plain">(</span><span class="identifier">infs</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Wordings::nonempty</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">)) { </span><span class="identifier">Problems::quote_wording</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">); </span><span class="reserved">return</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="functiontext">InferenceSubjects::as_object_instance</span><span class="plain">(</span><span class="identifier">infs</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">I</span><span class="plain">) { </span><span class="functiontext">Problems::quote_object</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">); </span><span class="reserved">return</span><span class="plain">; }</span>
<span class="identifier">Problems::quote_text</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, </span><span class="string">"something nameless"</span><span class="plain">); </span> <span class="comment">this never actually happens</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Problems::quote_invocation</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">t</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">Problems::problem_quote</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, (</span><span class="reserved">void</span><span class="plain"> *) </span><span class="identifier">p</span><span class="plain">, </span><span class="functiontext">Problems::expand_invocation</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Problems::expand_invocation</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">) {</span>
<span class="functiontext">Phrases::TypeData::Textual::inv_write_HTML_representation</span><span class="plain">(</span><span class="identifier">OUT</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="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Problems::quote_extension_id</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">t</span><span class="plain">, </span><span class="reserved">extension_identifier</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">) {</span>
<span class="identifier">Problems::problem_quote</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, (</span><span class="reserved">void</span><span class="plain"> *) </span><span class="identifier">p</span><span class="plain">, </span><span class="functiontext">Problems::expand_extension_id</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Problems::expand_extension_id</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">) {</span>
<span class="functiontext">Extensions::IDs::write_to_HTML_file</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, (</span><span class="reserved">extension_identifier</span><span class="plain"> *) </span><span class="identifier">p</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Problems::quote_property</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">t</span><span class="plain">, </span><span class="reserved">property</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">) { </span><span class="identifier">Problems::quote_wording</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, </span><span class="identifier">p</span><span class="plain">-</span><span class="element">&gt;name</span><span class="plain">); }</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Problems::quote_table</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">t</span><span class="plain">, </span><span class="reserved">table</span><span class="plain"> *</span><span class="identifier">tab</span><span class="plain">) {</span>
<span class="identifier">Problems::quote_source</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, </span><span class="functiontext">Tables::get_headline</span><span class="plain">(</span><span class="identifier">tab</span><span class="plain">));</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function Problems::expand_object is used in <a href="#SP1">&#167;1</a>.</p>
<p class="endnote">The function Problems::quote_subject is used in 2/si (<a href="2-si.html#SP2">&#167;2</a>, <a href="2-si.html#SP7">&#167;7</a>, <a href="2-si.html#SP8">&#167;8</a>, <a href="2-si.html#SP9">&#167;9</a>), 9/ma (<a href="9-ma.html#SP3_3_8_1">&#167;3.3.8.1</a>, <a href="9-ma.html#SP3_3_38">&#167;3.3.38</a>), 9/ass (<a href="9-ass.html#SP14_1">&#167;14.1</a>), 14/ds2 (<a href="14-ds2.html#SP11_9_1_2_3_4">&#167;11.9.1.2.3.4</a>), 16/in (<a href="16-in.html#SP20_3_3">&#167;20.3.3</a>), 19/tb (<a href="19-tb.html#SP24_5">&#167;24.5</a>).</p>
<p class="endnote">The function Problems::quote_invocation is used in 14/ds2 (<a href="14-ds2.html#SP10_1_1_2">&#167;10.1.1.2</a>).</p>
<p class="endnote">The function Problems::expand_invocation appears nowhere else.</p>
<p class="endnote">The function Problems::quote_extension_id is used in 7/hdn (<a href="7-hdn.html#SP20_1">&#167;20.1</a>, <a href="7-hdn.html#SP21_1">&#167;21.1</a>, <a href="7-hdn.html#SP20_2">&#167;20.2</a>).</p>
<p class="endnote">The function Problems::expand_extension_id appears nowhere else.</p>
<p class="endnote">The function Problems::quote_property is used in 2/si (<a href="2-si.html#SP9">&#167;9</a>, <a href="2-si.html#SP10">&#167;10</a>), 9/ma (<a href="9-ma.html#SP3_3_8_2">&#167;3.3.8.2</a>), 9/pk (<a href="9-pk.html#SP4_1">&#167;4.1</a>, <a href="9-pk.html#SP4_2">&#167;4.2</a>, <a href="9-pk.html#SP4_3">&#167;4.3</a>, <a href="9-pk.html#SP4_4">&#167;4.4</a>), 9/pd (<a href="9-pd.html#SP7_1_3">&#167;7.1.3</a>), 11/tc (<a href="11-tc.html#SP7_1">&#167;7.1</a>), 14/ds2 (<a href="14-ds2.html#SP11_9_1_1_5_1_3">&#167;11.9.1.1.5.1.3</a>), 15/ep (<a href="15-ep.html#SP6">&#167;6</a>), 15/cr (<a href="15-cr.html#SP5">&#167;5</a>), 15/spr2 (<a href="15-spr2.html#SP9_1">&#167;9.1</a>, <a href="15-spr2.html#SP9_2">&#167;9.2</a>), 15/pov (<a href="15-pov.html#SP4_1">&#167;4.1</a>), 16/in (<a href="16-in.html#SP14">&#167;14</a>).</p>
<p class="endnote">The function Problems::quote_table is used in 2/si (<a href="2-si.html#SP3">&#167;3</a>), 9/tc (<a href="9-tc.html#SP5_4_2_7">&#167;5.4.2.7</a>), 19/tc (<a href="19-tc.html#SP6_1">&#167;6.1</a>, <a href="19-tc.html#SP14_1">&#167;14.1</a>, <a href="19-tc.html#SP15_5">&#167;15.5</a>, <a href="19-tc.html#SP15_6">&#167;15.6</a>), 19/tb (<a href="19-tb.html#SP8">&#167;8</a>, <a href="19-tb.html#SP20_5">&#167;20.5</a>, <a href="19-tb.html#SP20_6">&#167;20.6</a>, <a href="19-tb.html#SP20_10_2_1">&#167;20.10.2.1</a>, <a href="19-tb.html#SP20_10_2_2">&#167;20.10.2.2</a>, <a href="19-tb.html#SP20_10_3_2">&#167;20.10.3.2</a>, <a href="19-tb.html#SP20_10_4_1">&#167;20.10.4.1</a>, <a href="19-tb.html#SP27_1_3_2">&#167;27.1.3.2</a>, <a href="19-tb.html#SP27_1_3_2_1">&#167;27.1.3.2.1</a>).</p>
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. </b>To quote a kind is straightforward enough:
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Problems::quote_kind</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">t</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">if</span><span class="plain"> ((</span><span class="identifier">K</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (</span><span class="identifier">Kinds::Compare::eq</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">K_nil</span><span class="plain">))) </span><span class="identifier">Problems::quote_text</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, </span><span class="string">"nothing"</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">Problems::problem_quote</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, (</span><span class="reserved">void</span><span class="plain"> *) </span><span class="identifier">K</span><span class="plain">, </span><span class="functiontext">Problems::expand_kind</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Problems::expand_kind</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">) {</span>
<span class="identifier">Kinds::Textual::write_articled</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, (</span><span class="identifier">kind</span><span class="plain"> *) </span><span class="identifier">p</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function Problems::quote_kind is used in <a href="#SP4">&#167;4</a>, 5/lp (<a href="5-lp.html#SP34_5">&#167;34.5</a>, <a href="5-lp.html#SP34_6">&#167;34.6</a>), 5/ins (<a href="5-ins.html#SP19_1">&#167;19.1</a>), 5/nv (<a href="5-nv.html#SP7_1">&#167;7.1</a>, <a href="5-nv.html#SP23">&#167;23</a>, <a href="5-nv.html#SP25_2">&#167;25.2</a>), 6/tur (<a href="6-tur.html#SP5">&#167;5</a>), 9/tc (<a href="9-tc.html#SP5_4_2_6">&#167;5.4.2.6</a>, <a href="9-tc.html#SP5_4_2_7">&#167;5.4.2.7</a>, <a href="9-tc.html#SP5_4_2_8">&#167;5.4.2.8</a>, <a href="9-tc.html#SP8_1">&#167;8.1</a>), 9/ma (<a href="9-ma.html#SP3_3_39_1">&#167;3.3.39.1</a>), 9/pk (<a href="9-pk.html#SP2_1">&#167;2.1</a>, <a href="9-pk.html#SP4_4">&#167;4.4</a>), 9/pd (<a href="9-pd.html#SP5_6_1">&#167;5.6.1</a>, <a href="9-pd.html#SP7_1_3">&#167;7.1.3</a>), 11/tc (<a href="11-tc.html#SP7_1">&#167;7.1</a>), 11/tcp (<a href="11-tcp.html#SP6_9">&#167;6.9</a>, <a href="11-tcp.html#SP6_10">&#167;6.10</a>, <a href="11-tcp.html#SP6_11">&#167;6.11</a>, <a href="11-tcp.html#SP10">&#167;10</a>, <a href="11-tcp.html#SP11">&#167;11</a>, <a href="11-tcp.html#SP11_3">&#167;11.3</a>, <a href="11-tcp.html#SP12">&#167;12</a>), 12/ter (<a href="12-ter.html#SP5_1">&#167;5.1</a>, <a href="12-ter.html#SP8_4">&#167;8.4</a>), 12/qr (<a href="12-qr.html#SP5">&#167;5</a>), 12/ca (<a href="12-ca.html#SP6_2">&#167;6.2</a>), 13/kak (<a href="13-kak.html#SP7">&#167;7</a>), 13/rsfk (<a href="13-rsfk.html#SP4_1">&#167;4.1</a>, <a href="13-rsfk.html#SP4_2">&#167;4.2</a>, <a href="13-rsfk.html#SP16_2">&#167;16.2</a>, <a href="13-rsfk.html#SP26">&#167;26</a>), 14/ds2 (<a href="14-ds2.html#SP10_1_1_3_1">&#167;10.1.1.3.1</a>, <a href="14-ds2.html#SP11_8_1">&#167;11.8.1</a>, <a href="14-ds2.html#SP11_9_1_1_2_2_2">&#167;11.9.1.1.2.2.2</a>, <a href="14-ds2.html#SP11_9_1_1_3_1_1">&#167;11.9.1.1.3.1.1</a>, <a href="14-ds2.html#SP11_9_1_1_5_2">&#167;11.9.1.1.5.2</a>, <a href="14-ds2.html#SP11_9_1_2_3_3">&#167;11.9.1.2.3.3</a>, <a href="14-ds2.html#SP11_9_1_2_4">&#167;11.9.1.2.4</a>, <a href="14-ds2.html#SP15_4">&#167;15.4</a>, <a href="14-ds2.html#SP19_1">&#167;19.1</a>, <a href="14-ds2.html#SP19_2">&#167;19.2</a>, <a href="14-ds2.html#SP19_2_1">&#167;19.2.1</a>, <a href="14-ds2.html#SP19_5_3_2">&#167;19.5.3.2</a>, <a href="14-ds2.html#SP19_6_1_1">&#167;19.6.1.1</a>, <a href="14-ds2.html#SP19_6_2_1">&#167;19.6.2.1</a>, <a href="14-ds2.html#SP19_6_2_2">&#167;19.6.2.2</a>), 15/vp (<a href="15-vp.html#SP5">&#167;5</a>), 15/cp (<a href="15-cp.html#SP3">&#167;3</a>), 15/tpr (<a href="15-tpr.html#SP5">&#167;5</a>), 15/spr2 (<a href="15-spr2.html#SP9_1">&#167;9.1</a>, <a href="15-spr2.html#SP9_2">&#167;9.2</a>), 15/pov (<a href="15-pov.html#SP4_1">&#167;4.1</a>), 16/in (<a href="16-in.html#SP14">&#167;14</a>), 18/lc (<a href="18-lc.html#SP8_2_1">&#167;8.2.1</a>), 19/tc (<a href="19-tc.html#SP6_1">&#167;6.1</a>, <a href="19-tc.html#SP14_1">&#167;14.1</a>, <a href="19-tc.html#SP15">&#167;15</a>, <a href="19-tc.html#SP15_6">&#167;15.6</a>), 19/tod (<a href="19-tod.html#SP6_2">&#167;6.2</a>, <a href="19-tod.html#SP6_3_3">&#167;6.3.3</a>), 20/eq (<a href="20-eq.html#SP41_4_1">&#167;41.4.1</a>, <a href="20-eq.html#SP41_4_2">&#167;41.4.2</a>, <a href="20-eq.html#SP47_3_2">&#167;47.3.2</a>), 21/rl (<a href="21-rl.html#SP15">&#167;15</a>, <a href="21-rl.html#SP18">&#167;18</a>), 22/pu (<a href="22-pu.html#SP20_1_1_2">&#167;20.1.1.2</a>), 25/ci (<a href="25-ci.html#SP3_1_1_2">&#167;3.1.1.2</a>), 25/cii (<a href="25-cii.html#SP3_2_1_1">&#167;3.2.1.1</a>, <a href="25-cii.html#SP3_1_1_4_7_1_2">&#167;3.1.1.4.7.1.2</a>, <a href="25-cii.html#SP3_5_3">&#167;3.5.3</a>, <a href="25-cii.html#SP3_5_4_3">&#167;3.5.4.3</a>), 25/cp (<a href="25-cp.html#SP5_3_5">&#167;5.3.5</a>).</p>
<p class="endnote">The function Problems::expand_kind appears nowhere else.</p>
<p class="inwebparagraph"><a id="SP4"></a><b>&#167;4. </b>But we also provide another way to mention kinds within problem messages;
we quote not a literal constant but its kind of value, changing (say) the
actual constant 15 to the generic constant "number":
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Problems::quote_kind_of</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">t</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="reserved">if</span><span class="plain"> (</span><span class="functiontext">Rvalues::is_object</span><span class="plain">(</span><span class="identifier">spec</span><span class="plain">)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ParseTree::int_annotation</span><span class="plain">(</span><span class="identifier">spec</span><span class="plain">, </span><span class="constant">self_object_ANNOT</span><span class="plain">)) {</span>
<span class="identifier">Problems::quote_text</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, </span><span class="string">"implicit object"</span><span class="plain">); </span> <span class="comment">this is probably never seen, but just in case</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ParseTree::int_annotation</span><span class="plain">(</span><span class="identifier">spec</span><span class="plain">, </span><span class="constant">nothing_object_ANNOT</span><span class="plain">)) {</span>
<span class="identifier">Problems::quote_text</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, </span><span class="string">"the 'nothing' non-object"</span><span class="plain">); </span> <span class="comment">whereas this can certainly happen</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</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="functiontext">Rvalues::to_instance</span><span class="plain">(</span><span class="identifier">spec</span><span class="plain">);</span>
<span class="functiontext">Problems::quote_kind</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, </span><span class="functiontext">Instances::to_kind</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">));</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</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="functiontext">Specifications::to_kind</span><span class="plain">(</span><span class="identifier">spec</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">K</span><span class="plain">) </span><span class="functiontext">Problems::quote_kind</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, </span><span class="identifier">K</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="functiontext">Problems::quote_spec</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, </span><span class="identifier">spec</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function Problems::quote_kind_of is used in 9/ma (<a href="9-ma.html#SP3_3_8_3">&#167;3.3.8.3</a>, <a href="9-ma.html#SP3_3_11">&#167;3.3.11</a>, <a href="9-ma.html#SP3_3_39">&#167;3.3.39</a>, <a href="9-ma.html#SP3_3_41_2_1">&#167;3.3.41.2.1</a>, <a href="9-ma.html#SP3_3_41_8">&#167;3.3.41.8</a>), 14/ds2 (<a href="14-ds2.html#SP11_4_1">&#167;11.4.1</a>, <a href="14-ds2.html#SP11_8_1">&#167;11.8.1</a>, <a href="14-ds2.html#SP19_6_2_1">&#167;19.6.2.1</a>, <a href="14-ds2.html#SP19_6_2_2">&#167;19.6.2.2</a>), 15/pr (<a href="15-pr.html#SP5_2">&#167;5.2</a>), 19/tod (<a href="19-tod.html#SP6_3_3">&#167;6.3.3</a>), 24/lv (<a href="24-lv.html#SP33_2">&#167;33.2</a>), 25/cii (<a href="25-cii.html#SP3_1_1_4_7_1_1">&#167;3.1.1.4.7.1.1</a>).</p>
<hr class="tocbar">
<ul class="toc"><li><a href="2-up.html">Back to 'Using Problems'</a></li><li><a href="2-si.html">Continue with 'Supplementary Issues'</a></li></ul><hr class="tocbar">
<!--End of weave-->
</body>
</html>