2019-06-27 01:50:30 +03:00
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
< html >
< head >
2020-04-14 19:56:54 +03:00
< title > Generating Inform 6< / title >
2020-05-03 03:20:55 +03:00
< link href = "../docs-assets/Breadcrumbs.css" rel = "stylesheet" rev = "stylesheet" type = "text/css" >
2020-03-19 02:11:25 +02:00
< meta name = "viewport" content = "width=device-width initial-scale=1" >
2019-06-27 01:50:30 +03:00
< meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" >
< meta http-equiv = "Content-Language" content = "en-gb" >
2020-05-03 03:01:21 +03:00
2020-05-03 03:20:55 +03:00
< link href = "../docs-assets/Contents.css" rel = "stylesheet" rev = "stylesheet" type = "text/css" >
< link href = "../docs-assets/Progress.css" rel = "stylesheet" rev = "stylesheet" type = "text/css" >
< link href = "../docs-assets/Navigation.css" rel = "stylesheet" rev = "stylesheet" type = "text/css" >
< link href = "../docs-assets/Fonts.css" rel = "stylesheet" rev = "stylesheet" type = "text/css" >
< link href = "../docs-assets/Base.css" rel = "stylesheet" rev = "stylesheet" type = "text/css" >
2020-05-03 03:01:21 +03:00
< script >
function togglePopup(material_id) {
var popup = document.getElementById(material_id);
popup.classList.toggle("show");
}
< / script >
2020-05-03 03:20:55 +03:00
< link href = "../docs-assets/Popups.css" rel = "stylesheet" rev = "stylesheet" type = "text/css" >
< link href = "../docs-assets/Colours.css" rel = "stylesheet" rev = "stylesheet" type = "text/css" >
2020-04-14 19:56:54 +03:00
2019-06-27 01:50:30 +03:00
< / head >
2020-05-03 03:01:21 +03:00
< body class = "commentary-font" >
2020-03-19 02:11:25 +02:00
< nav role = "navigation" >
2022-04-25 18:44:43 +03:00
< h1 > < a href = "../overview.html" >
2020-05-03 18:34:53 +03:00
< img src = "../docs-assets/Inform.png" height = 72" >
2020-04-14 19:56:54 +03:00
< / a > < / h1 >
2022-04-25 18:44:43 +03:00
< ul > < li > < a href = "../overview.html" > home< / a > < / li >
2022-04-04 20:31:44 +03:00
< / ul > < h2 > Compiler< / h2 > < ul >
< li > < a href = "../structure.html" > structure< / a > < / li >
< li > < a href = "../inbuildn.html" > inbuild< / a > < / li >
< li > < a href = "../inform7n.html" > inform7< / a > < / li >
< li > < a href = "../intern.html" > inter< / a > < / li >
< li > < a href = "../services.html" > services< / a > < / li >
2022-04-18 17:46:46 +03:00
< li > < a href = "../secrets.html" > secrets< / a > < / li >
2022-04-04 20:31:44 +03:00
< / ul > < h2 > Other Tools< / h2 > < ul >
< li > < a href = "../inblorbn.html" > inblorb< / a > < / li >
< li > < a href = "../indocn.html" > indoc< / a > < / li >
< li > < a href = "../inform6.html" > inform6< / a > < / li >
< li > < a href = "../inpolicyn.html" > inpolicy< / a > < / li >
< li > < a href = "../inrtpsn.html" > inrtps< / a > < / li >
2022-04-09 12:16:11 +03:00
< / ul > < h2 > Resources< / h2 > < ul >
< li > < a href = "../extensions.html" > extensions< / a > < / li >
< li > < a href = "../kits.html" > kits< / a > < / li >
2022-04-04 20:31:44 +03:00
< / ul > < h2 > Repository< / h2 > < ul >
< li > < a href = "https://github.com/ganelson/inform" > < img src = "../docs-assets/github.png" height = 18 > github< / a > < / li >
< / ul > < h2 > Related Projects< / h2 > < ul >
2022-04-28 19:20:06 +03:00
< li > < a href = "../../../inweb/index.html" > inweb< / a > < / li >
< li > < a href = "../../../intest/index.html" > intest< / a > < / li >
2020-03-19 02:11:25 +02:00
2020-04-14 19:56:54 +03:00
< / ul >
2020-03-19 02:11:25 +02:00
< / nav >
< main role = "main" >
2020-05-03 03:01:21 +03:00
<!-- Weave of 'Generating Inform 6' generated by Inweb -->
< div class = "breadcrumbs" >
2022-04-25 18:44:43 +03:00
< ul class = "crumbs" > < li > < a href = "../overview.html" > Home< / a > < / li > < li > < a href = "../intern.html" > Inter Modules< / a > < / li > < li > < a href = "index.html" > final< / a > < / li > < li > < a href = "index.html#4" > Chapter 4: Inform 6< / a > < / li > < li > < b > Generating Inform 6< / b > < / li > < / ul > < / div >
2020-05-03 03:01:21 +03:00
< p class = "purpose" > To generate I6 code from intermediate code.< / p >
2019-06-27 01:50:30 +03:00
2021-10-11 03:11:20 +03:00
< ul class = "toc" > < li > < a href = "4-fi6.html#SP1" > § 1. Target< / a > < / li > < / ul > < hr class = "tocbar" >
2019-06-27 01:50:30 +03:00
2021-10-11 03:11:20 +03:00
< p class = "commentary firstcommentary" > < a id = "SP1" class = "paragraph-anchor" > < / a > < b > § 1. Target. < / b > This generator produces Inform 6 source code, using the Vanilla algorithm.
< / p >
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > I6Target::create_generator< / span > < button class = "popup" onclick = "togglePopup('usagePopup1')" > < span class = "comment-syntax" > ?< / span > < span class = "popuptext" id = "usagePopup1" > Usage of < span class = "code-font" > < span class = "function-syntax" > I6Target::create_generator< / span > < / span > :< br / > Code Generators - < a href = "2-cg2.html#SP3" > § 3< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > ) {< / span >
2021-11-12 01:32:10 +02:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > code_generator< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > inform6_generator< / span > < span class = "plain-syntax" > = < / span > < a href = "2-cg2.html#SP1" class = "function-link" > < span class = "function-syntax" > Generators::new< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > I< / span > < span class = "string-syntax" > "inform6"< / span > < span class = "plain-syntax" > );< / span >
2021-10-24 01:54:35 +03:00
2021-11-12 01:32:10 +02:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > METHOD_ADD< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > inform6_generator< / span > < span class = "plain-syntax" > , < / span > < span class = "constant-syntax" > BEGIN_GENERATION_MTID< / span > < span class = "plain-syntax" > , < / span > < a href = "4-fi6.html#SP4" class = "function-link" > < span class = "function-syntax" > I6Target::begin_generation< / span > < / a > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > METHOD_ADD< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > inform6_generator< / span > < span class = "plain-syntax" > , < / span > < span class = "constant-syntax" > MANGLE_IDENTIFIER_MTID< / span > < span class = "plain-syntax" > , < / span > < a href = "4-fi6.html#SP6" class = "function-link" > < span class = "function-syntax" > I6Target::mangle< / span > < / a > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > METHOD_ADD< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > inform6_generator< / span > < span class = "plain-syntax" > , < / span > < span class = "constant-syntax" > OFFER_PRAGMA_MTID< / span > < span class = "plain-syntax" > , < / span > < a href = "4-fi6.html#SP5" class = "function-link" > < span class = "function-syntax" > I6Target::offer_pragma< / span > < / a > < span class = "plain-syntax" > )< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > METHOD_ADD< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > inform6_generator< / span > < span class = "plain-syntax" > , < / span > < span class = "constant-syntax" > END_GENERATION_MTID< / span > < span class = "plain-syntax" > , < / span > < a href = "4-fi6.html#SP7" class = "function-link" > < span class = "function-syntax" > I6Target::end_generation< / span > < / a > < span class = "plain-syntax" > );< / span >
2021-10-24 01:54:35 +03:00
2021-11-12 01:32:10 +02:00
< span class = "plain-syntax" > < / span > < a href = "4-i6c2.html#SP1" class = "function-link" > < span class = "function-syntax" > I6TargetCode::create_generator< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > inform6_generator< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < a href = "4-i6o.html#SP1" class = "function-link" > < span class = "function-syntax" > I6TargetObjects::create_generator< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > inform6_generator< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < a href = "4-i6c.html#SP1" class = "function-link" > < span class = "function-syntax" > I6TargetConstants::create_generator< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > inform6_generator< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < a href = "4-i6gv.html#SP1" class = "function-link" > < span class = "function-syntax" > I6TargetVariables::create_generator< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > inform6_generator< / span > < span class = "plain-syntax" > );< / span >
2021-10-11 03:11:20 +03:00
< span class = "plain-syntax" > }< / span >
< / pre >
< p class = "commentary firstcommentary" > < a id = "SP2" class = "paragraph-anchor" > < / a > < b > § 2. < / b > We will write a single output file of I6 source code, but segmented as follows:
< / p >
2020-05-03 03:01:21 +03:00
2021-10-11 03:11:20 +03:00
< pre class = "definitions code-font" > < span class = "definition-keyword" > enum< / span > < span class = "constant-syntax" > ICL_directives_I7CGS< / span >
2020-05-03 03:01:21 +03:00
< span class = "definition-keyword" > enum< / span > < span class = "constant-syntax" > compiler_versioning_matter_I7CGS< / span >
2021-10-14 01:11:42 +03:00
< span class = "definition-keyword" > enum< / span > < span class = "constant-syntax" > attributes_I7CGS< / span >
< span class = "definition-keyword" > enum< / span > < span class = "constant-syntax" > properties_I7CGS< / span >
< span class = "definition-keyword" > enum< / span > < span class = "constant-syntax" > global_variables_I7CGS< / span >
< span class = "definition-keyword" > enum< / span > < span class = "constant-syntax" > global_variables_array_I7CGS< / span >
2021-10-11 03:11:20 +03:00
< span class = "definition-keyword" > enum< / span > < span class = "constant-syntax" > constants_I7CGS< / span >
< span class = "definition-keyword" > enum< / span > < span class = "constant-syntax" > fake_actions_I7CGS< / span >
< span class = "definition-keyword" > enum< / span > < span class = "constant-syntax" > arrays_I7CGS< / span >
2021-10-14 01:11:42 +03:00
< span class = "definition-keyword" > enum< / span > < span class = "constant-syntax" > classes_I7CGS< / span >
< span class = "definition-keyword" > enum< / span > < span class = "constant-syntax" > objects_I7CGS< / span >
2021-10-11 03:11:20 +03:00
< span class = "definition-keyword" > enum< / span > < span class = "constant-syntax" > property_stubs_I7CGS< / span >
2021-10-14 01:11:42 +03:00
< span class = "definition-keyword" > enum< / span > < span class = "constant-syntax" > functions_I7CGS< / span >
< span class = "definition-keyword" > enum< / span > < span class = "constant-syntax" > command_grammar_I7CGS< / span >
2019-06-27 01:50:30 +03:00
< / pre >
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
2021-08-12 01:49:36 +03:00
< span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > I6_target_segments< / span > < span class = "plain-syntax" > [] = {< / span >
2021-10-11 03:11:20 +03:00
< span class = "plain-syntax" > < / span > < span class = "constant-syntax" > ICL_directives_I7CGS< / span > < span class = "plain-syntax" > ,< / span >
2021-08-12 01:49:36 +03:00
< span class = "plain-syntax" > < / span > < span class = "constant-syntax" > compiler_versioning_matter_I7CGS< / span > < span class = "plain-syntax" > ,< / span >
2021-10-14 01:11:42 +03:00
< span class = "plain-syntax" > < / span > < span class = "constant-syntax" > attributes_I7CGS< / span > < span class = "plain-syntax" > ,< / span >
< span class = "plain-syntax" > < / span > < span class = "constant-syntax" > properties_I7CGS< / span > < span class = "plain-syntax" > ,< / span >
< span class = "plain-syntax" > < / span > < span class = "constant-syntax" > global_variables_I7CGS< / span > < span class = "plain-syntax" > ,< / span >
< span class = "plain-syntax" > < / span > < span class = "constant-syntax" > global_variables_array_I7CGS< / span > < span class = "plain-syntax" > ,< / span >
2021-10-11 03:11:20 +03:00
< span class = "plain-syntax" > < / span > < span class = "constant-syntax" > constants_I7CGS< / span > < span class = "plain-syntax" > ,< / span >
< span class = "plain-syntax" > < / span > < span class = "constant-syntax" > fake_actions_I7CGS< / span > < span class = "plain-syntax" > ,< / span >
< span class = "plain-syntax" > < / span > < span class = "constant-syntax" > arrays_I7CGS< / span > < span class = "plain-syntax" > ,< / span >
2021-10-14 01:11:42 +03:00
< span class = "plain-syntax" > < / span > < span class = "constant-syntax" > classes_I7CGS< / span > < span class = "plain-syntax" > ,< / span >
< span class = "plain-syntax" > < / span > < span class = "constant-syntax" > objects_I7CGS< / span > < span class = "plain-syntax" > ,< / span >
2021-10-11 03:11:20 +03:00
< span class = "plain-syntax" > < / span > < span class = "constant-syntax" > property_stubs_I7CGS< / span > < span class = "plain-syntax" > ,< / span >
2021-10-14 01:11:42 +03:00
< span class = "plain-syntax" > < / span > < span class = "constant-syntax" > functions_I7CGS< / span > < span class = "plain-syntax" > ,< / span >
< span class = "plain-syntax" > < / span > < span class = "constant-syntax" > command_grammar_I7CGS< / span > < span class = "plain-syntax" > ,< / span >
2021-08-12 01:49:36 +03:00
< span class = "plain-syntax" > -1< / span >
< span class = "plain-syntax" > };< / span >
< / pre >
2021-10-11 03:11:20 +03:00
< p class = "commentary firstcommentary" > < a id = "SP3" class = "paragraph-anchor" > < / a > < b > § 3. < / b > This generator uses the following state data while it works:
2021-08-12 01:49:36 +03:00
< / p >
2021-09-22 19:28:55 +03:00
< pre class = "definitions code-font" > < span class = "definition-keyword" > define< / span > < span class = "identifier-syntax" > I6_GEN_DATA< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > x< / span > < span class = "plain-syntax" > ) ((< / span > < span class = "reserved-syntax" > I6_generation_data< / span > < span class = "plain-syntax" > *) (< / span > < span class = "identifier-syntax" > gen< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > generator_private_data< / span > < span class = "plain-syntax" > ))-> < / span > < span class = "identifier-syntax" > x< / span >
2021-08-12 01:49:36 +03:00
< / pre >
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "reserved-syntax" > typedef< / span > < span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > struct< / span > < span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > I6_generation_data< / span > < span class = "plain-syntax" > {< / span >
2021-10-11 03:11:20 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > attribute_slots_used< / span > < span class = "plain-syntax" > ;< / span >
2021-10-06 01:54:01 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > value_ranges_needed< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > value_property_holders_needed< / span > < span class = "plain-syntax" > ;< / span >
2021-10-11 03:11:20 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > DebugAttribute_seen< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > subterfuge_count< / span > < span class = "plain-syntax" > ;< / span >
2021-08-12 01:49:36 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > CLASS_DEFINITION< / span >
< span class = "plain-syntax" > } < / span > < span class = "reserved-syntax" > I6_generation_data< / span > < span class = "plain-syntax" > ;< / span >
2021-10-11 03:11:20 +03:00
< span class = "reserved-syntax" > I6_generation_data< / span > < span class = "plain-syntax" > *< / span > < span class = "function-syntax" > I6Target::new_data< / span > < button class = "popup" onclick = "togglePopup('usagePopup2')" > < span class = "comment-syntax" > ?< / span > < span class = "popuptext" id = "usagePopup2" > Usage of < span class = "code-font" > < span class = "function-syntax" > I6Target::new_data< / span > < / span > :< br / > < a href = "4-fi6.html#SP4" > § 4< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > ) {< / span >
2021-08-12 01:49:36 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > I6_generation_data< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > data< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > CREATE< / span > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > I6_generation_data< / span > < span class = "plain-syntax" > );< / span >
2021-10-11 03:11:20 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > data< / span > < span class = "plain-syntax" > -> < / span > < span class = "identifier-syntax" > attribute_slots_used< / span > < span class = "plain-syntax" > = < / span > < span class = "constant-syntax" > 0< / span > < span class = "plain-syntax" > ;< / span >
2021-10-06 01:54:01 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > data< / span > < span class = "plain-syntax" > -> < / span > < span class = "identifier-syntax" > value_ranges_needed< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > data< / span > < span class = "plain-syntax" > -> < / span > < span class = "identifier-syntax" > value_property_holders_needed< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ;< / span >
2021-10-11 03:11:20 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > data< / span > < span class = "plain-syntax" > -> < / span > < span class = "identifier-syntax" > DebugAttribute_seen< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > data< / span > < span class = "plain-syntax" > -> < / span > < span class = "identifier-syntax" > subterfuge_count< / span > < span class = "plain-syntax" > = < / span > < span class = "constant-syntax" > 0< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > data< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
< / pre >
2021-10-30 15:04:16 +03:00
< ul class = "endnotetexts" > < li > The structure I6_generation_data is accessed in 5/ccn, 5/com and here.< / li > < / ul >
2021-10-11 03:11:20 +03:00
< p class = "commentary firstcommentary" > < a id = "SP4" class = "paragraph-anchor" > < / a > < b > § 4. < / b > We return < span class = "extract" > < span class = "extract-syntax" > FALSE< / span > < / span > here to signal that we want the Vanilla algorithm to
manage the process.
< / p >
< pre class = "displayed-code all-displayed-code code-font" >
2021-11-12 01:32:10 +02:00
< span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > I6Target::begin_generation< / span > < button class = "popup" onclick = "togglePopup('usagePopup3')" > < span class = "comment-syntax" > ?< / span > < span class = "popuptext" id = "usagePopup3" > Usage of < span class = "code-font" > < span class = "function-syntax" > I6Target::begin_generation< / span > < / span > :< br / > < a href = "4-fi6.html#SP1" > § 1< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > code_generator< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > gtr< / span > < span class = "plain-syntax" > , < / span > < span class = "reserved-syntax" > code_generation< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > gen< / span > < span class = "plain-syntax" > ) {< / span >
2022-03-20 15:41:13 +02:00
< span class = "plain-syntax" > < / span > < a href = "2-cg.html#SP10" class = "function-link" > < span class = "function-syntax" > CodeGen::create_segments< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > gen< / span > < span class = "plain-syntax" > , < / span > < a href = "4-fi6.html#SP3" class = "function-link" > < span class = "function-syntax" > I6Target::new_data< / span > < / a > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > I6_target_segments< / span > < span class = "plain-syntax" > );< / span >
2021-10-11 03:11:20 +03:00
< span class = "plain-syntax" > < / span > < span class = "named-paragraph-container code-font" > < a href = "4-fi6.html#SP4_1" class = "named-paragraph-link" > < span class = "named-paragraph" > Compile some I6 oddities< / span > < span class = "named-paragraph-number" > 4.1< / span > < / a > < / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "named-paragraph-container code-font" > < a href = "4-fi6.html#SP4_2" class = "named-paragraph-link" > < span class = "named-paragraph" > Compile some veneer replacement code< / span > < span class = "named-paragraph-number" > 4.2< / span > < / a > < / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
< / pre >
< p class = "commentary firstcommentary" > < a id = "SP4_1" class = "paragraph-anchor" > < / a > < b > § 4.1. < / b > Defining a constant called < span class = "extract" > < span class = "extract-syntax" > Grammar__Version< / span > < / span > tells Inform 6 which storage
layout to use for command parser grammar. 2 is the shiny, modern one — 1995
not 1993.
< / p >
2021-08-12 01:49:36 +03:00
2021-10-11 03:11:20 +03:00
< p class = "commentary" > The I6 compiler adds a thin layer of hidden code to every program it compiles,
called the "veneer". This layer of code requires a global variable called < span class = "extract" > < span class = "extract-syntax" > debug_flag< / span > < / span >
to exist, and since that doesn't exist in the Inter tree, we must make it by hand.
< / p >
< p class = "commentary" > The < span class = "extract" > < span class = "extract-syntax" > or_tmp_var< / span > < / span > variable is not significant to I6, and is just a temporary location
we will need for the code we are compiling. But this seems a good time to make it.
< / p >
< p class = "commentary" > See the Inform 6 Technical Manual for more on these oddities.
< / p >
< p class = "commentary" > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Compile some I6 oddities< / span > < span class = "named-paragraph-number" > 4.1< / span > < / span > < span class = "comment-syntax" > =< / span >
< / p >
2021-08-10 01:30:31 +03:00
2021-10-11 03:11:20 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
2022-03-20 15:41:13 +02:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > segmentation_pos< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > saved< / span > < span class = "plain-syntax" > = < / span > < a href = "2-cg.html#SP12" class = "function-link" > < span class = "function-syntax" > CodeGen::select< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > gen< / span > < span class = "plain-syntax" > , < / span > < span class = "constant-syntax" > compiler_versioning_matter_I7CGS< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > text_stream< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > OUT< / span > < span class = "plain-syntax" > = < / span > < a href = "2-cg.html#SP14" class = "function-link" > < span class = "function-syntax" > CodeGen::current< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > gen< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "Constant Grammar__Version 2;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "Global debug_flag;\n"< / span > < span class = "plain-syntax" > );< / span >
2021-09-29 01:41:07 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "Global or_tmp_var;\n"< / span > < span class = "plain-syntax" > );< / span >
2022-03-20 15:41:13 +02:00
< span class = "plain-syntax" > < / span > < a href = "2-cg.html#SP12" class = "function-link" > < span class = "function-syntax" > CodeGen::deselect< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > gen< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > saved< / span > < span class = "plain-syntax" > );< / span >
2021-10-11 03:11:20 +03:00
< / pre >
< ul class = "endnotetexts" > < li > This code is used in < a href = "4-fi6.html#SP4" > § 4< / a > .< / li > < / ul >
< p class = "commentary firstcommentary" > < a id = "SP4_2" class = "paragraph-anchor" > < / a > < b > § 4.2. < / b > As noted above, I6 will add a veneer of code to what we compile. That veneer
will contain a function called < span class = "extract" > < span class = "extract-syntax" > OC__Cl< / span > < / span > which implements "ofclass", the I6
condition determining whether an object belongs to a given class. The I6
compiler's stock copy of < span class = "extract" > < span class = "extract-syntax" > OC__Cl< / span > < / span > doesn't work right with I7 code, though,
so we replace it here with a better one. (The I6 compiler uses our definition
in preference to its own.)
< / p >
< p class = "commentary" > We need do this only when compiling to the Z-machine; our replacement function
is implemented in pure Z-machine assembly language. See the Z-Machine Standards
Document for a specification.
< / p >
< p class = "commentary" > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Compile some veneer replacement code< / span > < span class = "named-paragraph-number" > 4.2< / span > < / span > < span class = "comment-syntax" > =< / span >
< / p >
2020-05-03 03:01:21 +03:00
2021-10-11 03:11:20 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
2022-03-20 15:41:13 +02:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > segmentation_pos< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > saved< / span > < span class = "plain-syntax" > = < / span > < a href = "2-cg.html#SP12" class = "function-link" > < span class = "function-syntax" > CodeGen::select< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > gen< / span > < span class = "plain-syntax" > , < / span > < span class = "constant-syntax" > functions_I7CGS< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > text_stream< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > OUT< / span > < span class = "plain-syntax" > = < / span > < a href = "2-cg.html#SP14" class = "function-link" > < span class = "function-syntax" > CodeGen::current< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > gen< / span > < span class = "plain-syntax" > );< / span >
2021-09-01 15:17:12 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "#Ifdef TARGET_ZCODE;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "Global max_z_object;\n"< / span > < span class = "plain-syntax" > );< / span >
2022-02-08 13:37:44 +02:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "#Ifdef Z__Region;\n"< / span > < span class = "plain-syntax" > );< / span >
2021-09-01 15:17:12 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "[ OC__Cl obj cla j a n objflag;\n"< / span > < span class = "plain-syntax" > ); < / span > < span class = "identifier-syntax" > INDENT< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "@jl obj 1 ?NotObj;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "@jg obj max_z_object ?NotObj;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "@inc objflag;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "#Ifdef K1_room;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "@je cla K1_room ?~NotRoom;\n"< / span > < span class = "plain-syntax" > );< / span >
2021-10-03 01:52:18 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "@test_attr obj mark_as_room ?rtrue;\n"< / span > < span class = "plain-syntax" > );< / span >
2021-09-01 15:17:12 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "@rfalse;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > ".NotRoom;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "#Endif;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "#Ifdef K2_thing;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "@je cla K2_thing ?~NotObj;\n"< / span > < span class = "plain-syntax" > );< / span >
2021-10-03 01:52:18 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "@test_attr obj mark_as_thing ?rtrue;\n"< / span > < span class = "plain-syntax" > );< / span >
2021-09-01 15:17:12 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "@rfalse;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "#Endif;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > ".NotObj;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "@je cla Object Class ?ObjOrClass;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "@je cla Routine String ?RoutOrStr;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "@jin cla 1 ?~Mistake;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "@jz objflag ?rfalse;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "@get_prop_addr obj 2 -> a;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "@jz a ?rfalse;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "@get_prop_len a -> n;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "@div n 2 -> n;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > ".Loop;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "@loadw a j -> sp;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "@je sp cla ?rtrue;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "@inc j;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "@jl j n ?Loop;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "@rfalse;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > ".ObjOrClass;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "@jz objflag ?rfalse;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "@je cla Object ?JustObj;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "! So now cla is Class\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "@jg obj String ?~rtrue;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "@jin obj Class ?rtrue;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "@rfalse;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > ".JustObj;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "! So now cla is Object\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "@jg obj String ?~rfalse;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "@jin obj Class ?rfalse;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "@rtrue;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > ".RoutOrStr;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "@jz objflag ?~rfalse;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "@call_2s Z__Region obj -> sp;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "@inc sp;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "@je sp cla ?rtrue;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "@rfalse;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > ".Mistake;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "RT__Err(\"apply 'ofclass' for\", cla, -1);\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "rfalse;\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > OUTDENT< / span > < span class = "plain-syntax" > ; < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "];\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "#Endif;\n"< / span > < span class = "plain-syntax" > );< / span >
2022-02-08 13:37:44 +02:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "#Endif;\n"< / span > < span class = "plain-syntax" > );< / span >
2022-03-20 15:41:13 +02:00
< span class = "plain-syntax" > < / span > < a href = "2-cg.html#SP12" class = "function-link" > < span class = "function-syntax" > CodeGen::deselect< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > gen< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > saved< / span > < span class = "plain-syntax" > );< / span >
2019-06-27 01:50:30 +03:00
< / pre >
2021-10-11 03:11:20 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "4-fi6.html#SP4" > § 4< / a > .< / li > < / ul >
2022-01-14 01:49:42 +02:00
< p class = "commentary firstcommentary" > < a id = "SP5" class = "paragraph-anchor" > < / a > < b > § 5. < / b > Pragmas are interpreted as ICL directives — ICL being the Inform
Configuration Language part of Inform 6, a mini-language for controlling the I6
compiler, able to set command-line switches, memory settings and so on. I6
ordinarily discards lines beginning with exclamation marks as comments, but at
the very top of the file, lines beginning < span class = "extract" > < span class = "extract-syntax" > !%< / span > < / span > are read as ICL commands: as soon
as any line (including a blank line) doesn't have this signature, I6 exits ICL
mode.
2021-09-29 01:41:07 +03:00
< / p >
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
2021-11-12 01:32:10 +02:00
< span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > I6Target::offer_pragma< / span > < button class = "popup" onclick = "togglePopup('usagePopup4')" > < span class = "comment-syntax" > ?< / span > < span class = "popuptext" id = "usagePopup4" > Usage of < span class = "code-font" > < span class = "function-syntax" > I6Target::offer_pragma< / span > < / span > :< br / > < a href = "4-fi6.html#SP1" > § 1< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > code_generator< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > gtr< / span > < span class = "plain-syntax" > , < / span > < span class = "reserved-syntax" > code_generation< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > gen< / span > < span class = "plain-syntax" > ,< / span >
2021-10-11 03:11:20 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > inter_tree_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > P< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > text_stream< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > tag< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > text_stream< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > content< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Str::eq< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > tag< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > I< / span > < span class = "string-syntax" > "Inform6"< / span > < span class = "plain-syntax" > )) {< / span >
2022-03-20 15:41:13 +02:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > segmentation_pos< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > saved< / span > < span class = "plain-syntax" > = < / span > < a href = "2-cg.html#SP12" class = "function-link" > < span class = "function-syntax" > CodeGen::select< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > gen< / span > < span class = "plain-syntax" > , < / span > < span class = "constant-syntax" > ICL_directives_I7CGS< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > text_stream< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > OUT< / span > < span class = "plain-syntax" > = < / span > < a href = "2-cg.html#SP14" class = "function-link" > < span class = "function-syntax" > CodeGen::current< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > gen< / span > < span class = "plain-syntax" > );< / span >
2021-10-11 03:11:20 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "!%% %S\n"< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > content< / span > < span class = "plain-syntax" > );< / span >
2022-03-20 15:41:13 +02:00
< span class = "plain-syntax" > < / span > < a href = "2-cg.html#SP12" class = "function-link" > < span class = "function-syntax" > CodeGen::deselect< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > gen< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > saved< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > }< / span >
2021-10-05 01:35:07 +03:00
< / pre >
2021-10-11 03:11:20 +03:00
< p class = "commentary firstcommentary" > < a id = "SP6" class = "paragraph-anchor" > < / a > < b > § 6. < / b > Names are not mangled: all Inter identifiers are used as-is.
2021-10-05 01:35:07 +03:00
< / p >
< pre class = "displayed-code all-displayed-code code-font" >
2021-11-12 01:32:10 +02:00
< span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > I6Target::mangle< / span > < button class = "popup" onclick = "togglePopup('usagePopup5')" > < span class = "comment-syntax" > ?< / span > < span class = "popuptext" id = "usagePopup5" > Usage of < span class = "code-font" > < span class = "function-syntax" > I6Target::mangle< / span > < / span > :< br / > < a href = "4-fi6.html#SP1" > § 1< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > code_generator< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > gtr< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > OUTPUT_STREAM< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > text_stream< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > identifier< / span > < span class = "plain-syntax" > ) {< / span >
2021-10-11 03:11:20 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "%S"< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > identifier< / span > < span class = "plain-syntax" > );< / span >
2021-08-24 00:39:50 +03:00
< span class = "plain-syntax" > }< / span >
2021-08-16 01:41:42 +03:00
< / pre >
2021-10-11 03:11:20 +03:00
< p class = "commentary firstcommentary" > < a id = "SP7" class = "paragraph-anchor" > < / a > < b > § 7. < / b > The end:
2021-08-16 01:41:42 +03:00
< / p >
< pre class = "displayed-code all-displayed-code code-font" >
2021-11-12 01:32:10 +02:00
< span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > I6Target::end_generation< / span > < button class = "popup" onclick = "togglePopup('usagePopup6')" > < span class = "comment-syntax" > ?< / span > < span class = "popuptext" id = "usagePopup6" > Usage of < span class = "code-font" > < span class = "function-syntax" > I6Target::end_generation< / span > < / span > :< br / > < a href = "4-fi6.html#SP1" > § 1< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > code_generator< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > gtr< / span > < span class = "plain-syntax" > , < / span > < span class = "reserved-syntax" > code_generation< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > gen< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < a href = "4-i6o.html#SP13" class = "function-link" > < span class = "function-syntax" > I6TargetObjects::end_generation< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > gtr< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > gen< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < a href = "4-i6c2.html#SP9" class = "function-link" > < span class = "function-syntax" > I6TargetCode::end_generation< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > gtr< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > gen< / span > < span class = "plain-syntax" > );< / span >
2021-10-11 03:11:20 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ;< / span >
2021-08-24 00:39:50 +03:00
< span class = "plain-syntax" > }< / span >
2019-06-29 15:17:29 +03:00
< / pre >
2020-05-03 03:01:21 +03:00
< nav role = "progress" > < div class = "progresscontainer" >
2021-11-12 01:32:10 +02:00
< ul class = "progressbar" > < li class = "progressprev" > < a href = "3-fi.html" > ❮ < / a > < / li > < li class = "progresschapter" > < a href = "P-wtmd.html" > P< / a > < / li > < li class = "progresschapter" > < a href = "1-fm.html" > 1< / a > < / li > < li class = "progresschapter" > < a href = "2-cg.html" > 2< / a > < / li > < li class = "progresschapter" > < a href = "3-fti.html" > 3< / a > < / li > < li class = "progresscurrentchapter" > 4< / li > < li class = "progresscurrent" > fi6< / li > < li class = "progresssection" > < a href = "4-i6c.html" > i6c< / a > < / li > < li class = "progresssection" > < a href = "4-i6gv.html" > i6gv< / a > < / li > < li class = "progresssection" > < a href = "4-i6o.html" > i6o< / a > < / li > < li class = "progresssection" > < a href = "4-i6c2.html" > i6c2< / a > < / li > < li class = "progresschapter" > < a href = "5-fnc.html" > 5< / a > < / li > < li class = "progressnext" > < a href = "4-i6c.html" > ❯ < / a > < / li > < / ul > < / div >
2020-05-03 03:01:21 +03:00
< / nav > <!-- End of weave -->
2019-06-29 15:17:29 +03:00
2020-03-19 02:11:25 +02:00
< / main >
2019-06-27 01:50:30 +03:00
< / body >
< / html >