1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-05 08:34:22 +03:00
inform7/docs/if-module/5-tpv.html

388 lines
59 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>5/nft</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 '5/tpv' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">&#9733;</a></li><li><a href="index.html">if</a></li><li><a href="index.html#5">Chapter 5: Command Grammar</a></li><li><b>Tokens Parsing Values</b></li></ul><p class="purpose">In the argot of Inform 6, GPR stands for General Parsing Routine, and I7 makes heavy use of GPR tokens to achieve its ends. This section is where the necessary I6 routines are compiled.</p>
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. </b></p>
<pre class="display">
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">gpr_kit</span><span class="plain"> {</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">cur_addr_s</span><span class="plain">;</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">cur_len_s</span><span class="plain">;</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">cur_word_s</span><span class="plain">;</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">f_s</span><span class="plain">;</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">g_s</span><span class="plain">;</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">group_wn_s</span><span class="plain">;</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">instance_s</span><span class="plain">;</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">matched_number_s</span><span class="plain">;</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">mid_word_s</span><span class="plain">;</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">n_s</span><span class="plain">;</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">original_wn_s</span><span class="plain">;</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">pass_s</span><span class="plain">;</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">pass1_n_s</span><span class="plain">;</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">pass2_n_s</span><span class="plain">;</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">range_from_s</span><span class="plain">;</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">range_words_s</span><span class="plain">;</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">rv_s</span><span class="plain">;</span>
<span class="identifier">local_variable</span><span class="plain"> *</span><span class="identifier">rv_lv</span><span class="plain">;</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">sgn_s</span><span class="plain">;</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">spn_s</span><span class="plain">;</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">ss_s</span><span class="plain">;</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">tot_s</span><span class="plain">;</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">try_from_wn_s</span><span class="plain">;</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">v_s</span><span class="plain">;</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">w_s</span><span class="plain">;</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">wpos_s</span><span class="plain">;</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">x_s</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">gpr_kit</span><span class="plain">;</span>
<span class="reserved">gpr_kit</span><span class="plain"> </span><span class="functiontext">PL::Parsing::Tokens::Values::new_kit</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="reserved">gpr_kit</span><span class="plain"> </span><span class="identifier">gprk</span><span class="plain">;</span>
<span class="identifier">gprk</span><span class="element">.cur_addr_s</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">gprk</span><span class="element">.cur_len_s</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">gprk</span><span class="element">.cur_word_s</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">gprk</span><span class="element">.f_s</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">gprk</span><span class="element">.g_s</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">gprk</span><span class="element">.group_wn_s</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">gprk</span><span class="element">.instance_s</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">gprk</span><span class="element">.matched_number_s</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">gprk</span><span class="element">.mid_word_s</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">gprk</span><span class="element">.n_s</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">gprk</span><span class="element">.original_wn_s</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">gprk</span><span class="element">.pass_s</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">gprk</span><span class="element">.pass1_n_s</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">gprk</span><span class="element">.pass2_n_s</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">gprk</span><span class="element">.range_from_s</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">gprk</span><span class="element">.range_words_s</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">gprk</span><span class="element">.rv_s</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">gprk</span><span class="element">.rv_lv</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">gprk</span><span class="element">.sgn_s</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">gprk</span><span class="element">.spn_s</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">gprk</span><span class="element">.ss_s</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">gprk</span><span class="element">.tot_s</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">gprk</span><span class="element">.try_from_wn_s</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">gprk</span><span class="element">.v_s</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">gprk</span><span class="element">.w_s</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">gprk</span><span class="element">.wpos_s</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">gprk</span><span class="element">.x_s</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">gprk</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::Parsing::Tokens::Values::add_instance_call</span><span class="plain">(</span><span class="reserved">gpr_kit</span><span class="plain"> *</span><span class="identifier">gprk</span><span class="plain">) {</span>
<span class="identifier">gprk</span><span class="plain">-</span><span class="element">&gt;instance_s</span><span class="plain"> = </span><span class="identifier">LocalVariables::add_named_call_as_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"instance"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::Parsing::Tokens::Values::add_range_calls</span><span class="plain">(</span><span class="reserved">gpr_kit</span><span class="plain"> *</span><span class="identifier">gprk</span><span class="plain">) {</span>
<span class="identifier">gprk</span><span class="plain">-</span><span class="element">&gt;range_from_s</span><span class="plain"> = </span><span class="identifier">LocalVariables::add_internal_local_c_as_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"range_from"</span><span class="plain">, </span><span class="string">"call parameter: word number of snippet start"</span><span class="plain">);</span>
<span class="identifier">gprk</span><span class="plain">-</span><span class="element">&gt;range_words_s</span><span class="plain"> = </span><span class="identifier">LocalVariables::add_internal_local_c_as_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"range_words"</span><span class="plain">, </span><span class="string">"call parameter: snippet length"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::Parsing::Tokens::Values::add_original</span><span class="plain">(</span><span class="reserved">gpr_kit</span><span class="plain"> *</span><span class="identifier">gprk</span><span class="plain">) {</span>
<span class="identifier">gprk</span><span class="plain">-</span><span class="element">&gt;original_wn_s</span><span class="plain"> = </span><span class="identifier">LocalVariables::add_internal_local_as_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"original_wn"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::Parsing::Tokens::Values::add_standard_set</span><span class="plain">(</span><span class="reserved">gpr_kit</span><span class="plain"> *</span><span class="identifier">gprk</span><span class="plain">) {</span>
<span class="identifier">gprk</span><span class="plain">-</span><span class="element">&gt;group_wn_s</span><span class="plain"> = </span><span class="identifier">LocalVariables::add_internal_local_as_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"group_wn"</span><span class="plain">);</span>
<span class="identifier">gprk</span><span class="plain">-</span><span class="element">&gt;v_s</span><span class="plain"> = </span><span class="identifier">LocalVariables::add_internal_local_as_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"v"</span><span class="plain">);</span>
<span class="identifier">gprk</span><span class="plain">-</span><span class="element">&gt;w_s</span><span class="plain"> = </span><span class="identifier">LocalVariables::add_internal_local_as_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"w"</span><span class="plain">);</span>
<span class="identifier">gprk</span><span class="plain">-</span><span class="element">&gt;rv_s</span><span class="plain"> = </span><span class="identifier">LocalVariables::add_internal_local_as_symbol_noting</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"rv"</span><span class="plain">, &amp;(</span><span class="identifier">gprk</span><span class="plain">-</span><span class="element">&gt;rv_lv</span><span class="plain">));</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::Parsing::Tokens::Values::add_lp_vars</span><span class="plain">(</span><span class="reserved">gpr_kit</span><span class="plain"> *</span><span class="identifier">gprk</span><span class="plain">) {</span>
<span class="identifier">gprk</span><span class="plain">-</span><span class="element">&gt;wpos_s</span><span class="plain"> = </span><span class="identifier">LocalVariables::add_internal_local_as_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"wpos"</span><span class="plain">);</span>
<span class="identifier">gprk</span><span class="plain">-</span><span class="element">&gt;mid_word_s</span><span class="plain"> = </span><span class="identifier">LocalVariables::add_internal_local_as_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"mid_word"</span><span class="plain">);</span>
<span class="identifier">gprk</span><span class="plain">-</span><span class="element">&gt;matched_number_s</span><span class="plain"> = </span><span class="identifier">LocalVariables::add_internal_local_as_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"matched_number"</span><span class="plain">);</span>
<span class="identifier">gprk</span><span class="plain">-</span><span class="element">&gt;cur_word_s</span><span class="plain"> = </span><span class="identifier">LocalVariables::add_internal_local_as_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"cur_word"</span><span class="plain">);</span>
<span class="identifier">gprk</span><span class="plain">-</span><span class="element">&gt;cur_len_s</span><span class="plain"> = </span><span class="identifier">LocalVariables::add_internal_local_as_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"cur_len"</span><span class="plain">);</span>
<span class="identifier">gprk</span><span class="plain">-</span><span class="element">&gt;cur_addr_s</span><span class="plain"> = </span><span class="identifier">LocalVariables::add_internal_local_as_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"cur_addr"</span><span class="plain">);</span>
<span class="identifier">gprk</span><span class="plain">-</span><span class="element">&gt;sgn_s</span><span class="plain"> = </span><span class="identifier">LocalVariables::add_internal_local_as_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"sgn"</span><span class="plain">);</span>
<span class="identifier">gprk</span><span class="plain">-</span><span class="element">&gt;tot_s</span><span class="plain"> = </span><span class="identifier">LocalVariables::add_internal_local_as_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"tot"</span><span class="plain">);</span>
<span class="identifier">gprk</span><span class="plain">-</span><span class="element">&gt;f_s</span><span class="plain"> = </span><span class="identifier">LocalVariables::add_internal_local_as_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"f"</span><span class="plain">);</span>
<span class="identifier">gprk</span><span class="plain">-</span><span class="element">&gt;x_s</span><span class="plain"> = </span><span class="identifier">LocalVariables::add_internal_local_as_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"x"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::Parsing::Tokens::Values::add_parse_name_vars</span><span class="plain">(</span><span class="reserved">gpr_kit</span><span class="plain"> *</span><span class="identifier">gprk</span><span class="plain">) {</span>
<span class="identifier">gprk</span><span class="plain">-</span><span class="element">&gt;original_wn_s</span><span class="plain"> = </span><span class="identifier">LocalVariables::add_internal_local_c_as_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"original_wn"</span><span class="plain">, </span><span class="string">"first word of text parsed"</span><span class="plain">);</span>
<span class="identifier">gprk</span><span class="plain">-</span><span class="element">&gt;group_wn_s</span><span class="plain"> = </span><span class="identifier">LocalVariables::add_internal_local_c_as_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"group_wn"</span><span class="plain">, </span><span class="string">"first word matched against A/B/C/... disjunction"</span><span class="plain">);</span>
<span class="identifier">gprk</span><span class="plain">-</span><span class="element">&gt;try_from_wn_s</span><span class="plain"> = </span><span class="identifier">LocalVariables::add_internal_local_c_as_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"try_from_wn"</span><span class="plain">, </span><span class="string">"position to try matching from"</span><span class="plain">);</span>
<span class="identifier">gprk</span><span class="plain">-</span><span class="element">&gt;n_s</span><span class="plain"> = </span><span class="identifier">LocalVariables::add_internal_local_c_as_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"n"</span><span class="plain">, </span><span class="string">"number of words matched"</span><span class="plain">);</span>
<span class="identifier">gprk</span><span class="plain">-</span><span class="element">&gt;f_s</span><span class="plain"> = </span><span class="identifier">LocalVariables::add_internal_local_c_as_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"f"</span><span class="plain">, </span><span class="string">"flag: sufficiently good match found to justify success"</span><span class="plain">);</span>
<span class="identifier">gprk</span><span class="plain">-</span><span class="element">&gt;w_s</span><span class="plain"> = </span><span class="identifier">LocalVariables::add_internal_local_c_as_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"w"</span><span class="plain">, </span><span class="string">"for use by individual grammar lines"</span><span class="plain">);</span>
<span class="identifier">gprk</span><span class="plain">-</span><span class="element">&gt;rv_s</span><span class="plain"> = </span><span class="identifier">LocalVariables::add_internal_local_as_symbol_noting</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"rv"</span><span class="plain">, &amp;(</span><span class="identifier">gprk</span><span class="plain">-</span><span class="element">&gt;rv_lv</span><span class="plain">));</span>
<span class="identifier">gprk</span><span class="plain">-</span><span class="element">&gt;g_s</span><span class="plain"> = </span><span class="identifier">LocalVariables::add_internal_local_c_as_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"g"</span><span class="plain">, </span><span class="string">"temporary: success flag for parsing visibles"</span><span class="plain">);</span>
<span class="identifier">gprk</span><span class="plain">-</span><span class="element">&gt;ss_s</span><span class="plain"> = </span><span class="identifier">LocalVariables::add_internal_local_c_as_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"ss"</span><span class="plain">, </span><span class="string">"temporary: saves 'self' in distinguishing visibles"</span><span class="plain">);</span>
<span class="identifier">gprk</span><span class="plain">-</span><span class="element">&gt;spn_s</span><span class="plain"> = </span><span class="identifier">LocalVariables::add_internal_local_c_as_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"spn"</span><span class="plain">, </span><span class="string">"temporary: saves 'parsed_number' in parsing visibles"</span><span class="plain">);</span>
<span class="identifier">gprk</span><span class="plain">-</span><span class="element">&gt;pass_s</span><span class="plain"> = </span><span class="identifier">LocalVariables::add_internal_local_c_as_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"pass"</span><span class="plain">, </span><span class="string">"pass counter (1 to 3)"</span><span class="plain">);</span>
<span class="identifier">gprk</span><span class="plain">-</span><span class="element">&gt;pass1_n_s</span><span class="plain"> = </span><span class="identifier">LocalVariables::add_internal_local_c_as_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"pass1_n"</span><span class="plain">, </span><span class="string">"value of n recorded during pass 1"</span><span class="plain">);</span>
<span class="identifier">gprk</span><span class="plain">-</span><span class="element">&gt;pass2_n_s</span><span class="plain"> = </span><span class="identifier">LocalVariables::add_internal_local_c_as_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"pass2_n"</span><span class="plain">, </span><span class="string">"value of n recorded during pass 2"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::Parsing::Tokens::Values::number</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="identifier">package_request</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain"> = </span><span class="identifier">Kinds::RunTime::package</span><span class="plain">(</span><span class="identifier">K_number</span><span class="plain">);</span>
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> =</span>
<span class="identifier">Packaging::function</span><span class="plain">(</span>
<span class="identifier">InterNames::one_off</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"gpr_fn"</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">),</span>
<span class="identifier">R</span><span class="plain">,</span>
<span class="identifier">InterNames::iname</span><span class="plain">(</span><span class="identifier">DECIMAL_TOKEN_INNER_INAME</span><span class="plain">));</span>
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="identifier">Routines::begin</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
<span class="reserved">gpr_kit</span><span class="plain"> </span><span class="identifier">gprk</span><span class="plain"> = </span><span class="functiontext">PL::Parsing::Tokens::Values::new_kit</span><span class="plain">();</span>
<span class="functiontext">PL::Parsing::Tokens::Values::add_original</span><span class="plain">(&amp;</span><span class="identifier">gprk</span><span class="plain">);</span>
<span class="reserved">grammar_verb</span><span class="plain"> *</span><span class="identifier">gv</span><span class="plain"> = </span><span class="functiontext">PL::Parsing::Verbs::get_parsing_grammar</span><span class="plain">(</span><span class="identifier">K_number</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">gv</span><span class="plain">) </span><span class="functiontext">PL::Parsing::Verbs::compile_iv</span><span class="plain">(&amp;</span><span class="identifier">gprk</span><span class="plain">, </span><span class="identifier">gv</span><span class="plain">);</span>
<span class="identifier">Emit::inv_primitive</span><span class="plain">(</span><span class="identifier">return_interp</span><span class="plain">);</span>
<span class="identifier">Emit::down</span><span class="plain">();</span>
<span class="identifier">Emit::val_iname</span><span class="plain">(</span><span class="identifier">K_value</span><span class="plain">, </span><span class="identifier">InterNames::extern</span><span class="plain">(</span><span class="identifier">GPRFAIL_EXNAMEF</span><span class="plain">));</span>
<span class="identifier">Emit::up</span><span class="plain">();</span>
<span class="identifier">Routines::end</span><span class="plain">(</span><span class="identifier">save</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::Parsing::Tokens::Values::time</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="identifier">package_request</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain"> = </span><span class="identifier">Kinds::RunTime::package</span><span class="plain">(</span><span class="identifier">K_time</span><span class="plain">);</span>
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> =</span>
<span class="identifier">Packaging::function</span><span class="plain">(</span>
<span class="identifier">InterNames::one_off</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"gpr_fn"</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">),</span>
<span class="identifier">R</span><span class="plain">,</span>
<span class="identifier">InterNames::iname</span><span class="plain">(</span><span class="identifier">TIME_TOKEN_INNER_INAME</span><span class="plain">));</span>
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="identifier">Routines::begin</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
<span class="reserved">gpr_kit</span><span class="plain"> </span><span class="identifier">gprk</span><span class="plain"> = </span><span class="functiontext">PL::Parsing::Tokens::Values::new_kit</span><span class="plain">();</span>
<span class="functiontext">PL::Parsing::Tokens::Values::add_original</span><span class="plain">(&amp;</span><span class="identifier">gprk</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">PL::TimesOfDay::kind</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="reserved">grammar_verb</span><span class="plain"> *</span><span class="identifier">gv</span><span class="plain"> = </span><span class="functiontext">PL::Parsing::Verbs::get_parsing_grammar</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">gv</span><span class="plain">) </span><span class="functiontext">PL::Parsing::Verbs::compile_iv</span><span class="plain">(&amp;</span><span class="identifier">gprk</span><span class="plain">, </span><span class="identifier">gv</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">Emit::inv_primitive</span><span class="plain">(</span><span class="identifier">return_interp</span><span class="plain">);</span>
<span class="identifier">Emit::down</span><span class="plain">();</span>
<span class="identifier">Emit::val_iname</span><span class="plain">(</span><span class="identifier">K_value</span><span class="plain">, </span><span class="identifier">InterNames::extern</span><span class="plain">(</span><span class="identifier">GPRFAIL_EXNAMEF</span><span class="plain">));</span>
<span class="identifier">Emit::up</span><span class="plain">();</span>
<span class="identifier">Routines::end</span><span class="plain">(</span><span class="identifier">save</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::Parsing::Tokens::Values::truth_state</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="identifier">package_request</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain"> = </span><span class="identifier">Kinds::RunTime::package</span><span class="plain">(</span><span class="identifier">K_truth_state</span><span class="plain">);</span>
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> =</span>
<span class="identifier">Packaging::function</span><span class="plain">(</span>
<span class="identifier">InterNames::one_off</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"gpr_fn"</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">),</span>
<span class="identifier">R</span><span class="plain">,</span>
<span class="identifier">InterNames::iname</span><span class="plain">(</span><span class="identifier">TRUTH_STATE_TOKEN_INNER_INAME</span><span class="plain">));</span>
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="identifier">Routines::begin</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
<span class="reserved">gpr_kit</span><span class="plain"> </span><span class="identifier">gprk</span><span class="plain"> = </span><span class="functiontext">PL::Parsing::Tokens::Values::new_kit</span><span class="plain">();</span>
<span class="functiontext">PL::Parsing::Tokens::Values::add_original</span><span class="plain">(&amp;</span><span class="identifier">gprk</span><span class="plain">);</span>
<span class="reserved">grammar_verb</span><span class="plain"> *</span><span class="identifier">gv</span><span class="plain"> = </span><span class="functiontext">PL::Parsing::Verbs::get_parsing_grammar</span><span class="plain">(</span><span class="identifier">K_truth_state</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">gv</span><span class="plain">) </span><span class="functiontext">PL::Parsing::Verbs::compile_iv</span><span class="plain">(&amp;</span><span class="identifier">gprk</span><span class="plain">, </span><span class="identifier">gv</span><span class="plain">);</span>
<span class="identifier">Emit::inv_primitive</span><span class="plain">(</span><span class="identifier">return_interp</span><span class="plain">);</span>
<span class="identifier">Emit::down</span><span class="plain">();</span>
<span class="identifier">Emit::val_iname</span><span class="plain">(</span><span class="identifier">K_value</span><span class="plain">, </span><span class="identifier">InterNames::extern</span><span class="plain">(</span><span class="identifier">GPRFAIL_EXNAMEF</span><span class="plain">));</span>
<span class="identifier">Emit::up</span><span class="plain">();</span>
<span class="identifier">Routines::end</span><span class="plain">(</span><span class="identifier">save</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::Parsing::Tokens::Values::compile_type_gprs</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">next_label</span><span class="plain"> = 1, </span><span class="identifier">longest</span><span class="plain">;</span>
<span class="reserved">grammar_verb</span><span class="plain"> *</span><span class="identifier">gv</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">LOOP_OVER_BASE_KINDS</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">Kinds::Behaviour::is_an_enumeration</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">)) ||</span>
<span class="plain">(</span><span class="identifier">Kinds::Behaviour::is_quasinumerical</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">))) {</span>
<span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">q</span><span class="plain">; </span><span class="identifier">literal_pattern</span><span class="plain"> *</span><span class="identifier">lp</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::Behaviour::needs_I6_GPR</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">continue</span><span class="plain">;</span>
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="identifier">Kinds::RunTime::get_kind_GPR_iname</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">);</span>
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="identifier">Routines::begin</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">need_lf_vars</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="identifier">LITERAL_FORMS_LOOP</span><span class="plain">(</span><span class="identifier">lp</span><span class="plain">, </span><span class="identifier">K</span><span class="plain">) {</span>
<span class="identifier">need_lf_vars</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">gpr_kit</span><span class="plain"> </span><span class="identifier">gprk</span><span class="plain"> = </span><span class="functiontext">PL::Parsing::Tokens::Values::new_kit</span><span class="plain">();</span>
<span class="functiontext">PL::Parsing::Tokens::Values::add_original</span><span class="plain">(&amp;</span><span class="identifier">gprk</span><span class="plain">);</span>
<span class="functiontext">PL::Parsing::Tokens::Values::add_standard_set</span><span class="plain">(&amp;</span><span class="identifier">gprk</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">need_lf_vars</span><span class="plain">) </span><span class="functiontext">PL::Parsing::Tokens::Values::add_lp_vars</span><span class="plain">(&amp;</span><span class="identifier">gprk</span><span class="plain">);</span>
&lt;<span class="cwebmacro">Compile body of kind GPR</span> <span class="cwebmacronumber">1.1</span>&gt;<span class="plain">;</span>
<span class="identifier">Routines::end</span><span class="plain">(</span><span class="identifier">save</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::Behaviour::is_an_enumeration</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">)) {</span>
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="identifier">Kinds::RunTime::get_instance_GPR_iname</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">);</span>
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="identifier">Routines::begin</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
<span class="reserved">gpr_kit</span><span class="plain"> </span><span class="identifier">gprk</span><span class="plain"> = </span><span class="functiontext">PL::Parsing::Tokens::Values::new_kit</span><span class="plain">();</span>
<span class="functiontext">PL::Parsing::Tokens::Values::add_instance_call</span><span class="plain">(&amp;</span><span class="identifier">gprk</span><span class="plain">);</span>
<span class="functiontext">PL::Parsing::Tokens::Values::add_original</span><span class="plain">(&amp;</span><span class="identifier">gprk</span><span class="plain">);</span>
<span class="functiontext">PL::Parsing::Tokens::Values::add_standard_set</span><span class="plain">(&amp;</span><span class="identifier">gprk</span><span class="plain">);</span>
<span class="identifier">GV_IS_VALUE_instance_mode</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
&lt;<span class="cwebmacro">Compile body of kind GPR</span> <span class="cwebmacronumber">1.1</span>&gt;<span class="plain">;</span>
<span class="identifier">GV_IS_VALUE_instance_mode</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="identifier">Routines::end</span><span class="plain">(</span><span class="identifier">save</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function PL::Parsing::Tokens::Values::new_kit is used in 5/gv (<a href="5-gv.html#SP27">&#167;27</a>), 5/gl (<a href="5-gl.html#SP21">&#167;21</a>), 5/gpr (<a href="5-gpr.html#SP5">&#167;5</a>).</p>
<p class="endnote">The function PL::Parsing::Tokens::Values::add_instance_call appears nowhere else.</p>
<p class="endnote">The function PL::Parsing::Tokens::Values::add_range_calls is used in 5/gv (<a href="5-gv.html#SP27">&#167;27</a>).</p>
<p class="endnote">The function PL::Parsing::Tokens::Values::add_original is used in 5/gv (<a href="5-gv.html#SP27">&#167;27</a>), 5/gl (<a href="5-gl.html#SP21">&#167;21</a>).</p>
<p class="endnote">The function PL::Parsing::Tokens::Values::add_standard_set is used in 5/gv (<a href="5-gv.html#SP27">&#167;27</a>), 5/gl (<a href="5-gl.html#SP21">&#167;21</a>).</p>
<p class="endnote">The function PL::Parsing::Tokens::Values::add_lp_vars appears nowhere else.</p>
<p class="endnote">The function PL::Parsing::Tokens::Values::add_parse_name_vars is used in 5/gpr (<a href="5-gpr.html#SP6">&#167;6</a>).</p>
<p class="endnote">The function PL::Parsing::Tokens::Values::number appears nowhere else.</p>
<p class="endnote">The function PL::Parsing::Tokens::Values::time appears nowhere else.</p>
<p class="endnote">The function PL::Parsing::Tokens::Values::truth_state appears nowhere else.</p>
<p class="endnote">The function PL::Parsing::Tokens::Values::compile_type_gprs appears nowhere else.</p>
<p class="endnote">The structure gpr_kit is accessed in 5/gv, 5/gl, 5/gt2, 5/gpr and here.</p>
<p class="inwebparagraph"><a id="SP1_1"></a><b>&#167;1.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Compile body of kind GPR</span> <span class="cwebmacronumber">1.1</span>&gt; =
</code></p>
<pre class="displaydefn">
&lt;<span class="cwebmacro">Save word number</span> <span class="cwebmacronumber">1.1.1</span>&gt;<span class="plain">;</span>
<span class="identifier">LITERAL_FORMS_LOOP</span><span class="plain">(</span><span class="identifier">lp</span><span class="plain">, </span><span class="identifier">K</span><span class="plain">) {</span>
<span class="identifier">LiteralPatterns::gpr</span><span class="plain">(&amp;</span><span class="identifier">gprk</span><span class="plain">, </span><span class="identifier">lp</span><span class="plain">);</span>
&lt;<span class="cwebmacro">Reset word number</span> <span class="cwebmacronumber">1.1.2</span>&gt;<span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">gv</span><span class="plain"> = </span><span class="functiontext">PL::Parsing::Verbs::get_parsing_grammar</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">gv</span><span class="plain"> != </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="functiontext">PL::Parsing::Verbs::compile_iv</span><span class="plain">(&amp;</span><span class="identifier">gprk</span><span class="plain">, </span><span class="identifier">gv</span><span class="plain">);</span>
&lt;<span class="cwebmacro">Reset word number</span> <span class="cwebmacronumber">1.1.2</span>&gt;<span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">longest</span><span class="plain"> = 0;</span>
<span class="identifier">LOOP_OVER_INSTANCES</span><span class="plain">(</span><span class="identifier">q</span><span class="plain">, </span><span class="identifier">K</span><span class="plain">) {</span>
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">NW</span><span class="plain"> = </span><span class="identifier">Instances::get_name_in_play</span><span class="plain">(</span><span class="identifier">q</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">L</span><span class="plain"> = </span><span class="identifier">Wordings::length</span><span class="plain">(</span><span class="identifier">NW</span><span class="plain">) - 1;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">L</span><span class="plain"> &gt; </span><span class="identifier">longest</span><span class="plain">) </span><span class="identifier">longest</span><span class="plain"> = </span><span class="identifier">L</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">for</span><span class="plain"> (; </span><span class="identifier">longest</span><span class="plain"> &gt;= 0; </span><span class="identifier">longest</span><span class="plain">--) {</span>
<span class="identifier">LOOP_OVER_INSTANCES</span><span class="plain">(</span><span class="identifier">q</span><span class="plain">, </span><span class="identifier">K</span><span class="plain">) {</span>
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">NW</span><span class="plain"> = </span><span class="identifier">Instances::get_name_in_play</span><span class="plain">(</span><span class="identifier">q</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::length</span><span class="plain">(</span><span class="identifier">NW</span><span class="plain">) - 1 == </span><span class="identifier">longest</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">GV_IS_VALUE_instance_mode</span><span class="plain">) {</span>
<span class="identifier">Emit::inv_primitive</span><span class="plain">(</span><span class="identifier">if_interp</span><span class="plain">);</span>
<span class="identifier">Emit::down</span><span class="plain">();</span>
<span class="identifier">Emit::inv_primitive</span><span class="plain">(</span><span class="identifier">eq_interp</span><span class="plain">);</span>
<span class="identifier">Emit::down</span><span class="plain">();</span>
<span class="identifier">Emit::val_symbol</span><span class="plain">(</span><span class="identifier">K_value</span><span class="plain">, </span><span class="identifier">gprk</span><span class="element">.instance_s</span><span class="plain">);</span>
<span class="identifier">Emit::val_iname</span><span class="plain">(</span><span class="identifier">K_value</span><span class="plain">, </span><span class="identifier">Instances::iname</span><span class="plain">(</span><span class="identifier">q</span><span class="plain">));</span>
<span class="identifier">Emit::up</span><span class="plain">();</span>
<span class="identifier">Emit::code</span><span class="plain">();</span>
<span class="identifier">Emit::down</span><span class="plain">();</span>
<span class="plain">}</span>
&lt;<span class="cwebmacro">Reset word number</span> <span class="cwebmacronumber">1.1.2</span>&gt;<span class="plain">;</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">L</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">L</span><span class="plain">, </span><span class="string">".Failed_%d"</span><span class="plain">, </span><span class="identifier">next_label</span><span class="plain">++);</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">flab</span><span class="plain"> = </span><span class="identifier">Emit::reserve_label</span><span class="plain">(</span><span class="identifier">L</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">L</span><span class="plain">);</span>
<span class="identifier">LOOP_THROUGH_WORDING</span><span class="plain">(</span><span class="identifier">k</span><span class="plain">, </span><span class="identifier">NW</span><span class="plain">) {</span>
<span class="identifier">Emit::inv_primitive</span><span class="plain">(</span><span class="identifier">if_interp</span><span class="plain">);</span>
<span class="identifier">Emit::down</span><span class="plain">();</span>
<span class="identifier">Emit::inv_primitive</span><span class="plain">(</span><span class="identifier">ne_interp</span><span class="plain">);</span>
<span class="identifier">Emit::down</span><span class="plain">();</span>
<span class="identifier">Emit::inv_call</span><span class="plain">(</span><span class="identifier">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">InterNames::extern</span><span class="plain">(</span><span class="identifier">NEXTWORDSTOPPED_EXNAMEF</span><span class="plain">)));</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">, </span><span class="string">"%N"</span><span class="plain">, </span><span class="identifier">k</span><span class="plain">);</span>
<span class="identifier">Emit::val_dword</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">);</span>
<span class="identifier">Emit::up</span><span class="plain">();</span>
<span class="identifier">Emit::code</span><span class="plain">();</span>
<span class="identifier">Emit::down</span><span class="plain">();</span>
<span class="identifier">Emit::inv_primitive</span><span class="plain">(</span><span class="identifier">jump_interp</span><span class="plain">);</span>
<span class="identifier">Emit::down</span><span class="plain">();</span>
<span class="identifier">Emit::lab</span><span class="plain">(</span><span class="identifier">flab</span><span class="plain">);</span>
<span class="identifier">Emit::up</span><span class="plain">();</span>
<span class="identifier">Emit::up</span><span class="plain">();</span>
<span class="identifier">Emit::up</span><span class="plain">();</span>
<span class="plain">}</span>
<span class="identifier">Emit::inv_primitive</span><span class="plain">(</span><span class="identifier">store_interp</span><span class="plain">);</span>
<span class="identifier">Emit::down</span><span class="plain">();</span>
<span class="identifier">Emit::ref_iname</span><span class="plain">(</span><span class="identifier">K_value</span><span class="plain">, </span><span class="identifier">InterNames::extern</span><span class="plain">(</span><span class="identifier">PARSEDNUMBER_EXNAMEF</span><span class="plain">));</span>
<span class="identifier">Emit::val_iname</span><span class="plain">(</span><span class="identifier">K_value</span><span class="plain">, </span><span class="identifier">Instances::iname</span><span class="plain">(</span><span class="identifier">q</span><span class="plain">));</span>
<span class="identifier">Emit::up</span><span class="plain">();</span>
<span class="identifier">Emit::inv_primitive</span><span class="plain">(</span><span class="identifier">return_interp</span><span class="plain">);</span>
<span class="identifier">Emit::down</span><span class="plain">();</span>
<span class="identifier">Emit::val_iname</span><span class="plain">(</span><span class="identifier">K_value</span><span class="plain">, </span><span class="identifier">InterNames::extern</span><span class="plain">(</span><span class="identifier">GPRNUMBER_EXNAMEF</span><span class="plain">));</span>
<span class="identifier">Emit::up</span><span class="plain">();</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">GV_IS_VALUE_instance_mode</span><span class="plain">) {</span>
<span class="identifier">Emit::up</span><span class="plain">();</span>
<span class="identifier">Emit::up</span><span class="plain">();</span>
<span class="plain">}</span>
<span class="identifier">Emit::place_label</span><span class="plain">(</span><span class="identifier">flab</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="identifier">Emit::inv_primitive</span><span class="plain">(</span><span class="identifier">return_interp</span><span class="plain">);</span>
<span class="identifier">Emit::down</span><span class="plain">();</span>
<span class="identifier">Emit::val_iname</span><span class="plain">(</span><span class="identifier">K_value</span><span class="plain">, </span><span class="identifier">InterNames::extern</span><span class="plain">(</span><span class="identifier">GPRFAIL_EXNAMEF</span><span class="plain">));</span>
<span class="identifier">Emit::up</span><span class="plain">();</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP1">&#167;1</a> (twice).</p>
<p class="inwebparagraph"><a id="SP1_1_1"></a><b>&#167;1.1.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Save word number</span> <span class="cwebmacronumber">1.1.1</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">Emit::inv_primitive</span><span class="plain">(</span><span class="identifier">store_interp</span><span class="plain">);</span>
<span class="identifier">Emit::down</span><span class="plain">();</span>
<span class="identifier">Emit::ref_symbol</span><span class="plain">(</span><span class="identifier">K_value</span><span class="plain">, </span><span class="identifier">gprk</span><span class="element">.original_wn_s</span><span class="plain">);</span>
<span class="identifier">Emit::val_iname</span><span class="plain">(</span><span class="identifier">K_value</span><span class="plain">, </span><span class="identifier">InterNames::extern</span><span class="plain">(</span><span class="identifier">WN_EXNAMEF</span><span class="plain">));</span>
<span class="identifier">Emit::up</span><span class="plain">();</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP1_1">&#167;1.1</a>.</p>
<p class="inwebparagraph"><a id="SP1_1_2"></a><b>&#167;1.1.2. </b><code class="display">
&lt;<span class="cwebmacrodefn">Reset word number</span> <span class="cwebmacronumber">1.1.2</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">Emit::inv_primitive</span><span class="plain">(</span><span class="identifier">store_interp</span><span class="plain">);</span>
<span class="identifier">Emit::down</span><span class="plain">();</span>
<span class="identifier">Emit::ref_iname</span><span class="plain">(</span><span class="identifier">K_value</span><span class="plain">, </span><span class="identifier">InterNames::extern</span><span class="plain">(</span><span class="identifier">WN_EXNAMEF</span><span class="plain">));</span>
<span class="identifier">Emit::val_symbol</span><span class="plain">(</span><span class="identifier">K_value</span><span class="plain">, </span><span class="identifier">gprk</span><span class="element">.original_wn_s</span><span class="plain">);</span>
<span class="identifier">Emit::up</span><span class="plain">();</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP1_1">&#167;1.1</a> (three times).</p>
<hr class="tocbar">
<ul class="toc"><li><a href="5-nft.html">Back to 'Noun Filter Tokens'</a></li><li><a href="5-gpr.html">Continue with 'General Parsing Routines'</a></li></ul><hr class="tocbar">
<!--End of weave-->
</body>
</html>