1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-16 22:14:23 +03:00
inform7/docs/codegen-module/4-cg.html

3112 lines
429 KiB
HTML
Raw Normal View History

2019-03-17 14:40:57 +02:00
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>3/is</title>
2019-03-17 14:40:57 +02:00
<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 '4/cg' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">&#9733;</a></li><li><a href="index.html">codegen</a></li><li><a href="index.html#4">Chapter 4: Inter to Inform 6</a></li><li><b>Code Generation</b></li></ul><p class="purpose">To generate I6 code from intermediate code.</p>
2019-03-17 14:40:57 +02:00
<ul class="toc"><li><a href="#SP1">&#167;1. Hello</a></li></ul><hr class="tocbar">
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. Hello. </b></p>
<pre class="definitions">
<span class="definitionkeyword">define</span> <span class="constant">MAX_REPOS_AT_ONCE</span><span class="plain"> 8</span>
</pre>
<pre class="display">
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_literal_holder</span><span class="plain"> {</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">definition_code</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">literal_content</span><span class="plain">;</span>
<span class="identifier">MEMORY_MANAGEMENT</span>
<span class="plain">} </span><span class="reserved">text_literal_holder</span><span class="plain">;</span>
2019-03-17 14:40:57 +02:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::to_I6</span><span class="plain">(</span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">OUTPUT_STREAM</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">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no inter to generate from"</span><span class="plain">);</span>
<span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">repos</span><span class="plain">[</span><span class="constant">MAX_REPOS_AT_ONCE</span><span class="plain">];</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">no_repos</span><span class="plain"> = </span><span class="functiontext">CodeGen::repo_list</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">repos</span><span class="plain">);</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">j</span><span class="plain">=0; </span><span class="identifier">j</span><span class="plain">&lt;</span><span class="identifier">no_repos</span><span class="plain">; </span><span class="identifier">j</span><span class="plain">++) {</span>
<span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain"> = </span><span class="identifier">repos</span><span class="plain">[</span><span class="identifier">j</span><span class="plain">];</span>
<span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">;</span>
<span class="identifier">LOOP_THROUGH_FRAMES</span><span class="plain">(</span><span class="identifier">P</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">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">ID_IFLD</span><span class="plain">] == </span><span class="identifier">IMPORT_IST</span><span class="plain">) {</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">imp_name</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::symbol_from_frame_data</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">SYMBOL_IMPORT_IFLD</span><span class="plain">);</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">exp_name</span><span class="plain"> = </span><span class="identifier">Inter::Symbols::get_bridge</span><span class="plain">(</span><span class="identifier">imp_name</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">exp_name</span><span class="plain">) {</span>
<span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">repo</span><span class="plain"> = </span><span class="identifier">Inter::Symbols::defining_frame</span><span class="plain">(</span><span class="identifier">exp_name</span><span class="plain">).</span><span class="identifier">repo_segment</span><span class="plain">-&gt;</span><span class="identifier">owning_repo</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">found</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">no_repos</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">repos</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">] == </span><span class="identifier">repo</span><span class="plain">) </span><span class="identifier">found</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">found</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">no_repos</span><span class="plain"> &gt;= </span><span class="constant">MAX_REPOS_AT_ONCE</span><span class="plain">)</span>
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"too many repos to import"</span><span class="plain">);</span>
<span class="identifier">repos</span><span class="plain">[</span><span class="identifier">no_repos</span><span class="plain">++] = </span><span class="identifier">repo</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">j</span><span class="plain">=0; </span><span class="identifier">j</span><span class="plain">&lt;</span><span class="identifier">no_repos</span><span class="plain">; </span><span class="identifier">j</span><span class="plain">++) {</span>
<span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain"> = </span><span class="identifier">repos</span><span class="plain">[</span><span class="identifier">j</span><span class="plain">];</span>
<span class="functiontext">CodeGen::Var::set_translates</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Generating I6 from %d repository/ies\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">no_repos</span><span class="plain">);</span>
<span class="identifier">Inter::Symbols::clear_transient_flags</span><span class="plain">();</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">pragmatic_matter</span><span class="plain"> = </span><span class="identifier">Str::new</span><span class="plain">();</span>
2019-03-17 14:40:57 +02:00
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">early_matter</span><span class="plain"> = </span><span class="identifier">Str::new</span><span class="plain">();</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">summations_at_eof</span><span class="plain"> = </span><span class="identifier">Str::new</span><span class="plain">();</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">attributes_at_eof</span><span class="plain"> = </span><span class="identifier">Str::new</span><span class="plain">();</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">arrays_at_eof</span><span class="plain"> = </span><span class="identifier">Str::new</span><span class="plain">();</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">main_matter</span><span class="plain"> = </span><span class="identifier">Str::new</span><span class="plain">();</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">code_at_eof</span><span class="plain"> = </span><span class="identifier">Str::new</span><span class="plain">();</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">verbs_at_eof</span><span class="plain"> = </span><span class="identifier">Str::new</span><span class="plain">();</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">routines_at_eof</span><span class="plain"> = </span><span class="identifier">Str::new</span><span class="plain">();</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">properties_written</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">variables_written</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">j</span><span class="plain">=0; </span><span class="identifier">j</span><span class="plain">&lt;</span><span class="identifier">no_repos</span><span class="plain">; </span><span class="identifier">j</span><span class="plain">++) {</span>
<span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain"> = </span><span class="identifier">repos</span><span class="plain">[</span><span class="identifier">j</span><span class="plain">];</span>
<span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">;</span>
<span class="identifier">LOOP_THROUGH_FRAMES</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">) {</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">outer</span><span class="plain"> = </span><span class="identifier">Inter::Packages::container</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">outer</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (</span><span class="identifier">outer</span><span class="plain">-&gt;</span><span class="identifier">codelike_package</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">)) {</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">TO</span><span class="plain"> = </span><span class="identifier">main_matter</span><span class="plain">;</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">ID_IFLD</span><span class="plain">]) {</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">CONSTANT_IST</span><span class="plain">: {</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">con_name</span><span class="plain"> =</span>
<span class="identifier">Inter::SymbolsTables::symbol_from_frame_data</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">DEFN_CONST_IFLD</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">OBJECT_IANN</span><span class="plain">) == 1) </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Packages::container</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">) == </span><span class="identifier">Inter::Packages::main</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">)) {</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">STDERR</span><span class="plain">, </span><span class="string">"Bad constant: %S\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">);</span>
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"constant defined in main"</span><span class="plain">);</span>
<span class="plain">}</span>
2019-03-17 14:40:57 +02:00
<span class="identifier">TO</span><span class="plain"> = </span><span class="identifier">early_matter</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">TEXT_LITERAL_IANN</span><span class="plain">) == 1) {</span>
<span class="reserved">text_literal_holder</span><span class="plain"> *</span><span class="identifier">tlh</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">text_literal_holder</span><span class="plain">);</span>
<span class="identifier">tlh</span><span class="plain">-</span><span class="element">&gt;definition_code</span><span class="plain"> = </span><span class="identifier">Str::new</span><span class="plain">();</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">ID</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">DATA_CONST_IFLD</span><span class="plain">];</span>
<span class="identifier">tlh</span><span class="plain">-</span><span class="element">&gt;literal_content</span><span class="plain"> = </span><span class="identifier">Inter::get_text</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">repo_segment</span><span class="plain">-&gt;</span><span class="identifier">owning_repo</span><span class="plain">, </span><span class="identifier">ID</span><span class="plain">);</span>
<span class="identifier">TO</span><span class="plain"> = </span><span class="identifier">tlh</span><span class="plain">-</span><span class="element">&gt;definition_code</span><span class="plain">;</span>
<span class="plain">}</span>
2019-03-17 14:40:57 +02:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">LATE_IANN</span><span class="plain">) == 1) </span><span class="identifier">TO</span><span class="plain"> = </span><span class="identifier">code_at_eof</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">BUFFERARRAY_IANN</span><span class="plain">) == 1) </span><span class="identifier">TO</span><span class="plain"> = </span><span class="identifier">arrays_at_eof</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">BYTEARRAY_IANN</span><span class="plain">) == 1) </span><span class="identifier">TO</span><span class="plain"> = </span><span class="identifier">arrays_at_eof</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">STRINGARRAY_IANN</span><span class="plain">) == 1) </span><span class="identifier">TO</span><span class="plain"> = </span><span class="identifier">arrays_at_eof</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">TABLEARRAY_IANN</span><span class="plain">) == 1) </span><span class="identifier">TO</span><span class="plain"> = </span><span class="identifier">arrays_at_eof</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">FORMAT_CONST_IFLD</span><span class="plain">] == </span><span class="identifier">CONSTANT_INDIRECT_LIST</span><span class="plain">) </span><span class="identifier">TO</span><span class="plain"> = </span><span class="identifier">arrays_at_eof</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">VERBARRAY_IANN</span><span class="plain">) == 1) </span><span class="identifier">TO</span><span class="plain"> = </span><span class="identifier">verbs_at_eof</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Constant::is_routine</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">)) {</span>
<span class="identifier">TO</span><span class="plain"> = </span><span class="identifier">routines_at_eof</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">TO</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">PRAGMA_IST</span><span class="plain">:</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">pragmatic_matter</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
2019-03-17 14:40:57 +02:00
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">INSTANCE_IST</span><span class="plain">:</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">TO</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">SPLAT_IST</span><span class="plain">:</span>
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"top-level splat remaining"</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">PROPERTYVALUE_IST</span><span class="plain">:</span>
&lt;<span class="cwebmacro">Property knowledge</span> <span class="cwebmacronumber">1.1</span>&gt;<span class="plain">;</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">VARIABLE_IST</span><span class="plain">:</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">variables_written</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
<span class="identifier">variables_written</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="functiontext">CodeGen::Var::knowledge</span><span class="plain">(</span><span class="identifier">TO</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">IMPORT_IST</span><span class="plain">: {</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">imp_name</span><span class="plain"> =</span>
<span class="identifier">Inter::SymbolsTables::symbol_from_frame_data</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">SYMBOL_IMPORT_IFLD</span><span class="plain">);</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">exp_name</span><span class="plain"> = </span><span class="identifier">Inter::Symbols::get_bridge</span><span class="plain">(</span><span class="identifier">imp_name</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">exp_name</span><span class="plain">) {</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">early_matter</span><span class="plain">, </span><span class="string">"Constant %S = %S;\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="functiontext">CodeGen::name</span><span class="plain">(</span><span class="identifier">imp_name</span><span class="plain">), </span><span class="functiontext">CodeGen::name</span><span class="plain">(</span><span class="identifier">exp_name</span><span class="plain">));</span>
<span class="plain">}</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">NR</span><span class="plain"> = 0;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">j</span><span class="plain">=0; </span><span class="identifier">j</span><span class="plain">&lt;</span><span class="identifier">no_repos</span><span class="plain">; </span><span class="identifier">j</span><span class="plain">++) {</span>
<span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain"> = </span><span class="identifier">repos</span><span class="plain">[</span><span class="identifier">j</span><span class="plain">];</span>
<span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">;</span>
<span class="identifier">LOOP_THROUGH_FRAMES</span><span class="plain">(</span><span class="identifier">P</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">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">ID_IFLD</span><span class="plain">] == </span><span class="identifier">RESPONSE_IST</span><span class="plain">) {</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">resp_name</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::symbol_from_frame_data</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">DEFN_RESPONSE_IFLD</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">early_matter</span><span class="plain">, </span><span class="string">"Constant %S = %d;\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="functiontext">CodeGen::name</span><span class="plain">(</span><span class="identifier">resp_name</span><span class="plain">), ++</span><span class="identifier">NR</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">NR</span><span class="plain"> &gt; 0) {</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">early_matter</span><span class="plain">, </span><span class="string">"Constant NO_RESPONSES = %d;\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">NR</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">main_matter</span><span class="plain">, </span><span class="string">"Array ResponseTexts --&gt; "</span><span class="plain">);</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">j</span><span class="plain">=0; </span><span class="identifier">j</span><span class="plain">&lt;</span><span class="identifier">no_repos</span><span class="plain">; </span><span class="identifier">j</span><span class="plain">++) {</span>
<span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain"> = </span><span class="identifier">repos</span><span class="plain">[</span><span class="identifier">j</span><span class="plain">];</span>
<span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">;</span>
<span class="identifier">LOOP_THROUGH_FRAMES</span><span class="plain">(</span><span class="identifier">P</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">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">ID_IFLD</span><span class="plain">] == </span><span class="identifier">RESPONSE_IST</span><span class="plain">) {</span>
<span class="identifier">NR</span><span class="plain">++;</span>
<span class="functiontext">CodeGen::literal</span><span class="plain">(</span><span class="identifier">main_matter</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">Inter::Packages::scope_of</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">), </span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">VAL1_RESPONSE_IFLD</span><span class="plain">], </span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">VAL1_RESPONSE_IFLD</span><span class="plain">+1], </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">main_matter</span><span class="plain">, </span><span class="string">" "</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">main_matter</span><span class="plain">, </span><span class="string">"0 0;\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">properties_written</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) { </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">TO</span><span class="plain"> = </span><span class="identifier">main_matter</span><span class="plain">; </span>&lt;<span class="cwebmacro">Property knowledge</span> <span class="cwebmacronumber">1.1</span>&gt;<span class="plain">; }</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">pragmatic_matter</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">attributes_at_eof</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">early_matter</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">no_tlh</span><span class="plain"> = </span><span class="identifier">NUMBER_CREATED</span><span class="plain">(</span><span class="reserved">text_literal_holder</span><span class="plain">);</span>
<span class="reserved">text_literal_holder</span><span class="plain"> **</span><span class="identifier">sorted</span><span class="plain"> = (</span><span class="reserved">text_literal_holder</span><span class="plain"> **)</span>
<span class="plain">(</span><span class="identifier">Memory::I7_calloc</span><span class="plain">(</span><span class="identifier">no_tlh</span><span class="plain">, </span><span class="reserved">sizeof</span><span class="plain">(</span><span class="reserved">text_literal_holder</span><span class="plain"> *), </span><span class="constant">CODE_GENERATION_MREASON</span><span class="plain">));</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain"> = 0;</span>
<span class="reserved">text_literal_holder</span><span class="plain"> *</span><span class="identifier">tlh</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">tlh</span><span class="plain">, </span><span class="reserved">text_literal_holder</span><span class="plain">) </span><span class="identifier">sorted</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">++] = </span><span class="identifier">tlh</span><span class="plain">;</span>
<span class="identifier">qsort</span><span class="plain">(</span><span class="identifier">sorted</span><span class="plain">, (</span><span class="identifier">size_t</span><span class="plain">) </span><span class="identifier">no_tlh</span><span class="plain">, </span><span class="reserved">sizeof</span><span class="plain">(</span><span class="reserved">text_literal_holder</span><span class="plain"> *),</span>
<span class="functiontext">CodeGen::compare_tlh</span><span class="plain">);</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">no_tlh</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) {</span>
<span class="reserved">text_literal_holder</span><span class="plain"> *</span><span class="identifier">tlh</span><span class="plain"> = </span><span class="identifier">sorted</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">];</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"! TLH %d &lt;%S&gt;\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">tlh</span><span class="plain">-&gt;</span><span class="identifier">allocation_id</span><span class="plain">, </span><span class="identifier">tlh</span><span class="plain">-</span><span class="element">&gt;literal_content</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">tlh</span><span class="plain">-</span><span class="element">&gt;definition_code</span><span class="plain">);</span>
<span class="plain">}</span>
2019-03-17 14:40:57 +02:00
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">summations_at_eof</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">arrays_at_eof</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">main_matter</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">routines_at_eof</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">code_at_eof</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">verbs_at_eof</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function CodeGen::to_I6 is used in 1/sc (<a href="1-sc.html#SP4">&#167;4</a>).</p>
<p class="endnote">The structure text_literal_holder is private to this section.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP1_1"></a><b>&#167;1.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Property knowledge</span> <span class="cwebmacronumber">1.1</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">properties_written</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">TO</span><span class="plain">, </span><span class="string">"Object Compass \</span><span class="plain">"</span><span class="string">compass\</span><span class="plain">"</span><span class="string"> has concealed;\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">TO</span><span class="plain">, </span><span class="string">"Object thedark \</span><span class="plain">"</span><span class="string">(darkness object)\</span><span class="plain">"</span><span class="string">;\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">TO</span><span class="plain">, </span><span class="string">"Object InformParser \</span><span class="plain">"</span><span class="string">(Inform Parser)\</span><span class="plain">"</span><span class="string"> has proper;\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">TO</span><span class="plain">, </span><span class="string">"Object InformLibrary \</span><span class="plain">"</span><span class="string">(Inform Library)\</span><span class="plain">"</span><span class="string"> has proper;\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="identifier">properties_written</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="functiontext">CodeGen::IP::knowledge</span><span class="plain">(</span><span class="identifier">TO</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">code_at_eof</span><span class="plain">, </span><span class="identifier">attributes_at_eof</span><span class="plain">);</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="SP2"></a><b>&#167;2. </b></p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::repo_list</span><span class="plain">(</span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">inter_repository</span><span class="plain"> **</span><span class="identifier">repos</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">no_repos</span><span class="plain"> = 0;</span>
<span class="identifier">repos</span><span class="plain">[</span><span class="identifier">no_repos</span><span class="plain">++] = </span><span class="identifier">I</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">j</span><span class="plain">=0; </span><span class="identifier">j</span><span class="plain">&lt;</span><span class="identifier">no_repos</span><span class="plain">; </span><span class="identifier">j</span><span class="plain">++) {</span>
<span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">J</span><span class="plain"> = </span><span class="identifier">repos</span><span class="plain">[</span><span class="identifier">j</span><span class="plain">];</span>
<span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">;</span>
<span class="identifier">LOOP_THROUGH_FRAMES</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">J</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">ID_IFLD</span><span class="plain">] == </span><span class="identifier">IMPORT_IST</span><span class="plain">) {</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">imp_name</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::symbol_from_frame_data</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">SYMBOL_IMPORT_IFLD</span><span class="plain">);</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">exp_name</span><span class="plain"> = </span><span class="identifier">Inter::Symbols::get_bridge</span><span class="plain">(</span><span class="identifier">imp_name</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">exp_name</span><span class="plain">) {</span>
<span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">repo</span><span class="plain"> = </span><span class="identifier">Inter::Symbols::defining_frame</span><span class="plain">(</span><span class="identifier">exp_name</span><span class="plain">).</span><span class="identifier">repo_segment</span><span class="plain">-&gt;</span><span class="identifier">owning_repo</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">found</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">no_repos</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">repos</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">] == </span><span class="identifier">repo</span><span class="plain">) </span><span class="identifier">found</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">found</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">no_repos</span><span class="plain"> &gt;= </span><span class="constant">MAX_REPOS_AT_ONCE</span><span class="plain">)</span>
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"too many repos to import"</span><span class="plain">);</span>
<span class="identifier">repos</span><span class="plain">[</span><span class="identifier">no_repos</span><span class="plain">++] = </span><span class="identifier">repo</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">j</span><span class="plain">=0; </span><span class="identifier">j</span><span class="plain">&lt;</span><span class="identifier">no_repos</span><span class="plain">; </span><span class="identifier">j</span><span class="plain">++) {</span>
<span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">J</span><span class="plain"> = </span><span class="identifier">repos</span><span class="plain">[</span><span class="identifier">j</span><span class="plain">];</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">J</span><span class="plain"> != </span><span class="identifier">I</span><span class="plain">) </span><span class="identifier">J</span><span class="plain">-&gt;</span><span class="identifier">main_repo</span><span class="plain"> = </span><span class="identifier">I</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">no_repos</span><span class="plain">;</span>
<span class="plain">}</span>
2019-05-07 00:32:11 +03:00
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">query_labels_mode</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">negate_label_mode</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
2019-03-17 14:40:57 +02:00
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">) {</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">ID_IFLD</span><span class="plain">]) {</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">SYMBOL_IST</span><span class="plain">: </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">CONSTANT_IST</span><span class="plain">: </span><span class="functiontext">CodeGen::constant</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">INSTANCE_IST</span><span class="plain">: </span><span class="functiontext">CodeGen::IP::instance</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">SPLAT_IST</span><span class="plain">: </span><span class="functiontext">CodeGen::splat</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">LOCAL_IST</span><span class="plain">: </span><span class="functiontext">CodeGen::local</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">LABEL_IST</span><span class="plain">: </span><span class="functiontext">CodeGen::label</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">CODE_IST</span><span class="plain">: </span><span class="functiontext">CodeGen::code</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">EVALUATION_IST</span><span class="plain">: </span><span class="functiontext">CodeGen::evaluation</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">REFERENCE_IST</span><span class="plain">: </span><span class="functiontext">CodeGen::reference</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
2019-03-17 14:40:57 +02:00
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">PACKAGE_IST</span><span class="plain">: </span><span class="functiontext">CodeGen::block</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">INV_IST</span><span class="plain">: </span><span class="functiontext">CodeGen::inv</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">CAST_IST</span><span class="plain">: </span><span class="functiontext">CodeGen::cast</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">VAL_IST</span><span class="plain">:</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">REF_IST</span><span class="plain">: </span><span class="functiontext">CodeGen::val</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">LAB_IST</span><span class="plain">: </span><span class="functiontext">CodeGen::lab</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">PRAGMA_IST</span><span class="plain">: </span><span class="functiontext">CodeGen::pragma</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">default</span><span class="plain">:</span>
<span class="identifier">Inter::Defn::write_construct_text</span><span class="plain">(</span><span class="identifier">DL</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"unimplemented\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function CodeGen::repo_list is used in <a href="#SP1">&#167;1</a>, 2/erm (<a href="2-erm.html#SP1">&#167;1</a>).</p>
2019-05-07 00:32:11 +03:00
<p class="endnote">The function CodeGen::frame is used in <a href="#SP1">&#167;1</a>, <a href="#SP3">&#167;3</a>, <a href="#SP4">&#167;4</a>, <a href="#SP4_1">&#167;4.1</a>, <a href="#SP4_2">&#167;4.2</a>, <a href="#SP4_4">&#167;4.4</a>, <a href="#SP4_5">&#167;4.5</a>, <a href="#SP4_8">&#167;4.8</a>, <a href="#SP4_9">&#167;4.9</a>, <a href="#SP4_10">&#167;4.10</a>, <a href="#SP4_11">&#167;4.11</a>, <a href="#SP4_12">&#167;4.12</a>, <a href="#SP4_13">&#167;4.13</a>, <a href="#SP4_14">&#167;4.14</a>, <a href="#SP4_15">&#167;4.15</a>, <a href="#SP4_16">&#167;4.16</a>, <a href="#SP4_17">&#167;4.17</a>, <a href="#SP4_18">&#167;4.18</a>, <a href="#SP4_19">&#167;4.19</a>, <a href="#SP4_20">&#167;4.20</a>, <a href="#SP4_21">&#167;4.21</a>, <a href="#SP4_22">&#167;4.22</a>, <a href="#SP4_23">&#167;4.23</a>, <a href="#SP4_24">&#167;4.24</a>, <a href="#SP4_25">&#167;4.25</a>, <a href="#SP4_26">&#167;4.26</a>, <a href="#SP4_27">&#167;4.27</a>, <a href="#SP4_28">&#167;4.28</a>, <a href="#SP4_29">&#167;4.29</a>, <a href="#SP4_30">&#167;4.30</a>, <a href="#SP4_31">&#167;4.31</a>, <a href="#SP4_32">&#167;4.32</a>, <a href="#SP4_33">&#167;4.33</a>, <a href="#SP4_34">&#167;4.34</a>, <a href="#SP4_35">&#167;4.35</a>, <a href="#SP4_36">&#167;4.36</a>, <a href="#SP4_37">&#167;4.37</a>, <a href="#SP4_38">&#167;4.38</a>, <a href="#SP4_39">&#167;4.39</a>, <a href="#SP4_40">&#167;4.40</a>, <a href="#SP4_45">&#167;4.45</a>, <a href="#SP4_46">&#167;4.46</a>, <a href="#SP4_47">&#167;4.47</a>, <a href="#SP4_48">&#167;4.48</a>, <a href="#SP4_49">&#167;4.49</a>, <a href="#SP4_50">&#167;4.50</a>, <a href="#SP4_51">&#167;4.51</a>, <a href="#SP4_52">&#167;4.52</a>, <a href="#SP4_53">&#167;4.53</a>, <a href="#SP4_54">&#167;4.54</a>, <a href="#SP4_55">&#167;4.55</a>, <a href="#SP4_56">&#167;4.56</a>, <a href="#SP4_57">&#167;4.57</a>, <a href="#SP4_58">&#167;4.58</a>, <a href="#SP4_59">&#167;4.59</a>, <a href="#SP4_60">&#167;4.60</a>, <a href="#SP4_61">&#167;4.61</a>, <a href="#SP4_62">&#167;4.62</a>, <a href="#SP4_63">&#167;4.63</a>, <a href="#SP4_64">&#167;4.64</a>, <a href="#SP4_65">&#167;4.65</a>, <a href="#SP4_66">&#167;4.66</a>, <a href="#SP4_67">&#167;4.67</a>, <a href="#SP4_68">&#167;4.68</a>, <a href="#SP4_69">&#167;4.69</a>, <a href="#SP4_70">&#167;4.70</a>, <a href="#SP4_71">&#167;4.71</a>, <a href="#SP4_72">&#167;4.72</a>, <a href="#SP4_73">&#167;4.73</a>, <a href="#SP4_74">&#167;4.74</a>, <a href="#SP4_75">&#167;4.75</a>, <a href="#SP4_76">&#167;4.76</a>, <a href="#SP4_77">&#167;4.77</a>, <a href="#SP4_78">&#167;4.78</a>, <a href="#SP4_79">&#167;4.79</a>, <a href="#SP4_80">&#167;4.80</a>, <a href="#SP4_81">&#167;4.81</a>, <a href="#SP4_82">&#167;4.82</a>, <a href="#SP4_83">&#167;4.83</a>, <a href="#SP4_84">&#167;4.84</a>, <a href="#SP4_85">&#167;4.85</a>, <a href="#SP4_86">&#167;4.86</a>, <a href="#SP4_87">&#167;4.87</a>, <a href="#SP4_88">&#167;4.88</a>, <a href="#SP4_89">&#167;4.89</a>, <a href="#SP4_90">&#167;4.90</a>, <a href="#SP4_91">&#167;4.91</a>, <a href="#SP4_92">&#167;4.92</a>, <a href="#SP4_93">&#167;4.93</a>, <a href="#SP4_94">&#167;4.94</a>, <a href="#SP4_95">&#167;4.95</a>, <a href="#SP4_96">&#167;4.96</a>, <a href="#SP4_97">&#167;4.97</a>, <a href="#SP4_98">&#167;4.98</a>, <a href="#SP4_99">&#167;4.99</a>, <a href="#SP4_100">&#167;4.100</a>, <a href="#SP4_101">&#167;4.101</a>, <a href="#SP4_102">&#167;4.102</a>, <a href="#SP4_103">&#167;4.103</a>, <a href="#SP4_104">&#167;4.104</a>, <a href="#SP4_105">&#167;4.105</a>, <a href="#SP4_106">&#167;4.106</a>, <a href="#SP4_107">&#167;4.107</a>, <a href="#SP4_108">&#167;4.108</a>, <a href="#SP4_109">&#167;4.109</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. </b>There's a contrivance here to get around an awkward point of I6 syntax:
an array written in the form
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">Array X table 20;</span>
</pre>
<p class="inwebparagraph">makes a table with 20 entries, not a table with one entry whose initial value
is 20. We instead compile this as
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">Array X --&gt; 1 20;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">void_level</span><span class="plain"> = 3;</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::constant</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">) {</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">con_name</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::symbol_from_frame_data</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">DEFN_CONST_IFLD</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">INLINE_ARRAY_IANN</span><span class="plain">) == 1) </span><span class="reserved">return</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">ACTION_IANN</span><span class="plain">) == 1) </span><span class="reserved">return</span><span class="plain">;</span>
2019-03-17 14:40:57 +02:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">FAKE_ACTION_IANN</span><span class="plain">) == 1) {</span>
2019-04-27 13:29:40 +03:00
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">fa</span><span class="plain"> = </span><span class="identifier">Str::duplicate</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">);</span>
<span class="identifier">Str::delete_first_character</span><span class="plain">(</span><span class="identifier">fa</span><span class="plain">);</span>
<span class="identifier">Str::delete_first_character</span><span class="plain">(</span><span class="identifier">fa</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"Fake_Action %S;\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">fa</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
2019-05-08 03:51:50 +03:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">VENEER_IANN</span><span class="plain">) == 1) </span><span class="reserved">return</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"thedark"</span><span class="plain">)) {</span>
<span class="comment">WRITE("Object thedark \"(darkness object)\";\n");</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"InformLibrary"</span><span class="plain">)) {</span>
<span class="comment">WRITE("Object InformLibrary \"(Inform Library)\" has proper;\n");</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"InformParser"</span><span class="plain">)) {</span>
<span class="comment">WRITE("Object InformParser \"(Inform Parser)\" has proper;\n");</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Compass"</span><span class="plain">)) {</span>
<span class="comment">WRITE("Object Compass \"compass\" has concealed;\n");</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
2019-03-17 14:40:57 +02:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Release"</span><span class="plain">)) {</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val1</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">DATA_CONST_IFLD</span><span class="plain">];</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val2</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">DATA_CONST_IFLD</span><span class="plain"> + 1];</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"Release "</span><span class="plain">);</span>
<span class="functiontext">CodeGen::literal</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">Inter::Packages::scope_of</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">), </span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">";\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Story"</span><span class="plain">)) {</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val1</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">DATA_CONST_IFLD</span><span class="plain">];</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val2</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">DATA_CONST_IFLD</span><span class="plain"> + 1];</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"Global Story = "</span><span class="plain">);</span>
<span class="functiontext">CodeGen::literal</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">Inter::Packages::scope_of</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">), </span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">";\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Serial"</span><span class="plain">)) {</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val1</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">DATA_CONST_IFLD</span><span class="plain">];</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val2</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">DATA_CONST_IFLD</span><span class="plain"> + 1];</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"Serial "</span><span class="plain">);</span>
<span class="functiontext">CodeGen::literal</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">Inter::Packages::scope_of</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">), </span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">";\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"UUID_ARRAY"</span><span class="plain">)) {</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">ID</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">DATA_CONST_IFLD</span><span class="plain">];</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain"> = </span><span class="identifier">Inter::get_text</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">repo_segment</span><span class="plain">-&gt;</span><span class="identifier">owning_repo</span><span class="plain">, </span><span class="identifier">ID</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"Array UUID_ARRAY string \</span><span class="plain">"</span><span class="string">UUID://"</span><span class="plain">);</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0, </span><span class="identifier">L</span><span class="plain">=</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">); </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">L</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%c"</span><span class="plain">, </span><span class="identifier">Characters::toupper</span><span class="plain">(</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">)));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"//\</span><span class="plain">"</span><span class="string">;\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">ifndef_me</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">Str::eq</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"WORDSIZE"</span><span class="plain">)) ||</span>
<span class="plain">(</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"TARGET_ZCODE"</span><span class="plain">)) ||</span>
<span class="plain">(</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"INDIV_PROP_START"</span><span class="plain">)) ||</span>
2019-03-17 14:40:57 +02:00
<span class="plain">(</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"TARGET_GLULX"</span><span class="plain">)) ||</span>
<span class="plain">(</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"DICT_WORD_SIZE"</span><span class="plain">)) ||</span>
<span class="plain">(</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"DEBUG"</span><span class="plain">)))</span>
<span class="identifier">ifndef_me</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Constant::is_routine</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">)) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"[ %S"</span><span class="plain">, </span><span class="functiontext">CodeGen::name</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">));</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">code_block</span><span class="plain"> = </span><span class="identifier">Inter::Constant::code_block</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">);</span>
<span class="identifier">void_level</span><span class="plain"> = </span><span class="identifier">Inter::Defn::get_level</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">) + 2;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">code_block</span><span class="plain">) {</span>
<span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">D</span><span class="plain"> = </span><span class="identifier">Inter::Symbols::defining_frame</span><span class="plain">(</span><span class="identifier">code_block</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">D</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">FORMAT_CONST_IFLD</span><span class="plain">]) {</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">CONSTANT_INDIRECT_TEXT</span><span class="plain">: {</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">ID</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">DATA_CONST_IFLD</span><span class="plain">];</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain"> = </span><span class="identifier">Inter::get_text</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">repo_segment</span><span class="plain">-&gt;</span><span class="identifier">owning_repo</span><span class="plain">, </span><span class="identifier">ID</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"Constant %S = \</span><span class="plain">"</span><span class="string">%S\</span><span class="plain">"</span><span class="string">;\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="functiontext">CodeGen::name</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">), </span><span class="identifier">S</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">CONSTANT_INDIRECT_LIST</span><span class="plain">: {</span>
<span class="reserved">char</span><span class="plain"> *</span><span class="identifier">format</span><span class="plain"> = </span><span class="string">"--&gt;"</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">do_not_bracket</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">unsub</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">X</span><span class="plain"> = (</span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">extent</span><span class="plain"> - </span><span class="identifier">DATA_CONST_IFLD</span><span class="plain">)/2;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">X</span><span class="plain"> == 1) </span><span class="identifier">do_not_bracket</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">BYTEARRAY_IANN</span><span class="plain">) == 1) </span><span class="identifier">format</span><span class="plain"> = </span><span class="string">"-&gt;"</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">TABLEARRAY_IANN</span><span class="plain">) == 1) {</span>
<span class="identifier">format</span><span class="plain"> = </span><span class="string">"table"</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">extent</span><span class="plain"> - </span><span class="identifier">DATA_CONST_IFLD</span><span class="plain"> == 2) </span><span class="identifier">format</span><span class="plain"> = </span><span class="string">"--&gt; 1"</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">BUFFERARRAY_IANN</span><span class="plain">) == 1) </span><span class="identifier">format</span><span class="plain"> = </span><span class="string">"buffer"</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">STRINGARRAY_IANN</span><span class="plain">) == 1) { </span><span class="identifier">format</span><span class="plain"> = </span><span class="string">"string"</span><span class="plain">; </span><span class="identifier">do_not_bracket</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">VERBARRAY_IANN</span><span class="plain">) == 1) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"Verb "</span><span class="plain">); </span><span class="identifier">do_not_bracket</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">; </span><span class="identifier">unsub</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">METAVERB_IANN</span><span class="plain">) == 1) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"meta "</span><span class="plain">);</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">"Array %S %s"</span><span class="plain">, </span><span class="functiontext">CodeGen::name</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">), </span><span class="identifier">format</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=</span><span class="identifier">DATA_CONST_IFLD</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">extent</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">=</span><span class="identifier">i</span><span class="plain">+2) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" "</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">do_not_bracket</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) &amp;&amp; (</span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">] != </span><span class="identifier">DIVIDER_IVAL</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::literal</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">Inter::Packages::scope_of</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">), </span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">], </span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">+1], </span><span class="identifier">unsub</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">do_not_bracket</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) &amp;&amp; (</span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">] != </span><span class="identifier">DIVIDER_IVAL</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">";\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">CONSTANT_SUM_LIST</span><span class="plain">:</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">CONSTANT_PRODUCT_LIST</span><span class="plain">:</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">CONSTANT_DIFFERENCE_LIST</span><span class="plain">:</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">CONSTANT_QUOTIENT_LIST</span><span class="plain">:</span>
2019-03-17 14:40:57 +02:00
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"Constant %S = "</span><span class="plain">, </span><span class="functiontext">CodeGen::name</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">));</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=</span><span class="identifier">DATA_CONST_IFLD</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">extent</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">=</span><span class="identifier">i</span><span class="plain">+2) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain">&gt;</span><span class="identifier">DATA_CONST_IFLD</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">FORMAT_CONST_IFLD</span><span class="plain">] == </span><span class="identifier">CONSTANT_SUM_LIST</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" + "</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">FORMAT_CONST_IFLD</span><span class="plain">] == </span><span class="identifier">CONSTANT_PRODUCT_LIST</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" * "</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">FORMAT_CONST_IFLD</span><span class="plain">] == </span><span class="identifier">CONSTANT_DIFFERENCE_LIST</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" - "</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">FORMAT_CONST_IFLD</span><span class="plain">] == </span><span class="identifier">CONSTANT_QUOTIENT_LIST</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" / "</span><span class="plain">);</span>
<span class="plain">}</span>
2019-03-17 14:40:57 +02:00
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">bracket</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">] == </span><span class="identifier">LITERAL_IVAL</span><span class="plain">) || (</span><span class="identifier">Inter::Symbols::is_stored_in_data</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">], </span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">+1]))) </span><span class="identifier">bracket</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">bracket</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::literal</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">Inter::Packages::scope_of</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">), </span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">], </span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">+1], </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bracket</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">";\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">CONSTANT_DIRECT</span><span class="plain">: {</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val1</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">DATA_CONST_IFLD</span><span class="plain">];</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val2</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">DATA_CONST_IFLD</span><span class="plain"> + 1];</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ifndef_me</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"#ifndef %S; "</span><span class="plain">, </span><span class="functiontext">CodeGen::name</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"Constant %S = "</span><span class="plain">, </span><span class="functiontext">CodeGen::name</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">));</span>
<span class="functiontext">CodeGen::literal</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">Inter::Packages::scope_of</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">), </span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">";"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ifndef_me</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" #endif;"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">default</span><span class="plain">: </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"ungenerated constant format"</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">CodeGen::literal</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">inter_symbols_table</span><span class="plain"> *</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val2</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">unsub</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">val1</span><span class="plain"> == </span><span class="identifier">LITERAL_IVAL</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">hex</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">con_name</span><span class="plain">)</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">no_symbol_annotations</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">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_annotations</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">].</span><span class="identifier">annot</span><span class="plain">-&gt;</span><span class="identifier">annotation_ID</span><span class="plain"> == </span><span class="identifier">HEX_IANN</span><span class="plain">)</span>
<span class="identifier">hex</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">hex</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"$%x"</span><span class="plain">, </span><span class="identifier">val2</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">"%d"</span><span class="plain">, </span><span class="identifier">val2</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">Inter::Symbols::is_stored_in_data</span><span class="plain">(</span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">)) {</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">aliased</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::symbol_from_data_pair_and_table</span><span class="plain">(</span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">, </span><span class="identifier">T</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">aliased</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"bad aliased symbol"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">aliased</span><span class="plain"> == </span><span class="identifier">verb_directive_divider_symbol</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\</span><span class="plain">n</span><span class="string">\</span><span class="plain">t</span><span class="string">*"</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">aliased</span><span class="plain"> == </span><span class="identifier">verb_directive_reverse_symbol</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"reverse"</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">aliased</span><span class="plain"> == </span><span class="identifier">verb_directive_slash_symbol</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"/"</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">aliased</span><span class="plain"> == </span><span class="identifier">verb_directive_result_symbol</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"-&gt;"</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">aliased</span><span class="plain"> == </span><span class="identifier">verb_directive_special_symbol</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"special"</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">aliased</span><span class="plain"> == </span><span class="identifier">verb_directive_number_symbol</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"number"</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">aliased</span><span class="plain"> == </span><span class="identifier">verb_directive_noun_symbol</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"noun"</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">aliased</span><span class="plain"> == </span><span class="identifier">verb_directive_multi_symbol</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"multi"</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">aliased</span><span class="plain"> == </span><span class="identifier">verb_directive_multiinside_symbol</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"multiinside"</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">aliased</span><span class="plain"> == </span><span class="identifier">verb_directive_multiheld_symbol</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"multiheld"</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">aliased</span><span class="plain"> == </span><span class="identifier">verb_directive_held_symbol</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"held"</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">aliased</span><span class="plain"> == </span><span class="identifier">verb_directive_creature_symbol</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"creature"</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">aliased</span><span class="plain"> == </span><span class="identifier">verb_directive_topic_symbol</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"topic"</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">aliased</span><span class="plain"> == </span><span class="identifier">verb_directive_multiexcept_symbol</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"multiexcept"</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">unsub</span><span class="plain">) &amp;&amp; (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">aliased</span><span class="plain">, </span><span class="identifier">SCOPE_FILTER_IANN</span><span class="plain">) == 1))</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"scope="</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">unsub</span><span class="plain">) &amp;&amp; (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">aliased</span><span class="plain">, </span><span class="identifier">NOUN_FILTER_IANN</span><span class="plain">) == 1))</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"noun="</span><span class="plain">);</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain"> = </span><span class="functiontext">CodeGen::name</span><span class="plain">(</span><span class="identifier">aliased</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">unsub</span><span class="plain">) &amp;&amp; (</span><span class="identifier">Str::begins_with_wide_string</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"##"</span><span class="plain">))) {</span>
<span class="identifier">LOOP_THROUGH_TEXT</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pos</span><span class="plain">.</span><span class="identifier">index</span><span class="plain"> &gt;= 2)</span>
<span class="identifier">PUT</span><span class="plain">(</span><span class="identifier">Str::get</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">));</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">"%S"</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">);</span>
<span class="plain">}</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">val1</span><span class="plain"> == </span><span class="identifier">DIVIDER_IVAL</span><span class="plain">) {</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">divider_text</span><span class="plain"> = </span><span class="identifier">Inter::get_text</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" ! %S\</span><span class="plain">n</span><span class="string">\</span><span class="plain">t</span><span class="string">"</span><span class="plain">, </span><span class="identifier">divider_text</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">val1</span><span class="plain"> == </span><span class="identifier">REAL_IVAL</span><span class="plain">) {</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">glob_text</span><span class="plain"> = </span><span class="identifier">Inter::get_text</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"$%S"</span><span class="plain">, </span><span class="identifier">glob_text</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">val1</span><span class="plain"> == </span><span class="identifier">DWORD_IVAL</span><span class="plain">) {</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">glob_text</span><span class="plain"> = </span><span class="identifier">Inter::get_text</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">);</span>
<span class="functiontext">CodeGen::compile_to_I6_dictionary</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">glob_text</span><span class="plain">, </span><span class="identifier">FALSE</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">val1</span><span class="plain"> == </span><span class="identifier">PDWORD_IVAL</span><span class="plain">) {</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">glob_text</span><span class="plain"> = </span><span class="identifier">Inter::get_text</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">);</span>
<span class="functiontext">CodeGen::compile_to_I6_dictionary</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">glob_text</span><span class="plain">, </span><span class="identifier">TRUE</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">val1</span><span class="plain"> == </span><span class="identifier">LITERAL_TEXT_IVAL</span><span class="plain">) {</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">glob_text</span><span class="plain"> = </span><span class="identifier">Inter::get_text</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">);</span>
<span class="functiontext">CodeGen::compile_to_I6_text</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">glob_text</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">val1</span><span class="plain"> == </span><span class="identifier">GLOB_IVAL</span><span class="plain">) {</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">glob_text</span><span class="plain"> = </span><span class="identifier">Inter::get_text</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">glob_text</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"unimplemented direct constant"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::pragma</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">) {</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">target_symbol</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::symbol_from_frame_data</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">TARGET_PRAGMA_IFLD</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">target_symbol</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"bad pragma"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">target_symbol</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"target_I6"</span><span class="plain">)) {</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">ID</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">TEXT_PRAGMA_IFLD</span><span class="plain">];</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain"> = </span><span class="identifier">Inter::get_text</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">repo_segment</span><span class="plain">-&gt;</span><span class="identifier">owning_repo</span><span class="plain">, </span><span class="identifier">ID</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"!%% %S\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function CodeGen::constant is used in <a href="#SP2">&#167;2</a>.</p>
<p class="endnote">The function CodeGen::literal is used in <a href="#SP1">&#167;1</a>, <a href="#SP4">&#167;4</a>, 4/iap (<a href="4-iap.html#SP4_8_4_1_1">&#167;4.8.4.1.1</a>, <a href="4-iap.html#SP6">&#167;6</a>), 4/vrb (<a href="4-vrb.html#SP1">&#167;1</a>).</p>
2019-03-17 14:40:57 +02:00
<p class="endnote">The function CodeGen::pragma is used in <a href="#SP2">&#167;2</a>.</p>
<p class="inwebparagraph"><a id="SP4"></a><b>&#167;4. </b></p>
<pre class="definitions">
<span class="definitionkeyword">define</span> <span class="constant">URL_SYMBOL_CHAR</span><span class="plain"> 0</span><span class="identifier">x00A7</span>
</pre>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::splat</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">) {</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain"> = </span><span class="identifier">Inter::get_text</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">MATTER_SPLAT_IFLD</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">Str::len</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">);</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">L</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) {</span>
<span class="identifier">wchar_t</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> = </span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">S</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">c</span><span class="plain"> == </span><span class="constant">URL_SYMBOL_CHAR</span><span class="plain">) {</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">);</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain">++; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">L</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) {</span>
<span class="identifier">wchar_t</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> = </span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">S</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">c</span><span class="plain"> == </span><span class="constant">URL_SYMBOL_CHAR</span><span class="plain">) </span><span class="reserved">break</span><span class="plain">;</span>
<span class="identifier">PUT_TO</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">c</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">symb</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::url_name_to_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">T</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="functiontext">CodeGen::name</span><span class="plain">(</span><span class="identifier">symb</span><span class="plain">));</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="identifier">PUT</span><span class="plain">(</span><span class="identifier">c</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">CodeGen::local</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">) {</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">pack</span><span class="plain"> = </span><span class="identifier">Inter::Packages::container</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">);</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">routine</span><span class="plain"> = </span><span class="identifier">pack</span><span class="plain">-&gt;</span><span class="identifier">package_name</span><span class="plain">;</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">var_name</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::local_symbol_from_id</span><span class="plain">(</span><span class="identifier">routine</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">DEFN_LOCAL_IFLD</span><span class="plain">]);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" %S"</span><span class="plain">, </span><span class="identifier">var_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::label</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">) {</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">pack</span><span class="plain"> = </span><span class="identifier">Inter::Packages::container</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">);</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">routine</span><span class="plain"> = </span><span class="identifier">pack</span><span class="plain">-&gt;</span><span class="identifier">package_name</span><span class="plain">;</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">lab_name</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::local_symbol_from_id</span><span class="plain">(</span><span class="identifier">routine</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">DEFN_LABEL_IFLD</span><span class="plain">]);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">lab_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">".begin"</span><span class="plain">)) { </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">";\</span><span class="plain">n</span><span class="string">"</span><span class="plain">); </span><span class="identifier">INDENT</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">Str::eq</span><span class="plain">(</span><span class="identifier">lab_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">".end"</span><span class="plain">)) { </span><span class="identifier">OUTDENT</span><span class="plain">; </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"];\</span><span class="plain">n</span><span class="string">"</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">"%S;\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">lab_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">);</span>
<span class="identifier">inter_frame_list</span><span class="plain"> *</span><span class="identifier">ifl</span><span class="plain"> = </span><span class="identifier">Inter::find_frame_list</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">repo_segment</span><span class="plain">-&gt;</span><span class="identifier">owning_repo</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">CODE_LABEL_IFLD</span><span class="plain">]);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ifl</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"block without code list"</span><span class="plain">);</span>
<span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">F</span><span class="plain">;</span>
<span class="identifier">LOOP_THROUGH_INTER_FRAME_LIST</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">ifl</span><span class="plain">)</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::block</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">) {</span>
<span class="comment">LOG("\nBLOCK\n");</span>
2019-03-17 14:40:57 +02:00
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">block</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::symbol_from_frame_data</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">DEFN_PACKAGE_IFLD</span><span class="plain">);</span>
<span class="identifier">inter_frame_list</span><span class="plain"> *</span><span class="identifier">ifl</span><span class="plain"> = </span><span class="identifier">Inter::Package::code_list</span><span class="plain">(</span><span class="identifier">block</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ifl</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"block without code list"</span><span class="plain">);</span>
<span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">F</span><span class="plain">;</span>
<span class="identifier">LOOP_THROUGH_INTER_FRAME_LIST</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">ifl</span><span class="plain">) {</span>
<span class="comment">Inter::Defn::write_construct_text(DL, F);</span>
2019-03-17 14:40:57 +02:00
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="comment">LOG("----\n");</span>
2019-03-17 14:40:57 +02:00
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::code</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">old_level</span><span class="plain"> = </span><span class="identifier">void_level</span><span class="plain">;</span>
<span class="identifier">void_level</span><span class="plain"> = </span><span class="identifier">Inter::Defn::get_level</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">) + 1;</span>
<span class="identifier">inter_frame_list</span><span class="plain"> *</span><span class="identifier">ifl</span><span class="plain"> = </span><span class="identifier">Inter::find_frame_list</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">repo_segment</span><span class="plain">-&gt;</span><span class="identifier">owning_repo</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">CODE_CODE_IFLD</span><span class="plain">]);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ifl</span><span class="plain">) {</span>
<span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">F</span><span class="plain">;</span>
<span class="identifier">LOOP_THROUGH_INTER_FRAME_LIST</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">ifl</span><span class="plain">)</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">void_level</span><span class="plain"> = </span><span class="identifier">old_level</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::evaluation</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">) {</span>
2019-03-17 14:40:57 +02:00
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">old_level</span><span class="plain"> = </span><span class="identifier">void_level</span><span class="plain">;</span>
<span class="identifier">inter_frame_list</span><span class="plain"> *</span><span class="identifier">ifl</span><span class="plain"> = </span><span class="identifier">Inter::find_frame_list</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">repo_segment</span><span class="plain">-&gt;</span><span class="identifier">owning_repo</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">CODE_EVAL_IFLD</span><span class="plain">]);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ifl</span><span class="plain">) {</span>
<span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">F</span><span class="plain">;</span>
<span class="identifier">LOOP_THROUGH_INTER_FRAME_LIST</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">ifl</span><span class="plain">)</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">void_level</span><span class="plain"> = </span><span class="identifier">old_level</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::reference</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">old_level</span><span class="plain"> = </span><span class="identifier">void_level</span><span class="plain">;</span>
<span class="identifier">inter_frame_list</span><span class="plain"> *</span><span class="identifier">ifl</span><span class="plain"> = </span><span class="identifier">Inter::find_frame_list</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">repo_segment</span><span class="plain">-&gt;</span><span class="identifier">owning_repo</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">CODE_RCE_IFLD</span><span class="plain">]);</span>
2019-03-17 14:40:57 +02:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ifl</span><span class="plain">) {</span>
<span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">F</span><span class="plain">;</span>
<span class="identifier">LOOP_THROUGH_INTER_FRAME_LIST</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">ifl</span><span class="plain">)</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">void_level</span><span class="plain"> = </span><span class="identifier">old_level</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::inv</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">suppress_terminal_semicolon</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="identifier">inter_frame_list</span><span class="plain"> *</span><span class="identifier">ifl</span><span class="plain"> = </span><span class="identifier">Inter::Inv::children_of_frame</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">ifl</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"cast without code list"</span><span class="plain">);</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">METHOD_INV_IFLD</span><span class="plain">]) {</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">INVOKED_PRIMITIVE</span><span class="plain">: {</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">prim</span><span class="plain"> = </span><span class="identifier">Inter::Inv::invokee</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">prim</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"bad prim"</span><span class="plain">);</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">bip</span><span class="plain"> = </span><span class="functiontext">Primitives::to_bip</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">prim</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">bip</span><span class="plain">) {</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">RETURN_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for return</span> <span class="cwebmacronumber">4.1</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">JUMP_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for jump</span> <span class="cwebmacronumber">4.2</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">MOVE_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for move</span> <span class="cwebmacronumber">4.18</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">REMOVE_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for remove</span> <span class="cwebmacronumber">4.19</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">GIVE_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for give</span> <span class="cwebmacronumber">4.20</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">TAKE_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for take</span> <span class="cwebmacronumber">4.21</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">QUIT_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for quit</span> <span class="cwebmacronumber">4.3</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">RESTORE_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for restore</span> <span class="cwebmacronumber">4.4</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">SPACES_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for spaces</span> <span class="cwebmacronumber">4.5</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">BREAK_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for break</span> <span class="cwebmacronumber">4.6</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">CONTINUE_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for continue</span> <span class="cwebmacronumber">4.7</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">NOT_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for not</span> <span class="cwebmacronumber">4.29</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">AND_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for and</span> <span class="cwebmacronumber">4.30</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">OR_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for or</span> <span class="cwebmacronumber">4.31</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">ALTERNATIVE_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for alternative</span> <span class="cwebmacronumber">4.32</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">ALTERNATIVECASE_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for alternativecase</span> <span class="cwebmacronumber">4.33</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">BITWISEAND_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for bitwiseand</span> <span class="cwebmacronumber">4.34</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">BITWISEOR_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for bitwiseor</span> <span class="cwebmacronumber">4.35</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">BITWISENOT_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for bitwisenot</span> <span class="cwebmacronumber">4.36</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">EQ_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for eq</span> <span class="cwebmacronumber">4.11</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">NE_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for ne</span> <span class="cwebmacronumber">4.12</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">GT_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for gt</span> <span class="cwebmacronumber">4.13</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">GE_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for ge</span> <span class="cwebmacronumber">4.14</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">LT_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for lt</span> <span class="cwebmacronumber">4.15</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">LE_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for le</span> <span class="cwebmacronumber">4.16</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">OFCLASS_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for ofclass</span> <span class="cwebmacronumber">4.17</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">HAS_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for has</span> <span class="cwebmacronumber">4.22</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">HASNT_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for hasnt</span> <span class="cwebmacronumber">4.23</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">IN_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for in</span> <span class="cwebmacronumber">4.24</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">NOTIN_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for notin</span> <span class="cwebmacronumber">4.25</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">SEQUENTIAL_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for sequential</span> <span class="cwebmacronumber">4.26</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">TERNARYSEQUENTIAL_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for ternarysequential</span> <span class="cwebmacronumber">4.27</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">PLUS_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for plus</span> <span class="cwebmacronumber">4.28</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">MINUS_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for minus</span> <span class="cwebmacronumber">4.37</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">UNARYMINUS_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for unaryminus</span> <span class="cwebmacronumber">4.38</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">TIMES_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for times</span> <span class="cwebmacronumber">4.39</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">DIVIDE_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for divide</span> <span class="cwebmacronumber">4.40</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">MODULO_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for modulo</span> <span class="cwebmacronumber">4.8</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">RANDOM_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for random</span> <span class="cwebmacronumber">4.9</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">FONT_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for font</span> <span class="cwebmacronumber">4.10</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">STYLEROMAN_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for styleroman</span> <span class="cwebmacronumber">4.41</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">STYLEBOLD_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for stylebold</span> <span class="cwebmacronumber">4.42</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">STYLEUNDERLINE_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for styleunderline</span> <span class="cwebmacronumber">4.43</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">STYLEREVERSE_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for stylereverse</span> <span class="cwebmacronumber">4.44</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">PRINT_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for print</span> <span class="cwebmacronumber">4.45</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">PRINTRET_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for printret</span> <span class="cwebmacronumber">4.46</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">PRINTCHAR_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for printchar</span> <span class="cwebmacronumber">4.47</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">PRINTNAME_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for printname</span> <span class="cwebmacronumber">4.48</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
2019-05-07 00:32:11 +03:00
<span class="reserved">case</span><span class="plain"> </span><span class="constant">PRINTOBJ_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for printobj</span> <span class="cwebmacronumber">4.49</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">PRINTPROPERTY_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for printproperty</span> <span class="cwebmacronumber">4.50</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">PRINTNUMBER_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for printnumber</span> <span class="cwebmacronumber">4.51</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">PRINTADDRESS_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for printaddress</span> <span class="cwebmacronumber">4.52</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">PRINTSTRING_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for printstring</span> <span class="cwebmacronumber">4.53</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">PRINTNLNUMBER_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for printnlnumber</span> <span class="cwebmacronumber">4.54</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">PRINTDEF_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for printdef</span> <span class="cwebmacronumber">4.55</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">PRINTCDEF_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for printcdef</span> <span class="cwebmacronumber">4.56</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">PRINTINDEF_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for printindef</span> <span class="cwebmacronumber">4.57</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">PRINTCINDEF_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for printcindef</span> <span class="cwebmacronumber">4.58</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">BOX_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for box</span> <span class="cwebmacronumber">4.59</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">PUSH_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for push</span> <span class="cwebmacronumber">4.60</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">PULL_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for pull</span> <span class="cwebmacronumber">4.61</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">PREINCREMENT_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for preincrement</span> <span class="cwebmacronumber">4.62</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">POSTINCREMENT_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for postincrement</span> <span class="cwebmacronumber">4.63</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">PREDECREMENT_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for predecrement</span> <span class="cwebmacronumber">4.64</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">POSTDECREMENT_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for postdecrement</span> <span class="cwebmacronumber">4.65</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">STORE_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for store</span> <span class="cwebmacronumber">4.66</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">SETBIT_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for setbit</span> <span class="cwebmacronumber">4.67</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">CLEARBIT_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for clearbit</span> <span class="cwebmacronumber">4.68</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">IF_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for if</span> <span class="cwebmacronumber">4.69</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">IFDEBUG_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for ifdebug</span> <span class="cwebmacronumber">4.70</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">IFSTRICT_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for ifstrict</span> <span class="cwebmacronumber">4.71</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">IFELSE_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for ifelse</span> <span class="cwebmacronumber">4.72</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">WHILE_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for while</span> <span class="cwebmacronumber">4.73</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">DO_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for do</span> <span class="cwebmacronumber">4.74</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">FOR_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for for</span> <span class="cwebmacronumber">4.75</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">OBJECTLOOP_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for objectloop</span> <span class="cwebmacronumber">4.76</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">OBJECTLOOPX_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for objectloopx</span> <span class="cwebmacronumber">4.77</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">LOOP_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for loop</span> <span class="cwebmacronumber">4.78</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">LOOKUP_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for lookup</span> <span class="cwebmacronumber">4.79</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">LOOKUPBYTE_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for lookupbyte</span> <span class="cwebmacronumber">4.80</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">LOOKUPREF_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for lookupref</span> <span class="cwebmacronumber">4.81</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">SWITCH_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for switch</span> <span class="cwebmacronumber">4.82</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">CASE_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for case</span> <span class="cwebmacronumber">4.83</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">DEFAULT_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for default</span> <span class="cwebmacronumber">4.84</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">INDIRECT0V_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for indirect0v</span> <span class="cwebmacronumber">4.85</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">INDIRECT1V_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for indirect1v</span> <span class="cwebmacronumber">4.86</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">INDIRECT2V_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for indirect2v</span> <span class="cwebmacronumber">4.87</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">INDIRECT3V_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for indirect3v</span> <span class="cwebmacronumber">4.88</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">INDIRECT4V_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for indirect4v</span> <span class="cwebmacronumber">4.89</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">INDIRECT5V_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for indirect5v</span> <span class="cwebmacronumber">4.90</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">INDIRECT0_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for indirect0</span> <span class="cwebmacronumber">4.91</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">INDIRECT1_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for indirect1</span> <span class="cwebmacronumber">4.92</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">INDIRECT2_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for indirect2</span> <span class="cwebmacronumber">4.93</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">INDIRECT3_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for indirect3</span> <span class="cwebmacronumber">4.94</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">INDIRECT4_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for indirect4</span> <span class="cwebmacronumber">4.95</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">INDIRECT5_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for indirect5</span> <span class="cwebmacronumber">4.96</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">MESSAGE0_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for message0</span> <span class="cwebmacronumber">4.97</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">MESSAGE1_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for message1</span> <span class="cwebmacronumber">4.98</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">MESSAGE2_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for message2</span> <span class="cwebmacronumber">4.99</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">MESSAGE3_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for message3</span> <span class="cwebmacronumber">4.100</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">CALLMESSAGE0_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for callmessage0</span> <span class="cwebmacronumber">4.101</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">CALLMESSAGE1_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for callmessage1</span> <span class="cwebmacronumber">4.102</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">CALLMESSAGE2_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for callmessage2</span> <span class="cwebmacronumber">4.103</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">CALLMESSAGE3_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for callmessage3</span> <span class="cwebmacronumber">4.104</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">PROPERTYADDRESS_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for propertyaddress</span> <span class="cwebmacronumber">4.105</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">PROPERTYLENGTH_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for propertylength</span> <span class="cwebmacronumber">4.106</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">PROVIDES_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for provides</span> <span class="cwebmacronumber">4.107</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">PROPERTYVALUE_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for propertyvalue</span> <span class="cwebmacronumber">4.108</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">READ_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for read</span> <span class="cwebmacronumber">4.109</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">INVERSION_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for inversion</span> <span class="cwebmacronumber">4.110</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
2019-03-17 14:40:57 +02:00
<span class="reserved">default</span><span class="plain">: </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Prim: %S\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">prim</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">); </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"unimplemented prim"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">INVOKED_ROUTINE</span><span class="plain">: {</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">routine</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::symbol_from_frame_data</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">INVOKEE_INV_IFLD</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">routine</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"bad routine"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S("</span><span class="plain">, </span><span class="functiontext">CodeGen::name</span><span class="plain">(</span><span class="identifier">routine</span><span class="plain">));</span>
<span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">F</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">argc</span><span class="plain"> = 0;</span>
<span class="identifier">LOOP_THROUGH_INTER_FRAME_LIST</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">ifl</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">argc</span><span class="plain">++ &gt; 0) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">", "</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">INVOKED_OPCODE</span><span class="plain">: {</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">ID</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">INVOKEE_INV_IFLD</span><span class="plain">];</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain"> = </span><span class="identifier">Inter::get_text</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">repo_segment</span><span class="plain">-&gt;</span><span class="identifier">owning_repo</span><span class="plain">, </span><span class="identifier">ID</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">);</span>
2019-05-07 00:32:11 +03:00
<span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">F</span><span class="plain">; </span><span class="identifier">negate_label_mode</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
2019-03-17 14:40:57 +02:00
<span class="identifier">LOOP_THROUGH_INTER_FRAME_LIST</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">ifl</span><span class="plain">) {</span>
<span class="identifier">query_labels_mode</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
2019-05-07 00:32:11 +03:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">F</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">ID_IFLD</span><span class="plain">] == </span><span class="identifier">VAL_IST</span><span class="plain">) {</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val1</span><span class="plain"> = </span><span class="identifier">F</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">VAL1_VAL_IFLD</span><span class="plain">];</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val2</span><span class="plain"> = </span><span class="identifier">F</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">VAL2_VAL_IFLD</span><span class="plain">];</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::is_stored_in_data</span><span class="plain">(</span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">)) {</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">symb</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::symbol_from_id</span><span class="plain">(</span><span class="identifier">Inter::Packages::scope_of</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">), </span><span class="identifier">val2</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">symb</span><span class="plain">) &amp;&amp; (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">symb</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"__assembly_negated_label"</span><span class="plain">))) {</span>
<span class="identifier">negate_label_mode</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">continue</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" "</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">);</span>
<span class="identifier">query_labels_mode</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
2019-03-17 14:40:57 +02:00
<span class="plain">}</span>
2019-05-07 00:32:11 +03:00
<span class="identifier">negate_label_mode</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
2019-03-17 14:40:57 +02:00
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">default</span><span class="plain">: </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"bad inv"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Inter::Defn::get_level</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">) == </span><span class="identifier">void_level</span><span class="plain">) &amp;&amp;</span>
<span class="plain">(</span><span class="identifier">suppress_terminal_semicolon</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">";\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::cast</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">) {</span>
<span class="identifier">inter_frame_list</span><span class="plain"> *</span><span class="identifier">ifl</span><span class="plain"> = </span><span class="identifier">Inter::Cast::children_of_frame</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">ifl</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"cast without code list"</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::lab</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">) {</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">pack</span><span class="plain"> = </span><span class="identifier">Inter::Packages::container</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">);</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">routine</span><span class="plain"> = </span><span class="identifier">pack</span><span class="plain">-&gt;</span><span class="identifier">package_name</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Package::is</span><span class="plain">(</span><span class="identifier">routine</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"bad lab"</span><span class="plain">);</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">lab</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::local_symbol_from_id</span><span class="plain">(</span><span class="identifier">routine</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">LABEL_LAB_IFLD</span><span class="plain">]);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">lab</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"bad lab"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">query_labels_mode</span><span class="plain">) </span><span class="identifier">PUT</span><span class="plain">(</span><span class="character">'?'</span><span class="plain">);</span>
2019-05-07 00:32:11 +03:00
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">negate_label_mode</span><span class="plain">) </span><span class="identifier">PUT</span><span class="plain">(</span><span class="character">'~'</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain"> = </span><span class="functiontext">CodeGen::name</span><span class="plain">(</span><span class="identifier">lab</span><span class="plain">);</span>
<span class="identifier">LOOP_THROUGH_TEXT</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::get</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">) != </span><span class="character">'.'</span><span class="plain">)</span>
<span class="identifier">PUT</span><span class="plain">(</span><span class="identifier">Str::get</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">));</span>
2019-03-17 14:40:57 +02:00
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::val_from</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">inter_reading_state</span><span class="plain"> *</span><span class="identifier">IRS</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val2</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::is_stored_in_data</span><span class="plain">(</span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">)) {</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">symb</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::symbol_from_data_pair_and_table</span><span class="plain">(</span>
<span class="identifier">val1</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">, </span><span class="identifier">Inter::Bookmarks::scope</span><span class="plain">(</span><span class="identifier">IRS</span><span class="plain">));</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">symb</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"bad symbol"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="functiontext">CodeGen::name</span><span class="plain">(</span><span class="identifier">symb</span><span class="plain">));</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">val1</span><span class="plain">) {</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">UNDEF_IVAL</span><span class="plain">:</span>
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"value undefined"</span><span class="plain">);</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">LITERAL_IVAL</span><span class="plain">:</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">LITERAL_TEXT_IVAL</span><span class="plain">:</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">GLOB_IVAL</span><span class="plain">:</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">DWORD_IVAL</span><span class="plain">:</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">REAL_IVAL</span><span class="plain">:</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">PDWORD_IVAL</span><span class="plain">:</span>
<span class="functiontext">CodeGen::literal</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">IRS</span><span class="plain">-&gt;</span><span class="identifier">read_into</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="reserved">break</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">CodeGen::val</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">) {</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">val_kind</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::symbol_from_frame_data</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">KIND_VAL_IFLD</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">val_kind</span><span class="plain">) {</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val1</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">VAL1_VAL_IFLD</span><span class="plain">];</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val2</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">VAL2_VAL_IFLD</span><span class="plain">];</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::is_stored_in_data</span><span class="plain">(</span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">)) {</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">pack</span><span class="plain"> = </span><span class="identifier">Inter::Packages::container</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">);</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">routine</span><span class="plain"> = </span><span class="identifier">pack</span><span class="plain">-&gt;</span><span class="identifier">package_name</span><span class="plain">;</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">symb</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::local_symbol_from_id</span><span class="plain">(</span><span class="identifier">routine</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">symb</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">symb</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::symbol_from_id</span><span class="plain">(</span><span class="identifier">Inter::Packages::scope_of</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">), </span><span class="identifier">val2</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">symb</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"bad val"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="functiontext">CodeGen::name</span><span class="plain">(</span><span class="identifier">symb</span><span class="plain">));</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">val1</span><span class="plain">) {</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">UNDEF_IVAL</span><span class="plain">:</span>
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"value undefined"</span><span class="plain">);</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">LITERAL_IVAL</span><span class="plain">:</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">LITERAL_TEXT_IVAL</span><span class="plain">:</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">GLOB_IVAL</span><span class="plain">:</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">DWORD_IVAL</span><span class="plain">:</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">REAL_IVAL</span><span class="plain">:</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">PDWORD_IVAL</span><span class="plain">:</span>
<span class="functiontext">CodeGen::literal</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">, </span><span class="identifier">FALSE</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">internal_error</span><span class="plain">(</span><span class="string">"bad val"</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function CodeGen::splat is used in <a href="#SP2">&#167;2</a>.</p>
<p class="endnote">The function CodeGen::local is used in <a href="#SP2">&#167;2</a>.</p>
<p class="endnote">The function CodeGen::label is used in <a href="#SP2">&#167;2</a>.</p>
<p class="endnote">The function CodeGen::block is used in <a href="#SP2">&#167;2</a>.</p>
<p class="endnote">The function CodeGen::code is used in <a href="#SP2">&#167;2</a>.</p>
<p class="endnote">The function CodeGen::evaluation is used in <a href="#SP2">&#167;2</a>.</p>
<p class="endnote">The function CodeGen::reference is used in <a href="#SP2">&#167;2</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="endnote">The function CodeGen::inv is used in <a href="#SP2">&#167;2</a>.</p>
<p class="endnote">The function CodeGen::cast is used in <a href="#SP2">&#167;2</a>.</p>
<p class="endnote">The function CodeGen::lab is used in <a href="#SP2">&#167;2</a>.</p>
<p class="endnote">The function CodeGen::val_from appears nowhere else.</p>
<p class="endnote">The function CodeGen::val is used in <a href="#SP2">&#167;2</a>.</p>
<p class="inwebparagraph"><a id="SP4_1"></a><b>&#167;4.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for return</span> <span class="cwebmacronumber">4.1</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">rboolean</span><span class="plain"> = </span><span class="identifier">NOT_APPLICABLE</span><span class="plain">;</span>
<span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">V</span><span class="plain"> = </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">V</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">ID_IFLD</span><span class="plain">] == </span><span class="identifier">VAL_IST</span><span class="plain">) {</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val1</span><span class="plain"> = </span><span class="identifier">V</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">VAL1_VAL_IFLD</span><span class="plain">];</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val2</span><span class="plain"> = </span><span class="identifier">V</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">VAL2_VAL_IFLD</span><span class="plain">];</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">val1</span><span class="plain"> == </span><span class="identifier">LITERAL_IVAL</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">val2</span><span class="plain"> == 0) </span><span class="identifier">rboolean</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">val2</span><span class="plain"> == 1) </span><span class="identifier">rboolean</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">rboolean</span><span class="plain">) {</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">: </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"rfalse"</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">: </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"rtrue"</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">NOT_APPLICABLE</span><span class="plain">: </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"return "</span><span class="plain">); </span><span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">V</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_2"></a><b>&#167;4.2. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for jump</span> <span class="cwebmacronumber">4.2</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"jump "</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_3"></a><b>&#167;4.3. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for quit</span> <span class="cwebmacronumber">4.3</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"quit"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_4"></a><b>&#167;4.4. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for restore</span> <span class="cwebmacronumber">4.4</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"restore "</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
2019-03-17 14:40:57 +02:00
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_5"></a><b>&#167;4.5. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for spaces</span> <span class="cwebmacronumber">4.5</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"spaces "</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
2019-03-17 14:40:57 +02:00
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_6"></a><b>&#167;4.6. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for break</span> <span class="cwebmacronumber">4.6</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"break"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
<p class="inwebparagraph"><a id="SP4_7"></a><b>&#167;4.7. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for continue</span> <span class="cwebmacronumber">4.7</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"continue"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
<p class="inwebparagraph"><a id="SP4_8"></a><b>&#167;4.8. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for modulo</span> <span class="cwebmacronumber">4.8</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%%"</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_9"></a><b>&#167;4.9. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for random</span> <span class="cwebmacronumber">4.9</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"random("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_10"></a><b>&#167;4.10. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for font</span> <span class="cwebmacronumber">4.10</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"if ("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">") { font on; } else { font off; }"</span><span class="plain">);</span>
<span class="identifier">suppress_terminal_semicolon</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_11"></a><b>&#167;4.11. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for eq</span> <span class="cwebmacronumber">4.11</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"=="</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_12"></a><b>&#167;4.12. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for ne</span> <span class="cwebmacronumber">4.12</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" ~= "</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_13"></a><b>&#167;4.13. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for gt</span> <span class="cwebmacronumber">4.13</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
2019-05-05 20:49:46 +03:00
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" &gt; "</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_14"></a><b>&#167;4.14. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for ge</span> <span class="cwebmacronumber">4.14</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&gt;="</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_15"></a><b>&#167;4.15. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for lt</span> <span class="cwebmacronumber">4.15</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;"</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_16"></a><b>&#167;4.16. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for le</span> <span class="cwebmacronumber">4.16</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;="</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_17"></a><b>&#167;4.17. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for ofclass</span> <span class="cwebmacronumber">4.17</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" ofclass "</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_18"></a><b>&#167;4.18. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for move</span> <span class="cwebmacronumber">4.18</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"move "</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" to "</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_19"></a><b>&#167;4.19. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for remove</span> <span class="cwebmacronumber">4.19</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"remove "</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
<p class="inwebparagraph"><a id="SP4_20"></a><b>&#167;4.20. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for give</span> <span class="cwebmacronumber">4.20</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"give "</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" "</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_21"></a><b>&#167;4.21. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for take</span> <span class="cwebmacronumber">4.21</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"give "</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" ~"</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_22"></a><b>&#167;4.22. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for has</span> <span class="cwebmacronumber">4.22</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" has "</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_23"></a><b>&#167;4.23. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for hasnt</span> <span class="cwebmacronumber">4.23</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" hasnt "</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_24"></a><b>&#167;4.24. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for in</span> <span class="cwebmacronumber">4.24</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" in "</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_25"></a><b>&#167;4.25. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for notin</span> <span class="cwebmacronumber">4.25</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" notin "</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_26"></a><b>&#167;4.26. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for sequential</span> <span class="cwebmacronumber">4.26</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">","</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_27"></a><b>&#167;4.27. </b>Here we need some gymnastics. We need to produce a value which the
2019-03-17 14:40:57 +02:00
sometimes shaky I6 expression parser will accept, which turns out to be
quite a constraint. If we were compiling to C, we might try this:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">(a, b, c)</span>
</pre>
<p class="inwebparagraph">using the serial comma operator &mdash; that is, where the expression <code class="display"><span class="extract">(a, b)</span></code>
evaluates <code class="display"><span class="extract">a</span></code> then <code class="display"><span class="extract">b</span></code> and returns the value of <code class="display"><span class="extract">b</span></code>, discarding <code class="display"><span class="extract">a</span></code>.
Now I6 does support the comma operator, and this makes a workable scheme,
right up to the point where some of the token values themselves include
invocations of functions, because I6's syntax analyser won't always
allow the serial comma to be mixed in the same expression with the
function argument comma, i.e., I6 is unable properly to handle expressions
like this one:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">(a(b, c), d)</span>
</pre>
<p class="inwebparagraph">where the first comma constructs a list and the second is the operator.
(Many such expressions work fine, but not all.) That being so, the scheme
I actually use is:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">(c) + 0*((b) + (a))</span>
</pre>
<p class="inwebparagraph">Because I6 evaluates the leaves in an expression tree right-to-left, not
left-to-right, the parameter assignments happen first, then the conditions,
then the result.
</p>
<p class="inwebparagraph"></p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for ternarysequential</span> <span class="cwebmacronumber">4.27</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"(\</span><span class="plain">n</span><span class="string">"</span><span class="plain">); </span><span class="identifier">INDENT</span><span class="plain">;</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"! This value evaluates third (i.e., last)\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::third_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">OUTDENT</span><span class="plain">; </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"+\</span><span class="plain">n</span><span class="string">"</span><span class="plain">); </span><span class="identifier">INDENT</span><span class="plain">;</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"0*(\</span><span class="plain">n</span><span class="string">"</span><span class="plain">); </span><span class="identifier">INDENT</span><span class="plain">;</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"! The following condition evaluates second\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"((\</span><span class="plain">n</span><span class="string">"</span><span class="plain">); </span><span class="identifier">INDENT</span><span class="plain">;</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">OUTDENT</span><span class="plain">; </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\</span><span class="plain">n</span><span class="string">))\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="identifier">OUTDENT</span><span class="plain">; </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"+\</span><span class="plain">n</span><span class="string">"</span><span class="plain">); </span><span class="identifier">INDENT</span><span class="plain">;</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"! The following assignments evaluate first\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
<span class="identifier">OUTDENT</span><span class="plain">; </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="identifier">OUTDENT</span><span class="plain">; </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_28"></a><b>&#167;4.28. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for plus</span> <span class="cwebmacronumber">4.28</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"+"</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_29"></a><b>&#167;4.29. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for not</span> <span class="cwebmacronumber">4.29</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"(~~("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"))"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_30"></a><b>&#167;4.30. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for and</span> <span class="cwebmacronumber">4.30</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"(("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&amp;&amp;"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"))"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_31"></a><b>&#167;4.31. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for or</span> <span class="cwebmacronumber">4.31</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"(("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")||("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"))"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_32"></a><b>&#167;4.32. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for alternative</span> <span class="cwebmacronumber">4.32</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" or "</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
<p class="inwebparagraph"><a id="SP4_33"></a><b>&#167;4.33. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for alternativecase</span> <span class="cwebmacronumber">4.33</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">", "</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
<p class="inwebparagraph"><a id="SP4_34"></a><b>&#167;4.34. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for bitwiseand</span> <span class="cwebmacronumber">4.34</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"(("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")&amp;("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"))"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_35"></a><b>&#167;4.35. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for bitwiseor</span> <span class="cwebmacronumber">4.35</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"(("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")|("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"))"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_36"></a><b>&#167;4.36. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for bitwisenot</span> <span class="cwebmacronumber">4.36</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"(~("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"))"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_37"></a><b>&#167;4.37. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for minus</span> <span class="cwebmacronumber">4.37</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"-"</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_38"></a><b>&#167;4.38. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for unaryminus</span> <span class="cwebmacronumber">4.38</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"(-("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"))"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_39"></a><b>&#167;4.39. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for times</span> <span class="cwebmacronumber">4.39</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"*"</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_40"></a><b>&#167;4.40. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for divide</span> <span class="cwebmacronumber">4.40</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"/"</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_41"></a><b>&#167;4.41. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for styleroman</span> <span class="cwebmacronumber">4.41</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"style roman"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_42"></a><b>&#167;4.42. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for stylebold</span> <span class="cwebmacronumber">4.42</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"style bold"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_43"></a><b>&#167;4.43. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for styleunderline</span> <span class="cwebmacronumber">4.43</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"style underline"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_44"></a><b>&#167;4.44. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for stylereverse</span> <span class="cwebmacronumber">4.44</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"style reverse"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
<p class="inwebparagraph"><a id="SP4_45"></a><b>&#167;4.45. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for print</span> <span class="cwebmacronumber">4.45</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"print "</span><span class="plain">);</span>
<span class="functiontext">CodeGen::enter_print_mode</span><span class="plain">();</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="functiontext">CodeGen::exit_print_mode</span><span class="plain">();</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_46"></a><b>&#167;4.46. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for printret</span> <span class="cwebmacronumber">4.46</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="functiontext">CodeGen::enter_print_mode</span><span class="plain">();</span>
2019-03-17 14:40:57 +02:00
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="functiontext">CodeGen::exit_print_mode</span><span class="plain">();</span>
2019-03-17 14:40:57 +02:00
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_47"></a><b>&#167;4.47. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for printchar</span> <span class="cwebmacronumber">4.47</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"print (char) "</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_48"></a><b>&#167;4.48. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for printname</span> <span class="cwebmacronumber">4.48</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"print (name) "</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_49"></a><b>&#167;4.49. </b><code class="display">
2019-05-07 00:32:11 +03:00
&lt;<span class="cwebmacrodefn">Generate primitive for printobj</span> <span class="cwebmacronumber">4.49</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
2019-05-07 00:32:11 +03:00
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"print (object) "</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_50"></a><b>&#167;4.50. </b><code class="display">
2019-05-07 00:32:11 +03:00
&lt;<span class="cwebmacrodefn">Generate primitive for printproperty</span> <span class="cwebmacronumber">4.50</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
2019-05-07 00:32:11 +03:00
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"print (property) "</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_51"></a><b>&#167;4.51. </b><code class="display">
2019-05-07 00:32:11 +03:00
&lt;<span class="cwebmacrodefn">Generate primitive for printnumber</span> <span class="cwebmacronumber">4.51</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
2019-05-07 00:32:11 +03:00
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"print "</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_52"></a><b>&#167;4.52. </b><code class="display">
2019-05-07 00:32:11 +03:00
&lt;<span class="cwebmacrodefn">Generate primitive for printaddress</span> <span class="cwebmacronumber">4.52</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
2019-05-07 00:32:11 +03:00
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"print (address) "</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_53"></a><b>&#167;4.53. </b><code class="display">
2019-05-07 00:32:11 +03:00
&lt;<span class="cwebmacrodefn">Generate primitive for printstring</span> <span class="cwebmacronumber">4.53</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
2019-05-07 00:32:11 +03:00
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"print (string) "</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_54"></a><b>&#167;4.54. </b><code class="display">
2019-05-07 00:32:11 +03:00
&lt;<span class="cwebmacrodefn">Generate primitive for printnlnumber</span> <span class="cwebmacronumber">4.54</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
2019-05-07 00:32:11 +03:00
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"print (number) "</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_55"></a><b>&#167;4.55. </b><code class="display">
2019-05-07 00:32:11 +03:00
&lt;<span class="cwebmacrodefn">Generate primitive for printdef</span> <span class="cwebmacronumber">4.55</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
2019-05-07 00:32:11 +03:00
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"print (the) "</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP4_56"></a><b>&#167;4.56. </b><code class="display">
2019-05-07 00:32:11 +03:00
&lt;<span class="cwebmacrodefn">Generate primitive for printcdef</span> <span class="cwebmacronumber">4.56</span>&gt; =
</code></p>
<pre class="displaydefn">
2019-05-07 00:32:11 +03:00
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"print (The) "</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
<p class="inwebparagraph"><a id="SP4_57"></a><b>&#167;4.57. </b><code class="display">
2019-05-07 00:32:11 +03:00
&lt;<span class="cwebmacrodefn">Generate primitive for printindef</span> <span class="cwebmacronumber">4.57</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"print (a) "</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
<p class="inwebparagraph"><a id="SP4_58"></a><b>&#167;4.58. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for printcindef</span> <span class="cwebmacronumber">4.58</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"print (A) "</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
<p class="inwebparagraph"><a id="SP4_59"></a><b>&#167;4.59. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for box</span> <span class="cwebmacronumber">4.59</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"box "</span><span class="plain">);</span>
<span class="functiontext">CodeGen::enter_box_mode</span><span class="plain">();</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="functiontext">CodeGen::exit_box_mode</span><span class="plain">();</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_60"></a><b>&#167;4.60. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for push</span> <span class="cwebmacronumber">4.60</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"@push "</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_61"></a><b>&#167;4.61. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for pull</span> <span class="cwebmacronumber">4.61</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"@pull "</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_62"></a><b>&#167;4.62. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for preincrement</span> <span class="cwebmacronumber">4.62</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"++("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_63"></a><b>&#167;4.63. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for postincrement</span> <span class="cwebmacronumber">4.63</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")++"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_64"></a><b>&#167;4.64. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for predecrement</span> <span class="cwebmacronumber">4.64</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"--("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_65"></a><b>&#167;4.65. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for postdecrement</span> <span class="cwebmacronumber">4.65</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")--"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_66"></a><b>&#167;4.66. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for store</span> <span class="cwebmacronumber">4.66</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" = "</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_67"></a><b>&#167;4.67. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for setbit</span> <span class="cwebmacronumber">4.67</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" = "</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" | "</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_68"></a><b>&#167;4.68. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for clearbit</span> <span class="cwebmacronumber">4.68</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" = "</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" &amp;~ ("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_69"></a><b>&#167;4.69. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for if</span> <span class="cwebmacronumber">4.69</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"if ("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">") {\</span><span class="plain">n</span><span class="string">"</span><span class="plain">); </span><span class="identifier">INDENT</span><span class="plain">;</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">OUTDENT</span><span class="plain">; </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"}\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="identifier">suppress_terminal_semicolon</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_70"></a><b>&#167;4.70. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for ifdebug</span> <span class="cwebmacronumber">4.70</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"#ifdef DEBUG;\</span><span class="plain">n</span><span class="string">"</span><span class="plain">); </span><span class="identifier">INDENT</span><span class="plain">;</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">OUTDENT</span><span class="plain">; </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"#endif;\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="identifier">suppress_terminal_semicolon</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_71"></a><b>&#167;4.71. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for ifstrict</span> <span class="cwebmacronumber">4.71</span>&gt; =
2019-05-06 14:20:08 +03:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"#ifdef STRICT_MODE;\</span><span class="plain">n</span><span class="string">"</span><span class="plain">); </span><span class="identifier">INDENT</span><span class="plain">;</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">OUTDENT</span><span class="plain">; </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"#endif;\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="identifier">suppress_terminal_semicolon</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_72"></a><b>&#167;4.72. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for ifelse</span> <span class="cwebmacronumber">4.72</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"if ("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">") {\</span><span class="plain">n</span><span class="string">"</span><span class="plain">); </span><span class="identifier">INDENT</span><span class="plain">;</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">OUTDENT</span><span class="plain">; </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"} else {\</span><span class="plain">n</span><span class="string">"</span><span class="plain">); </span><span class="identifier">INDENT</span><span class="plain">;</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::third_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">OUTDENT</span><span class="plain">; </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"}\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="identifier">suppress_terminal_semicolon</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_73"></a><b>&#167;4.73. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for while</span> <span class="cwebmacronumber">4.73</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"while ("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">") {\</span><span class="plain">n</span><span class="string">"</span><span class="plain">); </span><span class="identifier">INDENT</span><span class="plain">;</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">OUTDENT</span><span class="plain">; </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"}\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="identifier">suppress_terminal_semicolon</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_74"></a><b>&#167;4.74. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for do</span> <span class="cwebmacronumber">4.74</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"do {"</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"} until (\</span><span class="plain">n</span><span class="string">"</span><span class="plain">); </span><span class="identifier">INDENT</span><span class="plain">;</span>
2019-03-17 14:40:57 +02:00
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">OUTDENT</span><span class="plain">; </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_75"></a><b>&#167;4.75. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for for</span> <span class="cwebmacronumber">4.75</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"for ("</span><span class="plain">);</span>
<span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">INIT</span><span class="plain"> = </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (!((</span><span class="identifier">INIT</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">ID_IFLD</span><span class="plain">] == </span><span class="identifier">VAL_IST</span><span class="plain">) &amp;&amp; (</span><span class="identifier">INIT</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">VAL1_VAL_IFLD</span><span class="plain">] == </span><span class="identifier">LITERAL_IVAL</span><span class="plain">) &amp;&amp; (</span><span class="identifier">INIT</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">VAL2_VAL_IFLD</span><span class="plain">] == 1)))</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
2019-03-17 14:40:57 +02:00
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">":"</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">":"</span><span class="plain">);</span>
<span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">U</span><span class="plain"> = </span><span class="identifier">Inter::third_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">U</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">ID_IFLD</span><span class="plain">] != </span><span class="identifier">VAL_IST</span><span class="plain">)</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">U</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">") {\</span><span class="plain">n</span><span class="string">"</span><span class="plain">); </span><span class="identifier">INDENT</span><span class="plain">;</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::fourth_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">OUTDENT</span><span class="plain">; </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"}\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="identifier">suppress_terminal_semicolon</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_76"></a><b>&#167;4.76. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for objectloop</span> <span class="cwebmacronumber">4.76</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">in_flag</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">U</span><span class="plain"> = </span><span class="identifier">Inter::third_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">U</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">ID_IFLD</span><span class="plain">] == </span><span class="identifier">INV_IST</span><span class="plain">) &amp;&amp; (</span><span class="identifier">U</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">METHOD_INV_IFLD</span><span class="plain">] == </span><span class="identifier">INVOKED_PRIMITIVE</span><span class="plain">)) {</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">prim</span><span class="plain"> = </span><span class="identifier">Inter::Inv::invokee</span><span class="plain">(</span><span class="identifier">U</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">prim</span><span class="plain">) &amp;&amp; (</span><span class="functiontext">Primitives::to_bip</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">prim</span><span class="plain">) == </span><span class="constant">IN_BIP</span><span class="plain">)) </span><span class="identifier">in_flag</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
2019-03-17 14:40:57 +02:00
<span class="plain">}</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"objectloop "</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">in_flag</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" ofclass "</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" &amp;&amp; "</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::third_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">in_flag</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" {\</span><span class="plain">n</span><span class="string">"</span><span class="plain">); </span><span class="identifier">INDENT</span><span class="plain">;</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::fourth_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">OUTDENT</span><span class="plain">; </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"}\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="identifier">suppress_terminal_semicolon</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_77"></a><b>&#167;4.77. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for objectloopx</span> <span class="cwebmacronumber">4.77</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"objectloop ("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" ofclass "</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">") {\</span><span class="plain">n</span><span class="string">"</span><span class="plain">); </span><span class="identifier">INDENT</span><span class="plain">;</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::third_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">OUTDENT</span><span class="plain">; </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"}\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="identifier">suppress_terminal_semicolon</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_78"></a><b>&#167;4.78. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for loop</span> <span class="cwebmacronumber">4.78</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"{\</span><span class="plain">n</span><span class="string">"</span><span class="plain">); </span><span class="identifier">INDENT</span><span class="plain">;</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">OUTDENT</span><span class="plain">; </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"}\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="identifier">suppress_terminal_semicolon</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_79"></a><b>&#167;4.79. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for lookup</span> <span class="cwebmacronumber">4.79</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"--&gt;("</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"))"</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_80"></a><b>&#167;4.80. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for lookupbyte</span> <span class="cwebmacronumber">4.80</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"-&gt;("</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"))"</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_81"></a><b>&#167;4.81. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for lookupref</span> <span class="cwebmacronumber">4.81</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"--&gt;("</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"))"</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_82"></a><b>&#167;4.82. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for switch</span> <span class="cwebmacronumber">4.82</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"switch ("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">") {\</span><span class="plain">n</span><span class="string">"</span><span class="plain">); </span><span class="identifier">INDENT</span><span class="plain">;</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">OUTDENT</span><span class="plain">; </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"}\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="identifier">suppress_terminal_semicolon</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_83"></a><b>&#167;4.83. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for case</span> <span class="cwebmacronumber">4.83</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">":\</span><span class="plain">n</span><span class="string">"</span><span class="plain">); </span><span class="identifier">INDENT</span><span class="plain">;</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">";\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="identifier">OUTDENT</span><span class="plain">;</span>
<span class="identifier">suppress_terminal_semicolon</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_84"></a><b>&#167;4.84. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for default</span> <span class="cwebmacronumber">4.84</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"default:\</span><span class="plain">n</span><span class="string">"</span><span class="plain">); </span><span class="identifier">INDENT</span><span class="plain">;</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">";\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="identifier">OUTDENT</span><span class="plain">;</span>
<span class="identifier">suppress_terminal_semicolon</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_85"></a><b>&#167;4.85. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for indirect0v</span> <span class="cwebmacronumber">4.85</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")()"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_86"></a><b>&#167;4.86. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for indirect1v</span> <span class="cwebmacronumber">4.86</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_87"></a><b>&#167;4.87. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for indirect2v</span> <span class="cwebmacronumber">4.87</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">","</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::third_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_88"></a><b>&#167;4.88. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for indirect3v</span> <span class="cwebmacronumber">4.88</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">","</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::third_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">","</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::fourth_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_89"></a><b>&#167;4.89. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for indirect4v</span> <span class="cwebmacronumber">4.89</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">","</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::third_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">","</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::fourth_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">","</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::fifth_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_90"></a><b>&#167;4.90. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for indirect5v</span> <span class="cwebmacronumber">4.90</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">","</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::third_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">","</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::fourth_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">","</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::fifth_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">","</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::sixth_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_91"></a><b>&#167;4.91. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for indirect0</span> <span class="cwebmacronumber">4.91</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")()"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_92"></a><b>&#167;4.92. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for indirect1</span> <span class="cwebmacronumber">4.92</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_93"></a><b>&#167;4.93. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for indirect2</span> <span class="cwebmacronumber">4.93</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">","</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::third_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_94"></a><b>&#167;4.94. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for indirect3</span> <span class="cwebmacronumber">4.94</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">","</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::third_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">","</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::fourth_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_95"></a><b>&#167;4.95. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for indirect4</span> <span class="cwebmacronumber">4.95</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">","</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::third_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">","</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::fourth_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">","</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::fifth_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_96"></a><b>&#167;4.96. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for indirect5</span> <span class="cwebmacronumber">4.96</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">","</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::third_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">","</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::fourth_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">","</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::fifth_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">","</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::sixth_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_97"></a><b>&#167;4.97. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for message0</span> <span class="cwebmacronumber">4.97</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"."</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"())"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_98"></a><b>&#167;4.98. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for message1</span> <span class="cwebmacronumber">4.98</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"."</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::third_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"))"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_99"></a><b>&#167;4.99. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for message2</span> <span class="cwebmacronumber">4.99</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"."</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::third_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">","</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::fourth_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"))"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_100"></a><b>&#167;4.100. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for message3</span> <span class="cwebmacronumber">4.100</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"."</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::third_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">","</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::fourth_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">","</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::fifth_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"))"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_101"></a><b>&#167;4.101. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for callmessage0</span> <span class="cwebmacronumber">4.101</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">".call())"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_102"></a><b>&#167;4.102. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for callmessage1</span> <span class="cwebmacronumber">4.102</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">".call("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"))"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_103"></a><b>&#167;4.103. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for callmessage2</span> <span class="cwebmacronumber">4.103</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">".call("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">","</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::third_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"))"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_104"></a><b>&#167;4.104. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for callmessage3</span> <span class="cwebmacronumber">4.104</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">".call("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">","</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::third_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">","</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::fourth_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"))"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_105"></a><b>&#167;4.105. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for propertyaddress</span> <span class="cwebmacronumber">4.105</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">".&amp; "</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_106"></a><b>&#167;4.106. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for propertylength</span> <span class="cwebmacronumber">4.106</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">".# "</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_107"></a><b>&#167;4.107. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for provides</span> <span class="cwebmacronumber">4.107</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" provides "</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_108"></a><b>&#167;4.108. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for propertyvalue</span> <span class="cwebmacronumber">4.108</span>&gt; =
2019-03-17 14:40:57 +02:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"("</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"."</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-03-17 14:40:57 +02:00
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_109"></a><b>&#167;4.109. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for read</span> <span class="cwebmacronumber">4.109</span>&gt; =
2019-05-06 03:56:40 +03:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"read "</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" "</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
2019-05-07 00:32:11 +03:00
<p class="inwebparagraph"><a id="SP4_110"></a><b>&#167;4.110. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for inversion</span> <span class="cwebmacronumber">4.110</span>&gt; =
2019-05-06 14:20:08 +03:00
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"inversion"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
<p class="inwebparagraph"><a id="SP5"></a><b>&#167;5. </b></p>
2019-03-17 14:40:57 +02:00
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::compare_tlh</span><span class="plain">(</span><span class="reserved">const</span><span class="plain"> </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">elem1</span><span class="plain">, </span><span class="reserved">const</span><span class="plain"> </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">elem2</span><span class="plain">) {</span>
<span class="reserved">const</span><span class="plain"> </span><span class="reserved">text_literal_holder</span><span class="plain"> **</span><span class="identifier">e1</span><span class="plain"> = (</span><span class="reserved">const</span><span class="plain"> </span><span class="reserved">text_literal_holder</span><span class="plain"> **) </span><span class="identifier">elem1</span><span class="plain">;</span>
<span class="reserved">const</span><span class="plain"> </span><span class="reserved">text_literal_holder</span><span class="plain"> **</span><span class="identifier">e2</span><span class="plain"> = (</span><span class="reserved">const</span><span class="plain"> </span><span class="reserved">text_literal_holder</span><span class="plain"> **) </span><span class="identifier">elem2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((*</span><span class="identifier">e1</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (*</span><span class="identifier">e2</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">))</span>
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"Disaster while sorting text literals"</span><span class="plain">);</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">s1</span><span class="plain"> = (*</span><span class="identifier">e1</span><span class="plain">)-</span><span class="element">&gt;literal_content</span><span class="plain">;</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">s2</span><span class="plain"> = (*</span><span class="identifier">e2</span><span class="plain">)-</span><span class="element">&gt;literal_content</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Str::cmp</span><span class="plain">(</span><span class="identifier">s1</span><span class="plain">, </span><span class="identifier">s2</span><span class="plain">);</span>
<span class="plain">}</span>
2019-03-17 14:40:57 +02:00
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::compare_kind_symbols</span><span class="plain">(</span><span class="reserved">const</span><span class="plain"> </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">elem1</span><span class="plain">, </span><span class="reserved">const</span><span class="plain"> </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">elem2</span><span class="plain">) {</span>
<span class="reserved">const</span><span class="plain"> </span><span class="identifier">inter_symbol</span><span class="plain"> **</span><span class="identifier">e1</span><span class="plain"> = (</span><span class="reserved">const</span><span class="plain"> </span><span class="identifier">inter_symbol</span><span class="plain"> **) </span><span class="identifier">elem1</span><span class="plain">;</span>
<span class="reserved">const</span><span class="plain"> </span><span class="identifier">inter_symbol</span><span class="plain"> **</span><span class="identifier">e2</span><span class="plain"> = (</span><span class="reserved">const</span><span class="plain"> </span><span class="identifier">inter_symbol</span><span class="plain"> **) </span><span class="identifier">elem2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((*</span><span class="identifier">e1</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (*</span><span class="identifier">e2</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">))</span>
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"Disaster while sorting kinds"</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">s1</span><span class="plain"> = </span><span class="functiontext">CodeGen::kind_sequence_number</span><span class="plain">(*</span><span class="identifier">e1</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">s2</span><span class="plain"> = </span><span class="functiontext">CodeGen::kind_sequence_number</span><span class="plain">(*</span><span class="identifier">e2</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">s1</span><span class="plain"> != </span><span class="identifier">s2</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">s1</span><span class="plain">-</span><span class="identifier">s2</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> (*</span><span class="identifier">e1</span><span class="plain">)-&gt;</span><span class="identifier">allocation_id</span><span class="plain"> - (*</span><span class="identifier">e2</span><span class="plain">)-&gt;</span><span class="identifier">allocation_id</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::compare_kind_symbols_decl</span><span class="plain">(</span><span class="reserved">const</span><span class="plain"> </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">elem1</span><span class="plain">, </span><span class="reserved">const</span><span class="plain"> </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">elem2</span><span class="plain">) {</span>
<span class="reserved">const</span><span class="plain"> </span><span class="identifier">inter_symbol</span><span class="plain"> **</span><span class="identifier">e1</span><span class="plain"> = (</span><span class="reserved">const</span><span class="plain"> </span><span class="identifier">inter_symbol</span><span class="plain"> **) </span><span class="identifier">elem1</span><span class="plain">;</span>
<span class="reserved">const</span><span class="plain"> </span><span class="identifier">inter_symbol</span><span class="plain"> **</span><span class="identifier">e2</span><span class="plain"> = (</span><span class="reserved">const</span><span class="plain"> </span><span class="identifier">inter_symbol</span><span class="plain"> **) </span><span class="identifier">elem2</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((*</span><span class="identifier">e1</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (*</span><span class="identifier">e2</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">))</span>
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"Disaster while sorting kinds"</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">s1</span><span class="plain"> = </span><span class="functiontext">CodeGen::kind_sequence_number_decl</span><span class="plain">(*</span><span class="identifier">e1</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">s2</span><span class="plain"> = </span><span class="functiontext">CodeGen::kind_sequence_number_decl</span><span class="plain">(*</span><span class="identifier">e2</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">s1</span><span class="plain"> != </span><span class="identifier">s2</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">s1</span><span class="plain">-</span><span class="identifier">s2</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> (*</span><span class="identifier">e1</span><span class="plain">)-&gt;</span><span class="identifier">allocation_id</span><span class="plain"> - (*</span><span class="identifier">e2</span><span class="plain">)-&gt;</span><span class="identifier">allocation_id</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::kind_sequence_number</span><span class="plain">(</span><span class="reserved">const</span><span class="plain"> </span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">kind_name</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">A</span><span class="plain"> = 100000000;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">kind_name</span><span class="plain">-&gt;</span><span class="identifier">no_symbol_annotations</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">kind_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_annotations</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">].</span><span class="identifier">annot</span><span class="plain">-&gt;</span><span class="identifier">annotation_ID</span><span class="plain"> == </span><span class="identifier">SOURCE_ORDER_IANN</span><span class="plain">)</span>
<span class="identifier">A</span><span class="plain"> = (</span><span class="reserved">int</span><span class="plain">) </span><span class="identifier">kind_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_annotations</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">].</span><span class="identifier">annot_value</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">A</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::kind_sequence_number_decl</span><span class="plain">(</span><span class="reserved">const</span><span class="plain"> </span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">kind_name</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">A</span><span class="plain"> = 100000000;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">kind_name</span><span class="plain">-&gt;</span><span class="identifier">no_symbol_annotations</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">kind_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_annotations</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">].</span><span class="identifier">annot</span><span class="plain">-&gt;</span><span class="identifier">annotation_ID</span><span class="plain"> == </span><span class="identifier">DECLARATION_ORDER_IANN</span><span class="plain">)</span>
<span class="identifier">A</span><span class="plain"> = (</span><span class="reserved">int</span><span class="plain">) </span><span class="identifier">kind_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_annotations</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">].</span><span class="identifier">annot_value</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">A</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::weak_id</span><span class="plain">(</span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">kind_name</span><span class="plain">) {</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">kind_name</span><span class="plain">-&gt;</span><span class="identifier">no_symbol_annotations</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">kind_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_annotations</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">].</span><span class="identifier">annot</span><span class="plain">-&gt;</span><span class="identifier">annotation_ID</span><span class="plain"> == </span><span class="identifier">WEAK_ID_IANN</span><span class="plain">)</span>
<span class="reserved">return</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain">) </span><span class="identifier">kind_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_annotations</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">].</span><span class="identifier">annot_value</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> 0;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::pnum</span><span class="plain">(</span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">prop_name</span><span class="plain">) {</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">prop_name</span><span class="plain">-&gt;</span><span class="identifier">no_symbol_annotations</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">prop_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_annotations</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">].</span><span class="identifier">annot</span><span class="plain">-&gt;</span><span class="identifier">annotation_ID</span><span class="plain"> == </span><span class="identifier">SOURCE_ORDER_IANN</span><span class="plain">)</span>
<span class="reserved">return</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain">) </span><span class="identifier">prop_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_annotations</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">].</span><span class="identifier">annot_value</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> 0;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::marked</span><span class="plain">(</span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">symb_name</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Inter::Symbols::get_flag</span><span class="plain">(</span><span class="identifier">symb_name</span><span class="plain">, </span><span class="identifier">TRAVERSE_MARK_BIT</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::mark</span><span class="plain">(</span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">symb_name</span><span class="plain">) {</span>
<span class="identifier">Inter::Symbols::set_flag</span><span class="plain">(</span><span class="identifier">symb_name</span><span class="plain">, </span><span class="identifier">TRAVERSE_MARK_BIT</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::unmark</span><span class="plain">(</span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">symb_name</span><span class="plain">) {</span>
<span class="identifier">Inter::Symbols::clear_flag</span><span class="plain">(</span><span class="identifier">symb_name</span><span class="plain">, </span><span class="identifier">TRAVERSE_MARK_BIT</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function CodeGen::compare_tlh is used in <a href="#SP1">&#167;1</a>.</p>
<p class="endnote">The function CodeGen::compare_kind_symbols is used in 4/iap (<a href="4-iap.html#SP4_1">&#167;4.1</a>, <a href="4-iap.html#SP4_2">&#167;4.2</a>).</p>
2019-03-17 14:40:57 +02:00
<p class="endnote">The function CodeGen::compare_kind_symbols_decl is used in 4/iap (<a href="4-iap.html#SP4_3">&#167;4.3</a>, <a href="4-iap.html#SP4_4">&#167;4.4</a>).</p>
2019-03-17 14:40:57 +02:00
<p class="endnote">The function CodeGen::kind_sequence_number appears nowhere else.</p>
<p class="endnote">The function CodeGen::kind_sequence_number_decl appears nowhere else.</p>
<p class="endnote">The function CodeGen::weak_id is used in 4/iap (<a href="4-iap.html#SP4_8">&#167;4.8</a>, <a href="4-iap.html#SP4_8_3">&#167;4.8.3</a>).</p>
2019-03-17 14:40:57 +02:00
<p class="endnote">The function CodeGen::pnum is used in 4/iap (<a href="4-iap.html#SP4_8_4_1">&#167;4.8.4.1</a>).</p>
2019-03-17 14:40:57 +02:00
<p class="endnote">The function CodeGen::marked is used in 2/inv (<a href="2-inv.html#SP1">&#167;1</a>), 4/iap (<a href="4-iap.html#SP4_8_4">&#167;4.8.4</a>).</p>
2019-03-17 14:40:57 +02:00
<p class="endnote">The function CodeGen::mark is used in 2/inv (<a href="2-inv.html#SP1">&#167;1</a>), 4/iap (<a href="4-iap.html#SP4_8_4">&#167;4.8.4</a>).</p>
2019-03-17 14:40:57 +02:00
<p class="endnote">The function CodeGen::unmark is used in 2/inv (<a href="2-inv.html#SP1">&#167;1</a>), 4/iap (<a href="4-iap.html#SP4_8">&#167;4.8</a>).</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP6"></a><b>&#167;6. </b></p>
2019-03-17 14:40:57 +02:00
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::is_kind_of_object</span><span class="plain">(</span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">kind_name</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">kind_name</span><span class="plain"> == </span><span class="identifier">object_kind_symbol</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="identifier">inter_data_type</span><span class="plain"> *</span><span class="identifier">idt</span><span class="plain"> = </span><span class="identifier">Inter::Kind::data_type</span><span class="plain">(</span><span class="identifier">kind_name</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">idt</span><span class="plain"> == </span><span class="identifier">unchecked_idt</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Kind::is_a</span><span class="plain">(</span><span class="identifier">kind_name</span><span class="plain">, </span><span class="identifier">object_kind_symbol</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function CodeGen::is_kind_of_object is used in 4/iap (<a href="4-iap.html#SP3_1">&#167;3.1</a>, <a href="4-iap.html#SP4_6">&#167;4.6</a>, <a href="4-iap.html#SP4_7">&#167;4.7</a>, <a href="4-iap.html#SP4_8_2">&#167;4.8.2</a>, <a href="4-iap.html#SP4_9">&#167;4.9</a>, <a href="4-iap.html#SP4_11_2_1">&#167;4.11.2.1</a>).</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP7"></a><b>&#167;7. </b>Counting kinds of object, not very quickly:
2019-03-17 14:40:57 +02:00
</p>
<pre class="display">
<span class="identifier">inter_t</span><span class="plain"> </span><span class="functiontext">CodeGen::kind_of_object_count</span><span class="plain">(</span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">kind_name</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">kind_name</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (</span><span class="identifier">kind_name</span><span class="plain"> == </span><span class="identifier">object_kind_symbol</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> 0;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">kind_name</span><span class="plain">-&gt;</span><span class="identifier">no_symbol_annotations</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">kind_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_annotations</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">].</span><span class="identifier">annot</span><span class="plain">-&gt;</span><span class="identifier">annotation_ID</span><span class="plain"> == </span><span class="identifier">OBJECT_KIND_COUNTER_IANN</span><span class="plain">)</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">kind_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_annotations</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">].</span><span class="identifier">annot_value</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> 0;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::append</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">symb</span><span class="plain">) {</span>
2019-03-17 14:40:57 +02:00
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain"> = </span><span class="identifier">Inter::Symbols::get_append</span><span class="plain">(</span><span class="identifier">symb</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">) == 0) </span><span class="reserved">return</span><span class="plain">;</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" "</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">Str::len</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">);</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">L</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) {</span>
<span class="identifier">wchar_t</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> = </span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">S</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">c</span><span class="plain"> == </span><span class="constant">URL_SYMBOL_CHAR</span><span class="plain">) {</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">);</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain">++; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">L</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) {</span>
<span class="identifier">wchar_t</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> = </span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">S</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">c</span><span class="plain"> == </span><span class="constant">URL_SYMBOL_CHAR</span><span class="plain">) </span><span class="reserved">break</span><span class="plain">;</span>
<span class="identifier">PUT_TO</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">c</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">symb</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::url_name_to_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">T</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="functiontext">CodeGen::name</span><span class="plain">(</span><span class="identifier">symb</span><span class="plain">));</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="identifier">PUT</span><span class="plain">(</span><span class="identifier">c</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">'\</span><span class="plain">n</span><span class="character">'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">i</span><span class="plain"> != </span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">)-1)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" "</span><span class="plain">);</span>
2019-03-17 14:40:57 +02:00
<span class="plain">}</span>
<span class="plain">}</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="functiontext">CodeGen::name</span><span class="plain">(</span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">symb</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">symb</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">NULL</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::get_translate</span><span class="plain">(</span><span class="identifier">symb</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">Inter::Symbols::get_translate</span><span class="plain">(</span><span class="identifier">symb</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">symb</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function CodeGen::kind_of_object_count is used in 4/iap (<a href="4-iap.html#SP4_7">&#167;4.7</a>).</p>
2019-03-17 14:40:57 +02:00
<p class="endnote">The function CodeGen::append is used in 4/iap (<a href="4-iap.html#SP4_9">&#167;4.9</a>, <a href="4-iap.html#SP6">&#167;6</a>).</p>
2019-03-17 14:40:57 +02:00
<p class="endnote">The function CodeGen::name is used in <a href="#SP1">&#167;1</a>, <a href="#SP3">&#167;3</a>, <a href="#SP4">&#167;4</a>, 4/iap (<a href="4-iap.html#SP3_5">&#167;3.5</a>, <a href="4-iap.html#SP3_6">&#167;3.6</a>, <a href="4-iap.html#SP4_5">&#167;4.5</a>, <a href="4-iap.html#SP4_7">&#167;4.7</a>, <a href="4-iap.html#SP4_8_4">&#167;4.8.4</a>, <a href="4-iap.html#SP4_9">&#167;4.9</a>, <a href="4-iap.html#SP4_11">&#167;4.11</a>, <a href="4-iap.html#SP4_11_2">&#167;4.11.2</a>, <a href="4-iap.html#SP4_11_2_1">&#167;4.11.2.1</a>, <a href="4-iap.html#SP4_11_2_2">&#167;4.11.2.2</a>, <a href="4-iap.html#SP4_12">&#167;4.12</a>, <a href="4-iap.html#SP5">&#167;5</a>, <a href="4-iap.html#SP6">&#167;6</a>), 4/vrb (<a href="4-vrb.html#SP1">&#167;1</a>).</p>
2019-03-17 14:40:57 +02:00
<p class="inwebparagraph"><a id="SP8"></a><b>&#167;8. </b></p>
2019-03-17 14:40:57 +02:00
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::compile_to_I6_dictionary</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">pluralise</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">n</span><span class="plain"> = 0;</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"'"</span><span class="plain">);</span>
<span class="identifier">LOOP_THROUGH_TEXT</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">) {</span>
<span class="identifier">wchar_t</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> = </span><span class="identifier">Str::get</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">);</span>
<span class="reserved">switch</span><span class="plain">(</span><span class="identifier">c</span><span class="plain">) {</span>
<span class="reserved">case</span><span class="plain"> </span><span class="character">'/'</span><span class="plain">: </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">) == 1) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"@{2F}"</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">"/"</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="character">'\</span><span class="plain">'</span><span class="character">'</span><span class="plain">: </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"^"</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="character">'^'</span><span class="plain">: </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"@{5E}"</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="character">'~'</span><span class="plain">: </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"@{7E}"</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="character">'@'</span><span class="plain">: </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"@{40}"</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">default</span><span class="plain">: </span><span class="identifier">PUT</span><span class="plain">(</span><span class="identifier">c</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">++ &gt; 32) </span><span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pluralise</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"//p"</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">Str::len</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">) == 1) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"//"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"'"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">box_mode</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">printing_mode</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::enter_box_mode</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="identifier">box_mode</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::exit_box_mode</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="identifier">box_mode</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">CodeGen::enter_print_mode</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="identifier">printing_mode</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::exit_print_mode</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="identifier">printing_mode</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">CodeGen::compile_to_I6_text</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\</span><span class="plain">"</span><span class="string">"</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">esc_char</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="identifier">LOOP_THROUGH_TEXT</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">) {</span>
<span class="identifier">wchar_t</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> = </span><span class="identifier">Str::get</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">box_mode</span><span class="plain">) {</span>
<span class="reserved">switch</span><span class="plain">(</span><span class="identifier">c</span><span class="plain">) {</span>
<span class="reserved">case</span><span class="plain"> </span><span class="character">'@'</span><span class="plain">: </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"@{40}"</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="character">'"'</span><span class="plain">: </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"~"</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="character">'^'</span><span class="plain">: </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"@{5E}"</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="character">'~'</span><span class="plain">: </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"@{7E}"</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="character">'\</span><span class="plain">\</span><span class="character">'</span><span class="plain">: </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"@{5C}"</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="character">'\</span><span class="plain">t</span><span class="character">'</span><span class="plain">: </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" "</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="character">'\</span><span class="plain">n</span><span class="character">'</span><span class="plain">: </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\</span><span class="plain">"</span><span class="string">\</span><span class="plain">n</span><span class="string">\</span><span class="plain">"</span><span class="string">"</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">NEWLINE_IN_STRING</span><span class="plain">: </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\</span><span class="plain">"</span><span class="string">\</span><span class="plain">n</span><span class="string">\</span><span class="plain">"</span><span class="string">"</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">default</span><span class="plain">: </span><span class="identifier">PUT</span><span class="plain">(</span><span class="identifier">c</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="reserved">switch</span><span class="plain">(</span><span class="identifier">c</span><span class="plain">) {</span>
<span class="reserved">case</span><span class="plain"> </span><span class="character">'@'</span><span class="plain">:</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">printing_mode</span><span class="plain">) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"@@64"</span><span class="plain">); </span><span class="identifier">esc_char</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">; </span><span class="reserved">continue</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"@{40}"</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="character">'"'</span><span class="plain">: </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"~"</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="character">'^'</span><span class="plain">:</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">printing_mode</span><span class="plain">) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"@@94"</span><span class="plain">); </span><span class="identifier">esc_char</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">; </span><span class="reserved">continue</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"@{5E}"</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="character">'~'</span><span class="plain">:</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">printing_mode</span><span class="plain">) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"@@126"</span><span class="plain">); </span><span class="identifier">esc_char</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">; </span><span class="reserved">continue</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"@{7E}"</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="character">'\</span><span class="plain">\</span><span class="character">'</span><span class="plain">: </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"@{5C}"</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="character">'\</span><span class="plain">t</span><span class="character">'</span><span class="plain">: </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" "</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="character">'\</span><span class="plain">n</span><span class="character">'</span><span class="plain">: </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"^"</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">NEWLINE_IN_STRING</span><span class="plain">: </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"^"</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">default</span><span class="plain">: {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">esc_char</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"@{%02x}"</span><span class="plain">, </span><span class="identifier">c</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">PUT</span><span class="plain">(</span><span class="identifier">c</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="identifier">esc_char</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\</span><span class="plain">"</span><span class="string">"</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function CodeGen::compile_to_I6_dictionary is used in <a href="#SP3">&#167;3</a>.</p>
2019-05-07 00:32:11 +03:00
<p class="endnote">The function CodeGen::enter_box_mode is used in <a href="#SP4_59">&#167;4.59</a>.</p>
2019-03-17 14:40:57 +02:00
2019-05-07 00:32:11 +03:00
<p class="endnote">The function CodeGen::exit_box_mode is used in <a href="#SP4_59">&#167;4.59</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="endnote">The function CodeGen::enter_print_mode is used in <a href="#SP4_45">&#167;4.45</a>, <a href="#SP4_46">&#167;4.46</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="endnote">The function CodeGen::exit_print_mode is used in <a href="#SP4_45">&#167;4.45</a>, <a href="#SP4_46">&#167;4.46</a>.</p>
2019-03-17 14:40:57 +02:00
<p class="endnote">The function CodeGen::compile_to_I6_text is used in <a href="#SP3">&#167;3</a>.</p>
<hr class="tocbar">
<ul class="toc"><li><i>(This section begins Chapter 4: Inter to Inform 6.)</i></li><li><a href="4-iap.html">Continue with 'Instances and Properties'</a></li></ul><hr class="tocbar">
2019-04-22 17:42:10 +03:00
<!--End of weave-->
2019-03-17 14:40:57 +02:00
</body>
</html>