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 >
2020-04-14 19:56:54 +03:00
< title > Compile Phrases< / 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-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" >
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-03-17 14:40:57 +02: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" >
2020-04-14 19:56:54 +03:00
< h1 > < a href = "../index.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 >
< ul > < li > < a href = "../compiler.html" > compiler tools< / a > < / li >
2020-03-19 02:11:25 +02:00
< li > < a href = "../other.html" > other tools< / a > < / li >
< li > < a href = "../extensions.html" > extensions and kits< / a > < / li >
< li > < a href = "../units.html" > unit test tools< / a > < / li >
2020-04-14 19:56:54 +03:00
< / ul > < h2 > Compiler Webs< / h2 > < ul >
2020-03-19 02:11:25 +02:00
< li > < a href = "../inbuild/index.html" > inbuild< / a > < / li >
< li > < a href = "../inform7/index.html" > inform7< / a > < / li >
< li > < a href = "../inter/index.html" > inter< / a > < / li >
2020-04-14 19:56:54 +03:00
< / ul > < h2 > Inbuild Modules< / h2 > < ul >
< li > < a href = "../supervisor-module/index.html" > supervisor< / a > < / li >
< / ul > < h2 > Inform7 Modules< / h2 > < ul >
2020-08-26 12:52:50 +03:00
< li > < a href = "../core-module/index.html" > core< / a > < / li >
< li > < a href = "../assertions-module/index.html" > assertions< / a > < / li >
< li > < a href = "../values-module/index.html" > values< / a > < / li >
< li > < a href = "../knowledge-module/index.html" > knowledge< / a > < / li >
< li > < a href = "index.html" > < span class = "selectedlink" > imperative< / span > < / a > < / li >
< li > < a href = "../runtime-module/index.html" > runtime< / a > < / li >
2020-03-19 02:11:25 +02:00
< li > < a href = "../if-module/index.html" > if< / a > < / li >
< li > < a href = "../multimedia-module/index.html" > multimedia< / a > < / li >
< li > < a href = "../index-module/index.html" > index< / a > < / li >
2020-04-14 19:56:54 +03:00
< / ul > < h2 > Inter Modules< / h2 > < ul >
< li > < a href = "../bytecode-module/index.html" > bytecode< / a > < / li >
2020-03-19 02:11:25 +02:00
< li > < a href = "../building-module/index.html" > building< / a > < / li >
< li > < a href = "../codegen-module/index.html" > codegen< / a > < / li >
2020-05-20 02:02:28 +03:00
< / ul > < h2 > Services< / h2 > < ul >
2020-04-14 19:56:54 +03:00
< li > < a href = "../arch-module/index.html" > arch< / a > < / li >
2020-08-20 01:36:18 +03:00
< li > < a href = "../calculus-module/index.html" > calculus< / a > < / li >
2020-04-14 19:56:54 +03:00
< li > < a href = "../html-module/index.html" > html< / a > < / li >
2020-05-20 02:02:28 +03:00
< li > < a href = "../inflections-module/index.html" > inflections< / a > < / li >
2020-08-20 01:36:18 +03:00
< li > < a href = "../kinds-module/index.html" > kinds< / a > < / li >
2020-05-20 02:02:28 +03:00
< li > < a href = "../linguistics-module/index.html" > linguistics< / a > < / li >
< li > < a href = "../problems-module/index.html" > problems< / a > < / li >
2020-08-20 01:36:18 +03:00
< li > < a href = "../syntax-module/index.html" > syntax< / a > < / li >
< li > < a href = "../words-module/index.html" > words< / a > < / li >
2020-03-19 02:11:25 +02:00
< li > < a href = "../../../inweb/docs/foundation-module/index.html" > foundation< / a > < / li >
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 'Compile Phrases' generated by Inweb -->
< div class = "breadcrumbs" >
2020-08-26 12:52:50 +03:00
< ul class = "crumbs" > < li > < a href = "../index.html" > Home< / a > < / li > < li > < a href = "../compiler.html" > Inform7 Modules< / a > < / li > < li > < a href = "index.html" > imperative< / a > < / li > < li > < a href = "index.html#5" > Chapter 5: Compilation< / a > < / li > < li > < b > Compile Phrases< / b > < / li > < / ul > < / div >
2020-05-03 03:01:21 +03:00
< p class = "purpose" > Phrases defined with a list of invocations, rather than inline, have to be compiled to I6 routines, and this is where we organise that.< / p >
2019-03-17 14:40:57 +02:00
2020-08-26 12:52:50 +03:00
< ul class = "toc" > < li > < a href = "5-cp.html#SP7" > § 7. Validation of invocations< / a > < / li > < li > < a href = "5-cp.html#SP8" > § 8. Problem messages for complex say constructions< / a > < / li > < / ul > < hr class = "tocbar" >
2019-03-17 14:40:57 +02:00
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP1" class = "paragraph-anchor" > < / a > < b > § 1. < / b > The nature of the phrase currently being compiled provides a sort of
2019-03-17 14:40:57 +02:00
context for how we read the definition — for example, that it makes no
sense to write "end the action" in a phrase which isn't an action-based
rule. So we keep track of this. Note that one phrase definition cannot
contain another, so there is never any need to recursively compile phrases.
< / p >
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "reserved-syntax" > phrase< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > phrase_being_compiled< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ; < / span > < span class = "comment-syntax" > phrase whose definition is being compiled< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP2" class = "paragraph-anchor" > < / a > < b > § 2. < / b > This routine sits at the summit of a mountain of code: it compiles a
2019-03-17 14:40:57 +02:00
non-line phrase definition into a routine. Note once again that a single
phrase can be compiled multiple times, with different kinds. For example,
< / p >
< blockquote >
< p > To grasp (V - a value): say "I see, [V]."< / p >
< / blockquote >
2020-05-03 03:01:21 +03:00
< p class = "commentary" > might be compiled once in a form where V was a text, and another time where
it was a number. The form needed is included in the request < span class = "extract" > < span class = "extract-syntax" > req< / span > < / span > , which
2019-03-17 14:40:57 +02:00
should always be supplied for "To..." phrases, but left null for rules.
< / p >
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
2020-08-26 12:52:50 +03:00
< span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > Routines::Compile::routine< / 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" > Routines::Compile::routine< / span > < / span > :< br / > Phrases - < a href = "3-phr.html#SP11" > § 11< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > phrase< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > ph< / span > < span class = "plain-syntax" > ,< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > stacked_variable_owner_list< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > legible< / span > < span class = "plain-syntax" > , < / span > < span class = "reserved-syntax" > to_phrase_request< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > req< / span > < span class = "plain-syntax" > ,< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > applicability_condition< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > acl< / span > < span class = "plain-syntax" > ) {< / span >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > ((< / span > < span class = "identifier-syntax" > ph< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > declaration_node< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ) ||< / span >
2020-05-19 18:36:50 +03:00
< span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Node::get_type< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > ph< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > declaration_node< / span > < span class = "plain-syntax" > ) != < / span > < span class = "identifier-syntax" > RULE_NT< / span > < span class = "plain-syntax" > ) ||< / span >
2020-05-11 17:21:29 +03:00
< span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Wordings::empty< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Node::get_text< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > ph< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > declaration_node< / span > < span class = "plain-syntax" > ))))< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > internal_error< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "tried to compile phrase with bad ROUTINE node"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > LOGIF< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > PHRASE_COMPILATION< / span > < span class = "plain-syntax" > , < / span > < span class = "string-syntax" > "Compiling phrase:\n$T"< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > ph< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > declaration_node< / span > < span class = "plain-syntax" > );< / span >
2019-03-17 14:40:57 +02:00
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > CompilationUnits::set_current< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > ph< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > declaration_node< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > phrase_being_compiled< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > ph< / span > < span class = "plain-syntax" > ;< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP2_2" class = "named-paragraph-link" > < span class = "named-paragraph" > Set up the stack frame for this compilation request< / span > < span class = "named-paragraph-number" > 2.2< / span > < / a > < / span > < span class = "plain-syntax" > ;< / span >
2019-03-17 14:40:57 +02:00
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP2_1" class = "named-paragraph-link" > < span class = "named-paragraph" > Compile some commentary about the routine to follow< / span > < span class = "named-paragraph-number" > 2.1< / span > < / a > < / span > < span class = "plain-syntax" > ;< / span >
2019-03-17 14:40:57 +02:00
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > packaging_state< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > save< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > Routines::begin_framed< / span > < span class = "plain-syntax" > (< / span > < a href = "5-cp.html#SP3" class = "function-link" > < span class = "function-syntax" > Routines::Compile::iname< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > ph< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > req< / span > < span class = "plain-syntax" > ), & (< / span > < span class = "identifier-syntax" > ph< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > stack_frame< / span > < span class = "plain-syntax" > ));< / span >
2019-03-17 14:40:57 +02:00
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP2_3" class = "named-paragraph-link" > < span class = "named-paragraph" > Compile the body of the routine< / span > < span class = "named-paragraph-number" > 2.3< / span > < / a > < / span > < span class = "plain-syntax" > ;< / span >
2019-03-17 14:40:57 +02:00
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Routines::end< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > save< / span > < span class = "plain-syntax" > );< / span >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > phrase_being_compiled< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > current_sentence< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ;< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > CompilationUnits::set_current< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP2_1" class = "paragraph-anchor" > < / a > < b > § 2.1. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Compile some commentary about the routine to follow< / span > < span class = "named-paragraph-number" > 2.1< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < a href = "3-tph.html#SP9" class = "function-link" > < span class = "function-syntax" > Routines::ToPhrases::comment_on_request< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > req< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < a href = "3-pu.html#SP17" class = "function-link" > < span class = "function-syntax" > Phrases::Usage::write_I6_comment_describing< / span > < / a > < span class = "plain-syntax" > (& (< / span > < span class = "identifier-syntax" > ph< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > usage_data< / span > < span class = "plain-syntax" > ));< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-26 12:52:50 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "5-cp.html#SP2" > § 2< / a > .< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP2_2" class = "paragraph-anchor" > < / a > < b > § 2.2. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Set up the stack frame for this compilation request< / span > < span class = "named-paragraph-number" > 2.2< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > ph_stack_frame< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > phsf< / span > < span class = "plain-syntax" > = & (< / span > < span class = "identifier-syntax" > ph< / span > < span class = "plain-syntax" > -> < / span > < span class = "identifier-syntax" > stack_frame< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > ph_type_data< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > phtd< / span > < span class = "plain-syntax" > = & (< / span > < span class = "identifier-syntax" > ph< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > type_data< / span > < span class = "plain-syntax" > );< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < a href = "4-sf.html#SP7" class = "function-link" > < span class = "function-syntax" > Frames::make_current< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > phsf< / span > < span class = "plain-syntax" > );< / span >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > kind< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > version_kind< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ;< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > req< / span > < span class = "plain-syntax" > ) < / span > < span class = "identifier-syntax" > version_kind< / span > < span class = "plain-syntax" > = < / span > < a href = "3-tph.html#SP10" class = "function-link" > < span class = "function-syntax" > Routines::ToPhrases::kind_of_request< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > req< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > version_kind< / span > < span class = "plain-syntax" > = < / span > < a href = "3-ptd.html#SP12" class = "function-link" > < span class = "function-syntax" > Phrases::TypeData::kind< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > phtd< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < a href = "3-ptd.html#SP19" class = "function-link" > < span class = "function-syntax" > Phrases::TypeData::into_stack_frame< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > phsf< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > phtd< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > version_kind< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > );< / span >
2019-03-17 14:40:57 +02:00
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > req< / span > < span class = "plain-syntax" > ) < / span > < a href = "4-sf.html#SP9" class = "function-link" > < span class = "function-syntax" > Frames::set_kind_variables< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > phsf< / span > < span class = "plain-syntax" > ,< / span >
< span class = "plain-syntax" > < / span > < a href = "3-tph.html#SP10" class = "function-link" > < span class = "function-syntax" > Routines::ToPhrases::kind_variables_for_request< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > req< / span > < span class = "plain-syntax" > ));< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > < / span > < a href = "4-sf.html#SP9" class = "function-link" > < span class = "function-syntax" > Frames::set_kind_variables< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > phsf< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > );< / span >
2019-03-17 14:40:57 +02:00
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < a href = "4-sf.html#SP10" class = "function-link" > < span class = "function-syntax" > Frames::set_stvol< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > phsf< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > legible< / span > < span class = "plain-syntax" > );< / span >
2019-03-17 14:40:57 +02:00
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < a href = "4-lv.html#SP15" class = "function-link" > < span class = "function-syntax" > LocalVariables::deallocate_all< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > phsf< / span > < span class = "plain-syntax" > ); < / span > < span class = "comment-syntax" > in case any are left from an earlier compile< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > ExParser::warn_expression_cache< / span > < span class = "plain-syntax" > (); < / span > < span class = "comment-syntax" > that local variables may have changed< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-26 12:52:50 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "5-cp.html#SP2" > § 2< / a > .< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP2_3" class = "paragraph-anchor" > < / a > < b > § 2.3. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Compile the body of the routine< / span > < span class = "named-paragraph-number" > 2.3< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > current_sentence< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > ph< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > declaration_node< / span > < span class = "plain-syntax" > ;< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < a href = "3-prcd.html#SP9" class = "function-link" > < span class = "function-syntax" > Phrases::Context::compile_test_head< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > ph< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > acl< / span > < span class = "plain-syntax" > ) == < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ) {< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > ph< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > declaration_node< / span > < span class = "plain-syntax" > ) {< / span >
2020-05-11 21:14:00 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > VerifyTree::verify_structure_from< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > ph< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > declaration_node< / span > < span class = "plain-syntax" > );< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < a href = "5-cp.html#SP4" class = "function-link" > < span class = "function-syntax" > Routines::Compile::code_block_outer< / span > < / a > < span class = "plain-syntax" > (1, < / span > < span class = "identifier-syntax" > ph< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > declaration_node< / span > < span class = "plain-syntax" > -> < / span > < span class = "identifier-syntax" > down< / span > < span class = "plain-syntax" > );< / span >
2020-05-11 21:14:00 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > VerifyTree::verify_structure_from< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > ph< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > declaration_node< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > current_sentence< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > ph< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > declaration_node< / span > < span class = "plain-syntax" > ;< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < a href = "3-prcd.html#SP9_1" class = "function-link" > < span class = "function-syntax" > Phrases::Context::compile_test_tail< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > ph< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > acl< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP2_3_1" class = "named-paragraph-link" > < span class = "named-paragraph" > Compile a terminal return statement< / span > < span class = "named-paragraph-number" > 2.3.1< / span > < / a > < / span > < span class = "plain-syntax" > ;< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-26 12:52:50 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "5-cp.html#SP2" > § 2< / a > .< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP2_3_1" class = "paragraph-anchor" > < / a > < b > § 2.3.1. < / b > In I6, all routines return a value, and if execution runs into the < span class = "extract" > < span class = "extract-syntax" > ]< / span > < / span > end
2020-05-03 03:01:21 +03:00
marker without any return being made then the routine returns < span class = "extract" > < span class = "extract-syntax" > false< / span > < / span > if the
routine is a property value, < span class = "extract" > < span class = "extract-syntax" > true< / span > < / span > otherwise. That convention is unhelpful
2019-03-17 14:40:57 +02:00
to us, so we end our routine with code which certainly performs a return.
< / p >
2020-08-09 20:39:31 +03:00
< p class = "commentary" > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Compile a terminal return statement< / span > < span class = "named-paragraph-number" > 2.3.1< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::inv_primitive< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > RETURN_BIP< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::down< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > ());< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > kind< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > K< / span > < span class = "plain-syntax" > = < / span > < a href = "4-sf.html#SP8" class = "function-link" > < span class = "function-syntax" > Frames::get_kind_returned< / span > < / a > < span class = "plain-syntax" > ();< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > K< / span > < span class = "plain-syntax" > ) {< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Kinds::RunTime::emit_default_value_as_val< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > K< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > EMPTY_WORDING< / span > < span class = "plain-syntax" > ,< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "value decided by this phrase"< / span > < span class = "plain-syntax" > ) != < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ) {< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > StandardProblems::sentence_problem< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Task::syntax_tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > _p_< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > PM_DefaultDecideFails< / span > < span class = "plain-syntax" > ),< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "it's not possible to decide such a value"< / span > < span class = "plain-syntax" > ,< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "so this can't be allowed."< / span > < span class = "plain-syntax" > );< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::val< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > K_number< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > LITERAL_IVAL< / span > < span class = "plain-syntax" > , < / span > < span class = "constant-syntax" > 0< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > } < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > {< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::val< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > K_number< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > LITERAL_IVAL< / span > < span class = "plain-syntax" > , < / span > < span class = "constant-syntax" > 0< / span > < span class = "plain-syntax" > ); < / span > < span class = "comment-syntax" > that is, return "false"< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > }< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::up< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > ());< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-26 12:52:50 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "5-cp.html#SP2_3" > § 2.3< / a > .< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP3" class = "paragraph-anchor" > < / a > < b > § 3. < / b > The name of our I6 routine depends not only on the phrase but also on the
2019-03-17 14:40:57 +02:00
request made for its compilation — this enables the text version of a
phrase to be different from the number version, and so on.
< / p >
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
2020-08-26 12:52:50 +03:00
< span class = "identifier-syntax" > inter_name< / span > < span class = "plain-syntax" > *< / span > < span class = "function-syntax" > Routines::Compile::iname< / 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" > Routines::Compile::iname< / span > < / span > :< br / > < a href = "5-cp.html#SP2" > § 2< / a > < br / > Phrases - < a href = "3-phr.html#SP12" > § 12< / a > < br / > To Phrases - < a href = "3-tph.html#SP7" > § 7< / a > < br / > Compile Invocations As Calls - < a href = "5-ciac.html#SP1" > § 1< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > phrase< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > ph< / span > < span class = "plain-syntax" > , < / span > < span class = "reserved-syntax" > to_phrase_request< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > req< / span > < span class = "plain-syntax" > ) {< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > req< / span > < span class = "plain-syntax" > ) < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > req< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > req_iname< / span > < span class = "plain-syntax" > ;< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < a href = "3-phr.html#SP10" class = "function-link" > < span class = "function-syntax" > Phrases::iname< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > ph< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP4" class = "paragraph-anchor" > < / a > < b > § 4. < / b > < / p >
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > disallow_let_assignments< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ;< / span >
2020-08-26 12:52:50 +03:00
< span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > Routines::Compile::disallow_let< / span > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > ) {< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > disallow_let_assignments< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
2020-08-26 12:52:50 +03:00
< span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > Routines::Compile::code_block_outer< / 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" > Routines::Compile::code_block_outer< / span > < / span > :< br / > < a href = "5-cp.html#SP2_3" > § 2.3< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > statement_count< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > parse_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > pn< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < a href = "5-cp.html#SP4" class = "function-link" > < span class = "function-syntax" > Routines::Compile::code_block< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > statement_count< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > pn< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > }< / span >
2020-08-26 12:52:50 +03:00
< span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > Routines::Compile::code_block< / 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" > Routines::Compile::code_block< / span > < / span > :< br / > < a href = "5-cp.html#SP4_3_4" > § 4.3.4< / a > , < a href = "5-cp.html#SP4_3_5_1" > § 4.3.5.1< / a > , < a href = "5-cp.html#SP4_3_5_2" > § 4.3.5.2< / a > , < a href = "5-cp.html#SP4_3_5_3" > § 4.3.5.3< / a > , < a href = "5-cp.html#SP4_3_5_4" > § 4.3.5.4< / a > , < a href = "5-cp.html#SP4_4_3" > § 4.4.3< / a > , < a href = "5-cp.html#SP4_4_5" > § 4.4.5< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > statement_count< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > parse_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > pn< / span > < span class = "plain-syntax" > , < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > top_level< / span > < span class = "plain-syntax" > ) {< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > pn< / span > < span class = "plain-syntax" > ) {< / span >
2020-05-09 01:13:45 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > m< / span > < span class = "plain-syntax" > = < / span > < span class = "function-syntax" > < s-value-uncached> -> < / span > < span class = "identifier-syntax" > multiplicitous< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "function-syntax" > < s-value-uncached> -> < / span > < span class = "identifier-syntax" > multiplicitous< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ;< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Node::get_type< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > pn< / span > < span class = "plain-syntax" > ) != < / span > < span class = "identifier-syntax" > CODE_BLOCK_NT< / span > < span class = "plain-syntax" > ) < / span > < span class = "identifier-syntax" > internal_error< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "not a code block"< / 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" > top_level< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ) & & (< / span > < span class = "identifier-syntax" > pn< / span > < span class = "plain-syntax" > -> < / span > < span class = "identifier-syntax" > down< / span > < span class = "plain-syntax" > ) & & (< / span > < span class = "identifier-syntax" > pn< / span > < span class = "plain-syntax" > -> < / span > < span class = "identifier-syntax" > down< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > next< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ) & & (< / span > < span class = "identifier-syntax" > pn< / span > < span class = "plain-syntax" > -> < / span > < span class = "identifier-syntax" > down< / span > < span class = "plain-syntax" > -> < / span > < span class = "identifier-syntax" > down< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ))< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > disallow_let_assignments< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > for< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > parse_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > pn< / span > < span class = "plain-syntax" > -> < / span > < span class = "identifier-syntax" > down< / span > < span class = "plain-syntax" > ; < / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > ; < / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > next< / span > < span class = "plain-syntax" > ) {< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > statement_count< / span > < span class = "plain-syntax" > = < / span > < a href = "5-cp.html#SP4" class = "function-link" > < span class = "function-syntax" > Routines::Compile::code_line< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > statement_count< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > disallow_let_assignments< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ;< / span >
2020-05-09 01:13:45 +03:00
< span class = "plain-syntax" > < / span > < span class = "function-syntax" > < s-value-uncached> -> < / span > < span class = "identifier-syntax" > multiplicitous< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > m< / span > < span class = "plain-syntax" > ;< / span >
2020-05-03 03:01:21 +03:00
< 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" > statement_count< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
< span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > Routines::Compile::code_line< / span > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > statement_count< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > parse_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > ) {< / span >
2020-05-11 17:21:29 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > control_structure_phrase< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > csp< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > Node::get_control_structure_used< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > parse_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > to_compile< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > p< / 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" > ControlStructures::opens_block< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > csp< / span > < span class = "plain-syntax" > )) {< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < a href = "4-pb.html#SP9" class = "function-link" > < span class = "function-syntax" > Frames::Blocks::beginning_block_phrase< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > csp< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > to_compile< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > -> < / span > < span class = "identifier-syntax" > down< / span > < span class = "plain-syntax" > ;< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > statement_count< / span > < span class = "plain-syntax" > ++;< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP4_1" class = "named-paragraph-link" > < span class = "named-paragraph" > Compile a comment about this line< / span > < span class = "named-paragraph-number" > 4.1< / span > < / a > < / 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" > L< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > Produce::level< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > ());< / span >
< span class = "plain-syntax" > < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP4_2" class = "named-paragraph-link" > < span class = "named-paragraph" > Compile the head< / span > < span class = "named-paragraph-number" > 4.2< / span > < / a > < / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP4_3" class = "named-paragraph-link" > < span class = "named-paragraph" > Compile the midriff< / span > < span class = "named-paragraph-number" > 4.3< / span > < / a > < / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP4_4" class = "named-paragraph-link" > < span class = "named-paragraph" > Compile the tail< / span > < span class = "named-paragraph-number" > 4.4< / span > < / a > < / span > < span class = "plain-syntax" > ;< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > statement_count< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP4_1" class = "paragraph-anchor" > < / a > < b > § 4.1. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Compile a comment about this line< / span > < span class = "named-paragraph-number" > 4.1< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
2020-05-11 17:21:29 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Wordings::nonempty< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Node::get_text< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > to_compile< / span > < span class = "plain-syntax" > ))) {< / span >
2020-06-28 01:18:54 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > TEMPORARY_TEXT< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > C< / span > < span class = "plain-syntax" > )< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE_TO< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > C< / span > < span class = "plain-syntax" > , < / span > < span class = "string-syntax" > "[%d: "< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > statement_count< / span > < span class = "plain-syntax" > );< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > CompiledText::comment< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > C< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > Node::get_text< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > to_compile< / span > < span class = "plain-syntax" > ));< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE_TO< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > C< / span > < span class = "plain-syntax" > , < / span > < span class = "string-syntax" > "]"< / span > < span class = "plain-syntax" > );< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Emit::code_comment< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > C< / span > < span class = "plain-syntax" > );< / span >
2020-06-28 01:18:54 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > DISCARD_TEXT< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > C< / span > < span class = "plain-syntax" > )< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-26 12:52:50 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "5-cp.html#SP4" > § 4< / a > .< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP4_2" class = "paragraph-anchor" > < / a > < b > § 4.2. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Compile the head< / span > < span class = "named-paragraph-number" > 4.2< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > csp< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > say_CSP< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > current_sentence< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > to_compile< / span > < span class = "plain-syntax" > ;< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP4_2_1" class = "named-paragraph-link" > < span class = "named-paragraph" > Compile a say head< / span > < span class = "named-paragraph-number" > 4.2.1< / span > < / a > < / span > < span class = "plain-syntax" > ;< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-26 12:52:50 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "5-cp.html#SP4" > § 4< / a > .< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP4_2_1" class = "paragraph-anchor" > < / a > < b > § 4.2.1. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Compile a say head< / span > < span class = "named-paragraph-number" > 4.2.1< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > for< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > parse_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > say_node< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > -> < / span > < span class = "identifier-syntax" > down< / span > < span class = "plain-syntax" > , *< / span > < span class = "identifier-syntax" > prev_sn< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ; < / span > < span class = "identifier-syntax" > say_node< / span > < span class = "plain-syntax" > ; < / span > < span class = "identifier-syntax" > prev_sn< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > say_node< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > say_node< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > say_node< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > next< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > ExParser::parse_say_term< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > say_node< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > parse_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > inv< / span > < span class = "plain-syntax" > = < / span > < a href = "5-inv.html#SP24" class = "function-link" > < span class = "function-syntax" > Invocations::first_in_list< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > say_node< / span > < span class = "plain-syntax" > -> < / span > < span class = "identifier-syntax" > down< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > inv< / 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" > prev_sn< / span > < span class = "plain-syntax" > ) {< / span >
2020-05-11 17:21:29 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > ((< / span > < span class = "identifier-syntax" > Node::get_say_verb< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > inv< / span > < span class = "plain-syntax" > )) ||< / span >
< span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Node::get_say_adjective< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > inv< / span > < span class = "plain-syntax" > )) ||< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > ((< / span > < a href = "3-ptd.html#SP21" class = "function-link" > < span class = "function-syntax" > Phrases::TypeData::is_a_say_phrase< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Node::get_phrase_invoked< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > inv< / span > < span class = "plain-syntax" > ))) & & < / span >
2020-05-11 17:21:29 +03:00
< span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Node::get_phrase_invoked< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > inv< / span > < span class = "plain-syntax" > )-> < / span > < span class = "element-syntax" > type_data< / span > < span class = "plain-syntax" > .< / span > < span class = "element-syntax" > as_say< / span > < span class = "plain-syntax" > .< / span > < span class = "element-syntax" > say_phrase_running_on< / span > < span class = "plain-syntax" > )))< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Annotations::write_int< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prev_sn< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > suppress_newlines_ANNOT< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > }< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::inv_primitive< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > STORE_BIP< / span > < span class = "plain-syntax" > ); < / span > < span class = "comment-syntax" > warn the paragraph breaker: this will print< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::down< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > ());< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::ref_iname< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > K_number< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > Hierarchy::find< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > SAY__P_HL< / span > < span class = "plain-syntax" > ));< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::val< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > K_number< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > LITERAL_IVAL< / span > < span class = "plain-syntax" > , < / span > < span class = "constant-syntax" > 1< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::up< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > ());< / span >
< span class = "plain-syntax" > < / span > < a href = "5-cp.html#SP7" class = "function-link" > < span class = "function-syntax" > Routines::Compile::verify_say_node_list< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > -> < / span > < span class = "identifier-syntax" > down< / span > < span class = "plain-syntax" > );< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-26 12:52:50 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "5-cp.html#SP4_2" > § 4.2< / a > .< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP4_3" class = "paragraph-anchor" > < / a > < b > § 4.3. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Compile the midriff< / span > < span class = "named-paragraph-number" > 4.3< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Node::get_type< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > to_compile< / span > < span class = "plain-syntax" > ) == < / span > < span class = "identifier-syntax" > INVOCATION_LIST_SAY_NT< / span > < span class = "plain-syntax" > ) < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP4_3_1" class = "named-paragraph-link" > < span class = "named-paragraph" > Compile a say term midriff< / span > < span class = "named-paragraph-number" > 4.3.1< / span > < / a > < / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > csp< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > now_CSP< / span > < span class = "plain-syntax" > ) < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP4_3_2" class = "named-paragraph-link" > < span class = "named-paragraph" > Compile a now midriff< / span > < span class = "named-paragraph-number" > 4.3.2< / span > < / a > < / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > csp< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > if_CSP< / span > < span class = "plain-syntax" > ) < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP4_3_4" class = "named-paragraph-link" > < span class = "named-paragraph" > Compile an if midriff< / span > < span class = "named-paragraph-number" > 4.3.4< / span > < / a > < / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > csp< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > switch_CSP< / span > < span class = "plain-syntax" > ) < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP4_3_5" class = "named-paragraph-link" > < span class = "named-paragraph" > Compile a switch midriff< / span > < span class = "named-paragraph-number" > 4.3.5< / span > < / a > < / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > ((< / span > < span class = "identifier-syntax" > csp< / span > < span class = "plain-syntax" > != < / span > < span class = "identifier-syntax" > say_CSP< / span > < span class = "plain-syntax" > ) & & (< / span > < span class = "identifier-syntax" > csp< / span > < span class = "plain-syntax" > != < / span > < span class = "identifier-syntax" > instead_CSP< / span > < span class = "plain-syntax" > )) {< / span >
2020-05-11 17:21:29 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "function-syntax" > < named-rulebook-outcome> < / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Node::get_text< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > to_compile< / span > < span class = "plain-syntax" > )))< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP4_3_3" class = "named-paragraph-link" > < span class = "named-paragraph" > Compile a named rulebook outline midriff< / span > < span class = "named-paragraph-number" > 4.3.3< / span > < / a > < / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP4_3_6" class = "named-paragraph-link" > < span class = "named-paragraph" > Compile a standard midriff< / span > < span class = "named-paragraph-number" > 4.3.6< / span > < / a > < / span > < span class = "plain-syntax" > ;< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-26 12:52:50 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "5-cp.html#SP4" > § 4< / a > .< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP4_3_1" class = "paragraph-anchor" > < / a > < b > § 4.3.1. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Compile a say term midriff< / span > < span class = "named-paragraph-number" > 4.3.1< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "plain-syntax" > < / span > < span class = "constant-syntax" > BEGIN_COMPILATION_MODE< / span > < span class = "plain-syntax" > ;< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Annotations::read_int< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > to_compile< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > suppress_newlines_ANNOT< / span > < span class = "plain-syntax" > ))< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > COMPILATION_MODE_EXIT< / span > < span class = "plain-syntax" > (< / span > < span class = "constant-syntax" > IMPLY_NEWLINES_IN_SAY_CMODE< / span > < span class = "plain-syntax" > );< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < a href = "5-cp.html#SP5" class = "function-link" > < span class = "function-syntax" > Routines::Compile::line< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > to_compile< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > INTER_VOID_VHMODE< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "constant-syntax" > END_COMPILATION_MODE< / span > < span class = "plain-syntax" > ;< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-26 12:52:50 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "5-cp.html#SP4_3" > § 4.3< / a > .< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP4_3_2" class = "paragraph-anchor" > < / a > < b > § 4.3.2. < / b > In fact, "now" propositions are never empty, but there's nothing in
2019-03-17 14:40:57 +02:00
principle wrong with asserting that the universally true proposition is
henceforth to be true, so we simply compile empty code in that case.
< / p >
2020-08-09 20:39:31 +03:00
< p class = "commentary" > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Compile a now midriff< / span > < span class = "named-paragraph-number" > 4.3.2< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > current_sentence< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > to_compile< / span > < span class = "plain-syntax" > ;< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > wording< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > XW< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > Node::get_text< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > -> < / span > < span class = "identifier-syntax" > down< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > parse_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > cs< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ;< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "function-syntax" > < s-condition> < / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > XW< / span > < span class = "plain-syntax" > )) < / span > < span class = "identifier-syntax" > cs< / span > < span class = "plain-syntax" > = < / span > < span class = "function-syntax" > < < rp> > < / span > < span class = "plain-syntax" > ; < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > cs< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > Specifications::new_UNKNOWN< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > XW< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > LOGIF< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > MATCHING< / span > < span class = "plain-syntax" > , < / span > < span class = "string-syntax" > "Now cond is $T\n"< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > cs< / span > < span class = "plain-syntax" > );< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > rv< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > Dash::check_condition< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > cs< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > LOGIF< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > MATCHING< / span > < span class = "plain-syntax" > , < / span > < span class = "string-syntax" > "After Dash, it's $T\n"< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > cs< / span > < span class = "plain-syntax" > );< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Node::is< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > cs< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > TEST_PROPOSITION_NT< / span > < span class = "plain-syntax" > )) {< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > rv< / span > < span class = "plain-syntax" > != < / span > < span class = "identifier-syntax" > NEVER_MATCH< / span > < span class = "plain-syntax" > ) {< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > pcalc_prop< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > prop< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > Specifications::to_proposition< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > cs< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prop< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "constant-syntax" > BEGIN_COMPILATION_MODE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > COMPILATION_MODE_ENTER< / span > < span class = "plain-syntax" > (< / span > < span class = "constant-syntax" > PERMIT_LOCALS_IN_TEXT_CMODE< / span > < span class = "plain-syntax" > );< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < a href = "2-dtd.html#SP10" class = "function-link" > < span class = "function-syntax" > Calculus::Deferrals::emit_now_proposition< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prop< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "constant-syntax" > END_COMPILATION_MODE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > }< / span >
2020-08-27 17:50:24 +03:00
< span class = "plain-syntax" > } < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Specifications::is_condition< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > cs< / span > < span class = "plain-syntax" > ))< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP4_3_2_1" class = "named-paragraph-link" > < span class = "named-paragraph" > Issue a problem message for the wrong sort of condition in a "now"< / span > < span class = "named-paragraph-number" > 4.3.2.1< / span > < / a > < / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > rv< / span > < span class = "plain-syntax" > != < / span > < span class = "identifier-syntax" > NEVER_MATCH< / span > < span class = "plain-syntax" > ) < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP4_3_2_2" class = "named-paragraph-link" > < span class = "named-paragraph" > Issue a problem message for an unrecognised condition< / span > < span class = "named-paragraph-number" > 4.3.2.2< / span > < / a > < / span > < span class = "plain-syntax" > ;< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-26 12:52:50 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "5-cp.html#SP4_3" > § 4.3< / a > .< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP4_3_2_1" class = "paragraph-anchor" > < / a > < b > § 4.3.2.1. < / b > A deluxe problem message.
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-08-09 20:39:31 +03:00
< p class = "commentary" > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Issue a problem message for the wrong sort of condition in a "now"< / span > < span class = "named-paragraph-number" > 4.3.2.1< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::quote_source< / span > < span class = "plain-syntax" > (1, < / span > < span class = "identifier-syntax" > current_sentence< / span > < span class = "plain-syntax" > );< / span >
2020-05-11 17:21:29 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::quote_wording< / span > < span class = "plain-syntax" > (2, < / span > < span class = "identifier-syntax" > Node::get_text< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > cs< / span > < span class = "plain-syntax" > ));< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Node::is< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > cs< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > TEST_VALUE_NT< / span > < span class = "plain-syntax" > )) {< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > StandardProblems::handmade_problem< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Task::syntax_tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > _p_< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > PM_BadNow1< / span > < span class = "plain-syntax" > ));< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::issue_problem_segment< / span > < span class = "plain-syntax" > (< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "You wrote %1, but although '%2' is a condition which it is legal "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "to test with 'if', 'when', and so forth, it is not something I "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "can arrange to happen on request. Whether it is true or not "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "depends on current circumstances: so to make it true, you will "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "need to adjust those circumstances."< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::issue_problem_end< / span > < span class = "plain-syntax" > ();< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > } < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Node::is< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > cs< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > LOGICAL_AND_NT< / span > < span class = "plain-syntax" > )) {< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > StandardProblems::handmade_problem< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Task::syntax_tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > _p_< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > PM_BadNow2< / span > < span class = "plain-syntax" > ));< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::issue_problem_segment< / span > < span class = "plain-syntax" > (< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "You wrote %1, but 'now' does not work with the condition '%2' "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "because it can only make one wish come true at a time: so it "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "doesn't like the 'and'. Try rewriting as two 'now's in a row?"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::issue_problem_end< / span > < span class = "plain-syntax" > ();< / span >
< span class = "plain-syntax" > } < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > {< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > StandardProblems::handmade_problem< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Task::syntax_tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > _p_< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > PM_BadNow3< / span > < span class = "plain-syntax" > ));< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::issue_problem_segment< / span > < span class = "plain-syntax" > (< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "You wrote %1, but '%2' isn't the sort of condition which can be "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "made to be true, in the way that 'the ball is on the table' can be "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "made true with a straightforward movement of one object (the ball)."< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::issue_problem_end< / span > < span class = "plain-syntax" > ();< / span >
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-26 12:52:50 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "5-cp.html#SP4_3_2" > § 4.3.2< / a > .< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP4_3_2_2" class = "paragraph-anchor" > < / a > < b > § 4.3.2.2. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Issue a problem message for an unrecognised condition< / span > < span class = "named-paragraph-number" > 4.3.2.2< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > LOG< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "$T\n"< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > current_sentence< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::quote_source< / span > < span class = "plain-syntax" > (1, < / span > < span class = "identifier-syntax" > current_sentence< / span > < span class = "plain-syntax" > );< / span >
2020-05-11 17:21:29 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::quote_wording< / span > < span class = "plain-syntax" > (2, < / span > < span class = "identifier-syntax" > Node::get_text< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > cs< / span > < span class = "plain-syntax" > ));< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > StandardProblems::handmade_problem< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Task::syntax_tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > _p_< / span > < span class = "plain-syntax" > (...));< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::issue_problem_segment< / span > < span class = "plain-syntax" > (< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "You wrote %1, but '%2' isn't a condition, so I can't see how to "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "make it true from here on."< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::issue_problem_end< / span > < span class = "plain-syntax" > ();< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-26 12:52:50 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "5-cp.html#SP4_3_2" > § 4.3.2< / a > .< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP_1" class = "paragraph-anchor" > < / a > < b > § .1. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Issue a problem message for an unrecognised action< / span > < span class = "named-paragraph-number" > .1< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::quote_source< / span > < span class = "plain-syntax" > (1, < / span > < span class = "identifier-syntax" > current_sentence< / span > < span class = "plain-syntax" > );< / span >
2020-05-11 17:21:29 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::quote_wording< / span > < span class = "plain-syntax" > (2, < / span > < span class = "identifier-syntax" > Node::get_text< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > cs< / span > < span class = "plain-syntax" > ));< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > StandardProblems::handmade_problem< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Task::syntax_tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > _p_< / span > < span class = "plain-syntax" > (...));< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::issue_problem_segment< / span > < span class = "plain-syntax" > (< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "You wrote %1, but '%2' isn't an action, so I can't see how to try it."< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::issue_problem_end< / span > < span class = "plain-syntax" > ();< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-05-03 03:01:21 +03:00
< ul class = "endnotetexts" > < li > This code is never used.< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP4_3_3" class = "paragraph-anchor" > < / a > < b > § 4.3.3. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Compile a named rulebook outline midriff< / span > < span class = "named-paragraph-number" > 4.3.3< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > current_sentence< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > to_compile< / span > < span class = "plain-syntax" > ;< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > named_rulebook_outcome< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > nrbo< / span > < span class = "plain-syntax" > = < / span > < span class = "function-syntax" > < < rp> > < / span > < span class = "plain-syntax" > ;< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > phrase_being_compiled< / span > < span class = "plain-syntax" > ) {< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > ram< / span > < span class = "plain-syntax" > = < / span > < a href = "3-pu.html#SP15" class = "function-link" > < span class = "function-syntax" > Phrases::Usage::get_effect< / span > < / a > < span class = "plain-syntax" > (& (< / span > < span class = "identifier-syntax" > phrase_being_compiled< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > usage_data< / span > < span class = "plain-syntax" > ));< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > ((< / span > < span class = "identifier-syntax" > ram< / span > < span class = "plain-syntax" > != < / span > < span class = "constant-syntax" > RULE_IN_RULEBOOK_EFF< / span > < span class = "plain-syntax" > ) & & < / span >
< span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > ram< / span > < span class = "plain-syntax" > != < / span > < span class = "constant-syntax" > RULE_NOT_IN_RULEBOOK_EFF< / span > < span class = "plain-syntax" > )) {< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::quote_source< / span > < span class = "plain-syntax" > (1, < / span > < span class = "identifier-syntax" > current_sentence< / span > < span class = "plain-syntax" > );< / span >
2020-05-11 17:21:29 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::quote_wording< / span > < span class = "plain-syntax" > (2, < / span > < span class = "identifier-syntax" > Node::get_text< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > to_compile< / span > < span class = "plain-syntax" > ));< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > StandardProblems::handmade_problem< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Task::syntax_tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > _p_< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > PM_MisplacedRulebookOutcome2< / span > < span class = "plain-syntax" > ));< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::issue_problem_segment< / span > < span class = "plain-syntax" > (< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "You wrote %1, but this is a rulebook outcome which can only be used "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "within rulebooks which recognise it. You've used it in a definition "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "which isn't for use in rulebooks at all, so it must be wrong here."< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::issue_problem_end< / span > < span class = "plain-syntax" > ();< / span >
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > }< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > rulebook< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > rb< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > Rulebooks::Outcomes::allow_outcome< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > nrbo< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > rb< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::quote_source< / span > < span class = "plain-syntax" > (1, < / span > < span class = "identifier-syntax" > current_sentence< / span > < span class = "plain-syntax" > );< / span >
2020-05-11 17:21:29 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::quote_wording< / span > < span class = "plain-syntax" > (2, < / span > < span class = "identifier-syntax" > Node::get_text< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > to_compile< / span > < span class = "plain-syntax" > ));< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::quote_wording< / span > < span class = "plain-syntax" > (3, < / span > < span class = "identifier-syntax" > rb< / span > < span class = "plain-syntax" > -> < / span > < span class = "identifier-syntax" > primary_name< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > StandardProblems::handmade_problem< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Task::syntax_tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > _p_< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > PM_MisplacedRulebookOutcome< / span > < span class = "plain-syntax" > ));< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::issue_problem_segment< / span > < span class = "plain-syntax" > (< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "You wrote %1, but this is a rulebook outcome which can only be used "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "within rulebooks which recognise it. You've used it in a rule which "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "has to be listed in the '%3' rulebook, where '%2' doesn't have a meaning."< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::issue_problem_end< / span > < span class = "plain-syntax" > ();< / span >
< span class = "plain-syntax" > }< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Rulebooks::Outcomes::compile_outcome< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > nrbo< / span > < span class = "plain-syntax" > );< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-26 12:52:50 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "5-cp.html#SP4_3" > § 4.3< / a > .< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP4_3_4" class = "paragraph-anchor" > < / a > < b > § 4.3.4. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Compile an if midriff< / span > < span class = "named-paragraph-number" > 4.3.4< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > -> < / span > < span class = "identifier-syntax" > down< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > next< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > next< / span > < span class = "plain-syntax" > ) < / span > < span class = "identifier-syntax" > Produce::inv_primitive< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > IFELSE_BIP< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::inv_primitive< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > IF_BIP< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::down< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > ());< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > current_sentence< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > to_compile< / span > < span class = "plain-syntax" > ;< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < a href = "5-cp.html#SP5" class = "function-link" > < span class = "function-syntax" > Routines::Compile::line< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > to_compile< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > INTER_VAL_VHMODE< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::code< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > ());< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::down< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > ());< / span >
< span class = "plain-syntax" > < / span > < a href = "4-pb.html#SP11" class = "function-link" > < span class = "function-syntax" > Frames::Blocks::open_code_block< / span > < / a > < span class = "plain-syntax" > ();< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > statement_count< / span > < span class = "plain-syntax" > = < / span > < a href = "5-cp.html#SP4" class = "function-link" > < span class = "function-syntax" > Routines::Compile::code_block< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > statement_count< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > -> < / span > < span class = "identifier-syntax" > down< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > next< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > FALSE< / 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" > p< / span > < span class = "plain-syntax" > -> < / span > < span class = "identifier-syntax" > down< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > next< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > next< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::up< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > ());< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::code< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > ());< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::down< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > ());< / span >
< span class = "plain-syntax" > < / span > < a href = "4-pb.html#SP12" class = "function-link" > < span class = "function-syntax" > Frames::Blocks::divide_code_block< / span > < / a > < span class = "plain-syntax" > ();< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > statement_count< / span > < span class = "plain-syntax" > = < / span > < a href = "5-cp.html#SP4" class = "function-link" > < span class = "function-syntax" > Routines::Compile::code_block< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > statement_count< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > -> < / span > < span class = "identifier-syntax" > down< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > next< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > next< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > }< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < a href = "4-pb.html#SP13" class = "function-link" > < span class = "function-syntax" > Frames::Blocks::close_code_block< / span > < / a > < span class = "plain-syntax" > ();< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::up< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > ());< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::up< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > ());< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-26 12:52:50 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "5-cp.html#SP4_3" > § 4.3< / a > .< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP4_3_5" class = "paragraph-anchor" > < / a > < b > § 4.3.5. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Compile a switch midriff< / span > < span class = "named-paragraph-number" > 4.3.5< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > current_sentence< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > to_compile< / span > < span class = "plain-syntax" > ;< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < a href = "5-cp.html#SP5" class = "function-link" > < span class = "function-syntax" > Routines::Compile::line< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > to_compile< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > INTER_VOID_VHMODE< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < a href = "4-pb.html#SP11" class = "function-link" > < span class = "function-syntax" > Frames::Blocks::open_code_block< / span > < / a > < span class = "plain-syntax" > ();< / span >
2020-05-03 03:01:21 +03:00
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > parse_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > val< / span > < span class = "plain-syntax" > = < / span > < a href = "4-pb.html#SP15" class = "function-link" > < span class = "function-syntax" > Frames::Blocks::switch_value< / span > < / a > < span class = "plain-syntax" > ();< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > val< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ) < / span > < span class = "identifier-syntax" > internal_error< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "no switch value"< / span > < span class = "plain-syntax" > );< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > kind< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > switch_kind< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > Specifications::to_kind< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > val< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > pointery< / 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" > inter_symbol< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > sw_v< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > NULL< / 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" > Kinds::Behaviour::uses_pointer_values< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > switch_kind< / span > < span class = "plain-syntax" > )) < / span > < span class = "identifier-syntax" > pointery< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ;< / span >
2020-08-09 20:39:31 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > LOG< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "Switch val is $T for kind %u pointery %d\n"< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > val< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > switch_kind< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > pointery< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > local_variable< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > lvar< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > NULL< / 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" > downs< / 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" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > pointery< / span > < span class = "plain-syntax" > ) {< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > lvar< / span > < span class = "plain-syntax" > = < / span > < a href = "4-lv.html#SP12" class = "function-link" > < span class = "function-syntax" > LocalVariables::add_switch_value< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > K_value< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > sw_v< / span > < span class = "plain-syntax" > = < / span > < a href = "4-lv.html#SP46" class = "function-link" > < span class = "function-syntax" > LocalVariables::declare_this< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > lvar< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > , < / span > < span class = "constant-syntax" > 7< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::inv_primitive< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > STORE_BIP< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::down< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > ());< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::ref_symbol< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > K_value< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > sw_v< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < a href = "2-cfs.html#SP8" class = "function-link" > < span class = "function-syntax" > Specifications::Compiler::emit_as_val< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > switch_kind< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > val< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::up< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > ());< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > } < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > {< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::inv_primitive< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > SWITCH_BIP< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::down< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > ());< / span >
< span class = "plain-syntax" > < / span > < a href = "2-cfs.html#SP8" class = "function-link" > < span class = "function-syntax" > Specifications::Compiler::emit_as_val< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > switch_kind< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > val< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::code< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > ());< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::down< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > ());< / span >
2020-05-03 03:01:21 +03:00
< 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" > c< / span > < span class = "plain-syntax" > = < / span > < span class = "constant-syntax" > 0< / span > < span class = "plain-syntax" > ;< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > for< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > parse_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > ow_node< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > -> < / span > < span class = "identifier-syntax" > down< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > next< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > next< / span > < span class = "plain-syntax" > ; < / span > < span class = "identifier-syntax" > ow_node< / span > < span class = "plain-syntax" > ; < / span > < span class = "identifier-syntax" > ow_node< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > ow_node< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > next< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > c< / span > < span class = "plain-syntax" > ++) {< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > current_sentence< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > ow_node< / span > < span class = "plain-syntax" > ;< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < a href = "4-pb.html#SP12" class = "function-link" > < span class = "function-syntax" > Frames::Blocks::divide_code_block< / span > < / a > < span class = "plain-syntax" > ();< / span >
2020-05-03 03:01:21 +03:00
2020-05-11 17:21:29 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Node::get_control_structure_used< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > ow_node< / span > < span class = "plain-syntax" > ) == < / span > < span class = "identifier-syntax" > default_case_CSP< / span > < span class = "plain-syntax" > ) {< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > pointery< / span > < span class = "plain-syntax" > ) < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP4_3_5_4" class = "named-paragraph-link" > < span class = "named-paragraph" > Handle a pointery default< / span > < span class = "named-paragraph-number" > 4.3.5.4< / span > < / a > < / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP4_3_5_2" class = "named-paragraph-link" > < span class = "named-paragraph" > Handle a non-pointery default< / span > < span class = "named-paragraph-number" > 4.3.5.2< / span > < / a > < / span > < span class = "plain-syntax" > ;< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > } < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > {< / span >
2020-05-11 17:21:29 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "function-syntax" > < s-type-expression-or-value> < / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Node::get_text< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > ow_node< / span > < span class = "plain-syntax" > ))) {< / span >
2020-05-09 01:13:45 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > parse_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > case_spec< / span > < span class = "plain-syntax" > = < / span > < span class = "function-syntax" > < < rp> > < / span > < span class = "plain-syntax" > ;< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > case_spec< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > NonlocalVariables::substitute_constants< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > case_spec< / span > < span class = "plain-syntax" > );< / span >
2020-05-11 17:21:29 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Node::set_evaluation< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > ow_node< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > case_spec< / span > < span class = "plain-syntax" > );< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Dash::check_value< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > case_spec< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ) != < / span > < span class = "identifier-syntax" > NEVER_MATCH< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > kind< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > case_kind< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > Specifications::to_kind< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > case_spec< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > instance< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > I< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > Rvalues::to_object_instance< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > case_spec< / 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" > I< / span > < span class = "plain-syntax" > ) < / span > < span class = "identifier-syntax" > case_kind< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > Instances::to_kind< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > I< / span > < span class = "plain-syntax" > );< / span >
2020-08-09 20:39:31 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > LOGIF< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > MATCHING< / span > < span class = "plain-syntax" > , < / span > < span class = "string-syntax" > "(h.3) switch kind is %u, case kind is %u\n"< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > switch_kind< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > case_kind< / span > < span class = "plain-syntax" > );< / span >
2020-05-11 17:21:29 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > ((< / span > < span class = "identifier-syntax" > Node::get_kind_of_value< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > case_spec< / span > < span class = "plain-syntax" > ) == < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ) & & (< / span > < span class = "identifier-syntax" > I< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > )) {< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::quote_source< / span > < span class = "plain-syntax" > (1, < / span > < span class = "identifier-syntax" > current_sentence< / span > < span class = "plain-syntax" > );< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::quote_kind< / span > < span class = "plain-syntax" > (2, < / span > < span class = "identifier-syntax" > switch_kind< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > StandardProblems::handmade_problem< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Task::syntax_tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > _p_< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > PM_CaseValueNonConstant< / span > < span class = "plain-syntax" > ));< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::issue_problem_segment< / span > < span class = "plain-syntax" > (< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "The case %1 is required to be a constant value, rather than "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "something which has different values at different times: "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "specifically, it has to be %2."< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::issue_problem_end< / span > < span class = "plain-syntax" > ();< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > case_spec< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > Rvalues::new_nothing_object_constant< / span > < span class = "plain-syntax" > ();< / span >
2020-08-12 01:59:29 +03:00
< span class = "plain-syntax" > } < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Kinds::compatible< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > case_kind< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > switch_kind< / span > < span class = "plain-syntax" > ) != < / span > < span class = "identifier-syntax" > ALWAYS_MATCH< / span > < span class = "plain-syntax" > ) {< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::quote_source< / span > < span class = "plain-syntax" > (1, < / span > < span class = "identifier-syntax" > current_sentence< / span > < span class = "plain-syntax" > );< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::quote_kind< / span > < span class = "plain-syntax" > (2, < / span > < span class = "identifier-syntax" > case_kind< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::quote_kind< / span > < span class = "plain-syntax" > (3, < / span > < span class = "identifier-syntax" > switch_kind< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > StandardProblems::handmade_problem< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Task::syntax_tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > _p_< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > PM_CaseValueMismatch< / span > < span class = "plain-syntax" > ));< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::issue_problem_segment< / span > < span class = "plain-syntax" > (< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "The case %1 has the wrong kind of value for the possibilities "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "being chosen from: %2 instead of %3."< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::issue_problem_end< / span > < span class = "plain-syntax" > ();< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > case_spec< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > Rvalues::new_nothing_object_constant< / span > < span class = "plain-syntax" > ();< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > } < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > {< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > pointery< / span > < span class = "plain-syntax" > ) < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP4_3_5_3" class = "named-paragraph-link" > < span class = "named-paragraph" > Handle a pointery case< / span > < span class = "named-paragraph-number" > 4.3.5.3< / span > < / a > < / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP4_3_5_1" class = "named-paragraph-link" > < span class = "named-paragraph" > Handle a non-pointery case< / span > < span class = "named-paragraph-number" > 4.3.5.1< / span > < / a > < / span > < span class = "plain-syntax" > ;< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > }< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > } < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP4_3_5_5" class = "named-paragraph-link" > < span class = "named-paragraph" > Issue problem message for unknown case value< / span > < span class = "named-paragraph-number" > 4.3.5.5< / span > < / a > < / span >
< span class = "plain-syntax" > } < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP4_3_5_5" class = "named-paragraph-link" > < span class = "named-paragraph" > Issue problem message for unknown case value< / span > < span class = "named-paragraph-number" > 4.3.5.5< / span > < / a > < / span > < span class = "plain-syntax" > ;< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > }< / 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" > pointery< / span > < span class = "plain-syntax" > ) {< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > while< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > downs< / span > < span class = "plain-syntax" > -- > < / span > < span class = "constant-syntax" > 0< / span > < span class = "plain-syntax" > ) < / span > < span class = "identifier-syntax" > Produce::up< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > ());< / span >
< span class = "plain-syntax" > < / span > < a href = "4-pb.html#SP13" class = "function-link" > < span class = "function-syntax" > Frames::Blocks::close_code_block< / span > < / a > < span class = "plain-syntax" > ();< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > } < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > {< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::up< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > ());< / span >
< span class = "plain-syntax" > < / span > < a href = "4-pb.html#SP13" class = "function-link" > < span class = "function-syntax" > Frames::Blocks::close_code_block< / span > < / a > < span class = "plain-syntax" > ();< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::up< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > ());< / span >
2020-05-03 03:01:21 +03:00
< 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" > problem_count< / span > < span class = "plain-syntax" > == < / span > < span class = "constant-syntax" > 0< / span > < span class = "plain-syntax" > )< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > for< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > parse_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > A< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > -> < / span > < span class = "identifier-syntax" > down< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > next< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > next< / span > < span class = "plain-syntax" > ; < / span > < span class = "identifier-syntax" > A< / span > < span class = "plain-syntax" > ; < / span > < span class = "identifier-syntax" > A< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > A< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > next< / span > < span class = "plain-syntax" > ) {< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > dup< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > for< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > parse_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > B< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > A< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > next< / span > < span class = "plain-syntax" > ; < / span > < span class = "identifier-syntax" > B< / span > < span class = "plain-syntax" > ; < / span > < span class = "identifier-syntax" > B< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > B< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > next< / span > < span class = "plain-syntax" > )< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Rvalues::compare_CONSTANT< / span > < span class = "plain-syntax" > (< / span >
2020-05-11 17:21:29 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Node::get_evaluation< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > A< / span > < span class = "plain-syntax" > ), < / span > < span class = "identifier-syntax" > Node::get_evaluation< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > B< / span > < span class = "plain-syntax" > )))< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > dup< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > TRUE< / 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" > dup< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > current_sentence< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > A< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::quote_source< / span > < span class = "plain-syntax" > (1, < / span > < span class = "identifier-syntax" > A< / span > < span class = "plain-syntax" > );< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::quote_spec< / span > < span class = "plain-syntax" > (2, < / span > < span class = "identifier-syntax" > Node::get_evaluation< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > A< / span > < span class = "plain-syntax" > ));< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > StandardProblems::handmade_problem< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Task::syntax_tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > _p_< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > PM_CaseValueDuplicated< / span > < span class = "plain-syntax" > ));< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::issue_problem_segment< / span > < span class = "plain-syntax" > (< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "The case %1 occurs more than once in this 'if' switch."< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::issue_problem_end< / span > < span class = "plain-syntax" > ();< / span >
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-26 12:52:50 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "5-cp.html#SP4_3" > § 4.3< / a > .< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP4_3_5_1" class = "paragraph-anchor" > < / a > < b > § 4.3.5.1. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Handle a non-pointery case< / span > < span class = "named-paragraph-number" > 4.3.5.1< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::inv_primitive< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > CASE_BIP< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::down< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > ());< / span >
< span class = "plain-syntax" > < / span > < a href = "2-cfs.html#SP8" class = "function-link" > < span class = "function-syntax" > Specifications::Compiler::emit_as_val< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > switch_kind< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > case_spec< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::code< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > ());< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::down< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > ());< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > statement_count< / span > < span class = "plain-syntax" > = < / span > < a href = "5-cp.html#SP4" class = "function-link" > < span class = "function-syntax" > Routines::Compile::code_block< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > statement_count< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > ow_node< / 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" > Produce::up< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > ());< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::up< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > ());< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-26 12:52:50 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "5-cp.html#SP4_3_5" > § 4.3.5< / a > .< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP4_3_5_2" class = "paragraph-anchor" > < / a > < b > § 4.3.5.2. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Handle a non-pointery default< / span > < span class = "named-paragraph-number" > 4.3.5.2< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::inv_primitive< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > DEFAULT_BIP< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::down< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > ());< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::code< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > ());< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::down< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > ());< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > statement_count< / span > < span class = "plain-syntax" > = < / span > < a href = "5-cp.html#SP4" class = "function-link" > < span class = "function-syntax" > Routines::Compile::code_block< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > statement_count< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > ow_node< / 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" > Produce::up< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > ());< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::up< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > ());< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-26 12:52:50 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "5-cp.html#SP4_3_5" > § 4.3.5< / a > .< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP4_3_5_3" class = "paragraph-anchor" > < / a > < b > § 4.3.5.3. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Handle a pointery case< / span > < span class = "named-paragraph-number" > 4.3.5.3< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > final_flag< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > FALSE< / 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" > ow_node< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > next< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ) < / span > < span class = "identifier-syntax" > final_flag< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ;< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > final_flag< / span > < span class = "plain-syntax" > ) < / span > < span class = "identifier-syntax" > Produce::inv_primitive< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > IF_BIP< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::inv_primitive< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > IFELSE_BIP< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::down< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > ());< / span >
< span class = "plain-syntax" > < / span > < a href = "4-lv.html#SP37" class = "function-link" > < span class = "function-syntax" > LocalVariables::set_kind< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > lvar< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > switch_kind< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > parse_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > sw_v< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > Lvalues::new_LOCAL_VARIABLE< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > EMPTY_WORDING< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > lvar< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > pcalc_prop< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > prop< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > Propositions::Abstract::to_set_relation< / span > < span class = "plain-syntax" > (< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > R_equality< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > sw_v< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > case_spec< / span > < span class = "plain-syntax" > );< / span >
2020-08-24 21:30:28 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Propositions::Checker::type_check< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prop< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > Propositions::Checker::tc_no_problem_reporting< / span > < span class = "plain-syntax" > ());< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < a href = "2-dtd.html#SP6" class = "function-link" > < span class = "function-syntax" > Calculus::Deferrals::emit_test_of_proposition< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > prop< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::code< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > ());< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::down< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > ());< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > statement_count< / span > < span class = "plain-syntax" > = < / span > < a href = "5-cp.html#SP4" class = "function-link" > < span class = "function-syntax" > Routines::Compile::code_block< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > statement_count< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > ow_node< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > final_flag< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ) {< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::up< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > ());< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::code< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > ());< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::down< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > ());< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > downs< / span > < span class = "plain-syntax" > += < / span > < span class = "constant-syntax" > 2< / span > < span class = "plain-syntax" > ;< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-26 12:52:50 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "5-cp.html#SP4_3_5" > § 4.3.5< / a > .< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP4_3_5_4" class = "paragraph-anchor" > < / a > < b > § 4.3.5.4. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Handle a pointery default< / span > < span class = "named-paragraph-number" > 4.3.5.4< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > statement_count< / span > < span class = "plain-syntax" > = < / span > < a href = "5-cp.html#SP4" class = "function-link" > < span class = "function-syntax" > Routines::Compile::code_block< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > statement_count< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > ow_node< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > );< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-26 12:52:50 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "5-cp.html#SP4_3_5" > § 4.3.5< / a > .< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP4_3_6" class = "paragraph-anchor" > < / a > < b > § 4.3.6. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Compile a standard midriff< / span > < span class = "named-paragraph-number" > 4.3.6< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > current_sentence< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > to_compile< / span > < span class = "plain-syntax" > ;< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < a href = "5-cp.html#SP5" class = "function-link" > < span class = "function-syntax" > Routines::Compile::line< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > to_compile< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > INTER_VOID_VHMODE< / span > < span class = "plain-syntax" > );< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-26 12:52:50 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "5-cp.html#SP4_3" > § 4.3< / a > .< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP4_4" class = "paragraph-anchor" > < / a > < b > § 4.4. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Compile the tail< / span > < span class = "named-paragraph-number" > 4.4< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > csp< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > if_CSP< / span > < span class = "plain-syntax" > ) < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP4_4_1" class = "named-paragraph-link" > < span class = "named-paragraph" > Compile an if tail< / span > < span class = "named-paragraph-number" > 4.4.1< / span > < / a > < / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > csp< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > switch_CSP< / span > < span class = "plain-syntax" > ) < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP4_4_2" class = "named-paragraph-link" > < span class = "named-paragraph" > Compile a switch tail< / span > < span class = "named-paragraph-number" > 4.4.2< / span > < / a > < / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > csp< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > say_CSP< / span > < span class = "plain-syntax" > ) < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP4_4_3" class = "named-paragraph-link" > < span class = "named-paragraph" > Compile a say tail< / span > < span class = "named-paragraph-number" > 4.4.3< / span > < / a > < / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > csp< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > instead_CSP< / span > < span class = "plain-syntax" > ) < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP4_4_4" class = "named-paragraph-link" > < span class = "named-paragraph" > Compile an instead tail< / span > < span class = "named-paragraph-number" > 4.4.4< / span > < / a > < / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > ControlStructures::opens_block< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > csp< / span > < span class = "plain-syntax" > )) < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP4_4_5" class = "named-paragraph-link" > < span class = "named-paragraph" > Compile a loop tail< / span > < span class = "named-paragraph-number" > 4.4.5< / span > < / a > < / span > < span class = "plain-syntax" > ;< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-26 12:52:50 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "5-cp.html#SP4" > § 4< / a > .< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP4_4_1" class = "paragraph-anchor" > < / a > < b > § 4.4.1. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Compile an if tail< / span > < span class = "named-paragraph-number" > 4.4.1< / span > < / span > < span class = "comment-syntax" > =< / span >
2019-03-17 14:40:57 +02:00
< / p >
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "plain-syntax" > ;< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-26 12:52:50 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "5-cp.html#SP4_4" > § 4.4< / a > .< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP4_4_2" class = "paragraph-anchor" > < / a > < b > § 4.4.2. < / b > Switch statements in I6 look much like those in C, but are written without
2020-05-03 03:01:21 +03:00
the ceaseless repetition of the keyword "case". Thus, < span class = "extract" > < span class = "extract-syntax" > 15:< / span > < / span > does what
< span class = "extract" > < span class = "extract-syntax" > case 15:< / span > < / span > would do in C. But < span class = "extract" > < span class = "extract-syntax" > default:< / span > < / span > is the same in both.
< / p >
2019-03-17 14:40:57 +02:00
2020-08-09 20:39:31 +03:00
< p class = "commentary" > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Compile a switch tail< / span > < span class = "named-paragraph-number" > 4.4.2< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "plain-syntax" > ;< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-26 12:52:50 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "5-cp.html#SP4_4" > § 4.4< / a > .< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP4_3_5_5" class = "paragraph-anchor" > < / a > < b > § 4.3.5.5. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Issue problem message for unknown case value< / span > < span class = "named-paragraph-number" > 4.3.5.5< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > StandardProblems::sentence_problem< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Task::syntax_tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > _p_< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > PM_CaseValueUnknown< / span > < span class = "plain-syntax" > ),< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "I don't recognise this case value"< / span > < span class = "plain-syntax" > ,< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "that is, the value written after the '--'."< / span > < span class = "plain-syntax" > );< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-26 12:52:50 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "5-cp.html#SP4_3_5" > § 4.3.5< / a > (twice).< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP_1" class = "paragraph-anchor" > < / a > < b > § .1. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > If this is a say group, but not a say control structure, notify the paragraphing code< / span > < span class = "named-paragraph-number" > .1< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< ul class = "endnotetexts" > < li > This code is never used.< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP4_4_3" class = "paragraph-anchor" > < / a > < b > § 4.4.3. < / b > As will be seen, two sets of labels and counters are kept here: see the
2019-03-17 14:40:57 +02:00
inline definitions for "say if" and similar.
< / p >
2020-08-09 20:39:31 +03:00
< p class = "commentary" > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Compile a say tail< / span > < span class = "named-paragraph-number" > 4.4.3< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > statement_count< / span > < span class = "plain-syntax" > = < / span > < a href = "5-cp.html#SP4" class = "function-link" > < span class = "function-syntax" > Routines::Compile::code_block< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > statement_count< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > );< / span >
2019-03-17 14:40:57 +02:00
2020-06-28 01:18:54 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > TEMPORARY_TEXT< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > SAYL< / span > < span class = "plain-syntax" > )< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE_TO< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > SAYL< / span > < span class = "plain-syntax" > , < / span > < span class = "string-syntax" > "."< / span > < span class = "plain-syntax" > );< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > JumpLabels::write< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > SAYL< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > I< / span > < span class = "string-syntax" > "Say"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::place_label< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > Produce::reserve_label< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > SAYL< / span > < span class = "plain-syntax" > ));< / span >
2020-06-28 01:18:54 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > DISCARD_TEXT< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > SAYL< / span > < span class = "plain-syntax" > )< / span >
2019-03-17 14:40:57 +02:00
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > JumpLabels::read_counter< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > I< / span > < span class = "string-syntax" > "Say"< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > );< / span >
2019-03-17 14:40:57 +02:00
2020-06-28 01:18:54 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > TEMPORARY_TEXT< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > SAYXL< / span > < span class = "plain-syntax" > )< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE_TO< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > SAYXL< / span > < span class = "plain-syntax" > , < / span > < span class = "string-syntax" > "."< / span > < span class = "plain-syntax" > );< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > JumpLabels::write< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > SAYXL< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > I< / span > < span class = "string-syntax" > "SayX"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::place_label< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > Produce::reserve_label< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > SAYXL< / span > < span class = "plain-syntax" > ));< / span >
2020-06-28 01:18:54 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > DISCARD_TEXT< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > SAYXL< / span > < span class = "plain-syntax" > )< / span >
2019-03-17 14:40:57 +02:00
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > JumpLabels::read_counter< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > I< / span > < span class = "string-syntax" > "SayX"< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > );< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-26 12:52:50 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "5-cp.html#SP4_4" > § 4.4< / a > .< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP4_4_4" class = "paragraph-anchor" > < / a > < b > § 4.4.4. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Compile an instead tail< / span > < span class = "named-paragraph-number" > 4.4.4< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::rtrue< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > ());< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-26 12:52:50 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "5-cp.html#SP4_4" > § 4.4< / a > .< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP4_4_5" class = "paragraph-anchor" > < / a > < b > § 4.4.5. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Compile a loop tail< / span > < span class = "named-paragraph-number" > 4.4.5< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < a href = "4-pb.html#SP11" class = "function-link" > < span class = "function-syntax" > Frames::Blocks::open_code_block< / span > < / a > < span class = "plain-syntax" > ();< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > statement_count< / span > < span class = "plain-syntax" > = < / span > < a href = "5-cp.html#SP4" class = "function-link" > < span class = "function-syntax" > Routines::Compile::code_block< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > statement_count< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > -> < / span > < span class = "identifier-syntax" > down< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > next< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > while< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Produce::level< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > ()) > < / span > < span class = "identifier-syntax" > L< / span > < span class = "plain-syntax" > ) < / span > < span class = "identifier-syntax" > Produce::up< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > ());< / span >
< span class = "plain-syntax" > < / span > < a href = "4-pb.html#SP13" class = "function-link" > < span class = "function-syntax" > Frames::Blocks::close_code_block< / span > < / a > < span class = "plain-syntax" > ();< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-26 12:52:50 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "5-cp.html#SP4_4" > § 4.4< / a > .< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP5" class = "paragraph-anchor" > < / a > < b > § 5. < / b > This routine takes the text of a line from a phrase definition, parses it,
2019-03-17 14:40:57 +02:00
type-checks it, and finally, all being well, compiles it.
< / p >
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "identifier-syntax" > parse_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > void_phrase_please< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ; < / span > < span class = "comment-syntax" > instructions for the typechecker< / span >
2020-08-26 12:52:50 +03:00
< span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > Routines::Compile::line< / 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" > Routines::Compile::line< / span > < / span > :< br / > < a href = "5-cp.html#SP4_3_1" > § 4.3.1< / a > , < a href = "5-cp.html#SP4_3_4" > § 4.3.4< / a > , < a href = "5-cp.html#SP4_3_5" > § 4.3.5< / a > , < a href = "5-cp.html#SP4_3_6" > § 4.3.6< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > parse_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > , < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > already_parsed< / span > < span class = "plain-syntax" > , < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > vhm< / span > < span class = "plain-syntax" > ) {< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > initial_problem_count< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > problem_count< / span > < span class = "plain-syntax" > ;< / span >
2020-05-11 17:21:29 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > LOGIF< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > EXPRESSIONS< / span > < span class = "plain-syntax" > , < / span > < span class = "string-syntax" > "\n-- -- Evaluating < %W> -- --\n"< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > Node::get_text< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > ));< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > LOGIF< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > EXPRESSIONS< / span > < span class = "plain-syntax" > , < / span > < span class = "string-syntax" > "(a) Parsing:\n"< / 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" > already_parsed< / span > < span class = "plain-syntax" > ) {< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > parse_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > inv< / span > < span class = "plain-syntax" > = < / span > < a href = "5-inv.html#SP24" class = "function-link" > < span class = "function-syntax" > Invocations::first_in_list< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > -> < / span > < span class = "identifier-syntax" > down< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > ((< / span > < span class = "identifier-syntax" > inv< / span > < span class = "plain-syntax" > ) & & < / span >
2020-05-11 17:21:29 +03:00
< span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Node::get_phrase_invoked< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > inv< / span > < span class = "plain-syntax" > )) & & < / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > (< / span > < a href = "3-ptd.html#SP21" class = "function-link" > < span class = "function-syntax" > Phrases::TypeData::is_a_say_phrase< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Node::get_phrase_invoked< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > inv< / span > < span class = "plain-syntax" > ))) & & < / span >
2020-05-11 17:21:29 +03:00
< span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Node::get_phrase_invoked< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > inv< / span > < span class = "plain-syntax" > )-> < / span > < span class = "element-syntax" > type_data< / span > < span class = "plain-syntax" > .< / span > < span class = "element-syntax" > as_say< / span > < span class = "plain-syntax" > .< / span > < span class = "element-syntax" > say_control_structure< / span > < span class = "plain-syntax" > == < / span > < span class = "constant-syntax" > NO_SAY_CS< / span > < span class = "plain-syntax" > )) {< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Produce::inv_call_iname< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > Hierarchy::find< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > PARACONTENT_HL< / span > < span class = "plain-syntax" > ));< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > } < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > {< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > ExParser::parse_void_phrase< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< 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" > initial_problem_count< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > problem_count< / span > < span class = "plain-syntax" > ) {< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > LOGIF< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > EXPRESSIONS< / span > < span class = "plain-syntax" > , < / span > < span class = "string-syntax" > "(b) Type checking:\n$E"< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > -> < / span > < span class = "identifier-syntax" > down< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Dash::check_invl< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< 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" > initial_problem_count< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > problem_count< / span > < span class = "plain-syntax" > ) {< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > LOGIF< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > EXPRESSIONS< / span > < span class = "plain-syntax" > , < / span > < span class = "string-syntax" > "(c) Compilation:\n$E"< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > -> < / span > < span class = "identifier-syntax" > down< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > value_holster< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > VH< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > Holsters::new< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > vhm< / span > < span class = "plain-syntax" > );< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < a href = "5-ci.html#SP2" class = "function-link" > < span class = "function-syntax" > Invocations::Compiler::compile_invocation_list< / span > < / a > < span class = "plain-syntax" > (& < / span > < span class = "identifier-syntax" > VH< / span > < span class = "plain-syntax" > ,< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > -> < / span > < span class = "identifier-syntax" > down< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > Node::get_text< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > ));< / span >
2020-05-03 03:01:21 +03:00
< 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" > initial_problem_count< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > problem_count< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > LOGIF< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > EXPRESSIONS< / span > < span class = "plain-syntax" > , < / span > < span class = "string-syntax" > "-- -- Completed -- --\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > } < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > {< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > LOGIF< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > EXPRESSIONS< / span > < span class = "plain-syntax" > , < / span > < span class = "string-syntax" > "-- -- Failed -- --\n"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP6" class = "paragraph-anchor" > < / a > < b > § 6. < / b > And this is where we are:
2019-03-17 14:40:57 +02:00
< / p >
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
2020-08-26 12:52:50 +03:00
< span class = "identifier-syntax" > parse_node< / span > < span class = "plain-syntax" > *< / span > < span class = "function-syntax" > Routines::Compile::line_being_compiled< / span > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > ) {< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > phrase_being_compiled< / span > < span class = "plain-syntax" > ) < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > current_sentence< / 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" > NULL< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP7" class = "paragraph-anchor" > < / a > < b > § 7. Validation of invocations. < / b > Recall that a complex text such as:
2019-03-17 14:40:57 +02:00
< / p >
< blockquote >
< p > "Platinum is shinier than [if a Colony is in the Supply Pile]gold[otherwise]silver."< / p >
< / blockquote >
2020-05-03 03:01:21 +03:00
< p class = "commentary" > is complied into a specification holding a list of invocations; in this case
2019-03-17 14:40:57 +02:00
there are five, invoking the phrases —
< / p >
< ul class = "items" > < li > (1) "say [text]"
< / li > < li > (2) "say if ..."
< / li > < li > (3) "say [text]"
< / li > < li > (4) "say otherwise"
< / li > < li > (5) "say [text]"
< / li > < / ul >
2020-05-03 03:01:21 +03:00
< p class = "commentary" > In the following routine we check this list to see that two sorts of control
2019-03-17 14:40:57 +02:00
structure are correctly used. The first is "say if"; here, for instance, it
would be an error to use "say otherwise" without "say if", or to have them
the wrong way round.
< / p >
2020-05-03 03:01:21 +03:00
< p class = "commentary" > The other is the SSP, the "segmented say phrase". For example:
2019-03-17 14:40:57 +02:00
< / p >
< blockquote >
< p > "The best defence is [one of]Lighthouse[or]Moat[or]having no money[at random]."< / p >
< / blockquote >
2020-05-03 03:01:21 +03:00
< p class = "commentary" > Here there are nine invocations, and the interesting ones have to come in
2019-03-17 14:40:57 +02:00
the sequence "[one of]" (a start), then any number of "[or]" segments (middles),
and lastly "[at random]" (an end). SSPs can even be nested, within limits:
< / p >
2020-05-03 03:01:21 +03:00
< pre class = "definitions code-font" > < span class = "definition-keyword" > define< / span > < span class = "constant-syntax" > MAX_COMPLEX_SAY_DEPTH< / span > < span class = "plain-syntax" > < / span > < span class = "constant-syntax" > 32< / span > < span class = "plain-syntax" > < / span > < span class = "comment-syntax" > and it would be terrible coding style to approach this< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
2020-08-26 12:52:50 +03:00
< span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > Routines::Compile::verify_say_node_list< / 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" > Routines::Compile::verify_say_node_list< / span > < / span > :< br / > < a href = "5-cp.html#SP4_2_1" > § 4.2.1< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > parse_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > say_node_list< / span > < span class = "plain-syntax" > ) {< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > problem_issued< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > FALSE< / 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" > say_invocations_found< / span > < span class = "plain-syntax" > = < / span > < span class = "constant-syntax" > 0< / span > < span class = "plain-syntax" > ;< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP7_1" class = "named-paragraph-link" > < span class = "named-paragraph" > Check that say control structures have been used in a correct sequence< / span > < span class = "named-paragraph-number" > 7.1< / span > < / a > < / span > < span class = "plain-syntax" > ;< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > say_invocations_found< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP7_1" class = "paragraph-anchor" > < / a > < b > § 7.1. < / b > Given correct code, the following does very little. It checks that structural
2019-03-17 14:40:57 +02:00
say phrases (SSPs), such as the substitutions here:
< / p >
< blockquote >
< p > "Platinum is shinier than [if a Colony is in the Supply Pile]gold[otherwise]silver."< / p >
< / blockquote >
2020-05-03 03:01:21 +03:00
< p class = "commentary" > ...are used correctly; for instance, that there isn't an "[otherwise]" before
2019-03-17 14:40:57 +02:00
the "[if...]".
< / p >
2020-05-03 03:01:21 +03:00
< p class = "commentary" > It doesn't quite do nothing, though, because it also counts the say phrases found.
< / p >
2019-03-17 14:40:57 +02:00
2020-08-09 20:39:31 +03:00
< p class = "commentary" > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Check that say control structures have been used in a correct sequence< / span > < span class = "named-paragraph-number" > 7.1< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > it_was_not_worth_adding< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > it_is_not_worth_adding< / span > < span class = "plain-syntax" > ;< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Strings::TextSubstitutions::it_is_not_worth_adding< / span > < span class = "plain-syntax" > ();< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > SSP_sp< / 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" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > SSP_stack< / span > < span class = "plain-syntax" > [< / span > < span class = "constant-syntax" > MAX_COMPLEX_SAY_DEPTH< / 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" > SSP_stack_otherwised< / span > < span class = "plain-syntax" > [< / span > < span class = "constant-syntax" > MAX_COMPLEX_SAY_DEPTH< / span > < span class = "plain-syntax" > ];< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > parse_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > SSP_invocations< / span > < span class = "plain-syntax" > [< / span > < span class = "constant-syntax" > MAX_COMPLEX_SAY_DEPTH< / 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" > say_if_nesting< / 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" > for< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > parse_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > say_node< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > say_node_list< / span > < span class = "plain-syntax" > ; < / span > < span class = "identifier-syntax" > say_node< / span > < span class = "plain-syntax" > ; < / span > < span class = "identifier-syntax" > say_node< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > say_node< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > next< / span > < span class = "plain-syntax" > ) {< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > parse_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > invl< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > say_node< / span > < span class = "plain-syntax" > -> < / span > < span class = "identifier-syntax" > down< / span > < span class = "plain-syntax" > ;< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > invl< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > parse_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > inv< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > LOOP_THROUGH_INVOCATION_LIST< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > inv< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > invl< / span > < span class = "plain-syntax" > ) {< / span >
2020-05-11 17:21:29 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > phrase< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > ph< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > Node::get_phrase_invoked< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > inv< / 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" > Node::get_phrase_invoked< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > inv< / span > < span class = "plain-syntax" > )) & & < / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > (< / span > < a href = "3-ptd.html#SP21" class = "function-link" > < span class = "function-syntax" > Phrases::TypeData::is_a_say_phrase< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > ph< / span > < span class = "plain-syntax" > ))) {< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > say_cs< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > ssp_tok< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > ssp_ctok< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > ssp_pos< / span > < span class = "plain-syntax" > ;< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < a href = "3-ptd.html#SP21" class = "function-link" > < span class = "function-syntax" > Phrases::TypeData::get_say_data< / span > < / a > < span class = "plain-syntax" > (& (< / span > < span class = "identifier-syntax" > ph< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > type_data< / span > < span class = "plain-syntax" > .< / span > < span class = "element-syntax" > as_say< / span > < span class = "plain-syntax" > ),< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > & < / span > < span class = "identifier-syntax" > say_cs< / span > < span class = "plain-syntax" > , & < / span > < span class = "identifier-syntax" > ssp_tok< / span > < span class = "plain-syntax" > , & < / span > < span class = "identifier-syntax" > ssp_ctok< / span > < span class = "plain-syntax" > , & < / span > < span class = "identifier-syntax" > ssp_pos< / span > < span class = "plain-syntax" > );< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > ssp_pos< / span > < span class = "plain-syntax" > == < / span > < span class = "constant-syntax" > SSP_START< / span > < span class = "plain-syntax" > ) < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP7_1_1" class = "named-paragraph-link" > < span class = "named-paragraph" > This starts a complex SSP< / span > < span class = "named-paragraph-number" > 7.1.1< / span > < / a > < / 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" > ssp_pos< / span > < span class = "plain-syntax" > == < / span > < span class = "constant-syntax" > SSP_MIDDLE< / span > < span class = "plain-syntax" > ) < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP7_1_2" class = "named-paragraph-link" > < span class = "named-paragraph" > This is a middle term in a complex SSP< / span > < span class = "named-paragraph-number" > 7.1.2< / span > < / a > < / 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" > ssp_pos< / span > < span class = "plain-syntax" > == < / span > < span class = "constant-syntax" > SSP_END< / span > < span class = "plain-syntax" > ) < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP7_1_3" class = "named-paragraph-link" > < span class = "named-paragraph" > This ends a complex SSP< / span > < span class = "named-paragraph-number" > 7.1.3< / span > < / a > < / span > < span class = "plain-syntax" > ;< / span >
2020-05-03 03:01:21 +03:00
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > say_cs< / span > < span class = "plain-syntax" > == < / span > < span class = "constant-syntax" > IF_SAY_CS< / span > < span class = "plain-syntax" > ) < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP7_1_4" class = "named-paragraph-link" > < span class = "named-paragraph" > This is a say if< / span > < span class = "named-paragraph-number" > 7.1.4< / span > < / a > < / span > < span class = "plain-syntax" > ;< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > ((< / span > < span class = "identifier-syntax" > say_cs< / span > < span class = "plain-syntax" > == < / span > < span class = "constant-syntax" > OTHERWISE_SAY_CS< / span > < span class = "plain-syntax" > ) || (< / span > < span class = "identifier-syntax" > say_cs< / span > < span class = "plain-syntax" > == < / span > < span class = "constant-syntax" > OTHERWISE_IF_SAY_CS< / span > < span class = "plain-syntax" > ))< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP7_1_5" class = "named-paragraph-link" > < span class = "named-paragraph" > This is a say otherwise< / span > < span class = "named-paragraph-number" > 7.1.5< / span > < / a > < / 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" > say_cs< / span > < span class = "plain-syntax" > == < / span > < span class = "constant-syntax" > END_IF_SAY_CS< / span > < span class = "plain-syntax" > ) < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP7_1_6" class = "named-paragraph-link" > < span class = "named-paragraph" > This is a say end if< / span > < span class = "named-paragraph-number" > 7.1.6< / span > < / a > < / span > < span class = "plain-syntax" > ;< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > say_invocations_found< / span > < span class = "plain-syntax" > ++;< / span >
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > }< / 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" > SSP_sp< / 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" > if< / span > < span class = "plain-syntax" > ((< / span > < span class = "identifier-syntax" > SSP_sp< / span > < span class = "plain-syntax" > == < / span > < span class = "constant-syntax" > 1< / span > < span class = "plain-syntax" > ) & & (< / span > < span class = "identifier-syntax" > SSP_stack< / span > < span class = "plain-syntax" > [0] == -1)) {< / span >
< span class = "plain-syntax" > < / span > < span class = "comment-syntax" > an if without an end if, which uniquely is legal< / span >
< span class = "plain-syntax" > } < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > {< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP7_1_7" class = "named-paragraph-link" > < span class = "named-paragraph" > Issue a problem message for an SSP without end< / span > < span class = "named-paragraph-number" > 7.1.7< / span > < / a > < / span > < span class = "plain-syntax" > ;< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > it_is_not_worth_adding< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > it_was_not_worth_adding< / span > < span class = "plain-syntax" > ;< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-26 12:52:50 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "5-cp.html#SP7" > § 7< / a > .< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP7_1_1" class = "paragraph-anchor" > < / a > < b > § 7.1.1. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > This starts a complex SSP< / span > < span class = "named-paragraph-number" > 7.1.1< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > SSP_sp< / span > < span class = "plain-syntax" > > = < / span > < span class = "constant-syntax" > MAX_COMPLEX_SAY_DEPTH< / span > < span class = "plain-syntax" > ) {< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP7_1_1_1" class = "named-paragraph-link" > < span class = "named-paragraph" > Issue a problem message for an overcomplex SSP< / span > < span class = "named-paragraph-number" > 7.1.1.1< / span > < / a > < / span > < span class = "plain-syntax" > ;< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > } < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > {< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > SSP_invocations< / span > < span class = "plain-syntax" > [< / span > < span class = "identifier-syntax" > SSP_sp< / span > < span class = "plain-syntax" > ] = < / span > < span class = "identifier-syntax" > inv< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > SSP_stack_otherwised< / span > < span class = "plain-syntax" > [< / span > < span class = "identifier-syntax" > SSP_sp< / 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" > SSP_stack< / span > < span class = "plain-syntax" > [< / span > < span class = "identifier-syntax" > SSP_sp< / span > < span class = "plain-syntax" > ++] = < / span > < span class = "identifier-syntax" > ssp_tok< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-26 12:52:50 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "5-cp.html#SP7_1" > § 7.1< / a > .< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP7_1_2" class = "paragraph-anchor" > < / a > < b > § 7.1.2. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > This is a middle term in a complex SSP< / span > < span class = "named-paragraph-number" > 7.1.2< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > ((< / span > < span class = "identifier-syntax" > SSP_sp< / span > < span class = "plain-syntax" > > < / span > < span class = "constant-syntax" > 0< / span > < span class = "plain-syntax" > ) & & (< / span > < span class = "identifier-syntax" > SSP_stack< / span > < span class = "plain-syntax" > [< / span > < span class = "identifier-syntax" > SSP_sp< / span > < span class = "plain-syntax" > -1] != -1) & & < / span >
< span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > compare_words< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > SSP_stack< / span > < span class = "plain-syntax" > [< / span > < span class = "identifier-syntax" > SSP_sp< / span > < span class = "plain-syntax" > -1], < / span > < span class = "identifier-syntax" > ssp_tok< / span > < span class = "plain-syntax" > ))) {< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Annotations::write_int< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > SSP_invocations< / span > < span class = "plain-syntax" > [< / span > < span class = "identifier-syntax" > SSP_sp< / span > < span class = "plain-syntax" > -1], < / span > < span class = "identifier-syntax" > ssp_segment_count_ANNOT< / span > < span class = "plain-syntax" > ,< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Annotations::read_int< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > SSP_invocations< / span > < span class = "plain-syntax" > [< / span > < span class = "identifier-syntax" > SSP_sp< / span > < span class = "plain-syntax" > -1], < / span > < span class = "identifier-syntax" > ssp_segment_count_ANNOT< / span > < span class = "plain-syntax" > )+1);< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Annotations::write_int< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > inv< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > ssp_segment_count_ANNOT< / span > < span class = "plain-syntax" > ,< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Annotations::read_int< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > SSP_invocations< / span > < span class = "plain-syntax" > [< / span > < span class = "identifier-syntax" > SSP_sp< / span > < span class = "plain-syntax" > -1], < / span > < span class = "identifier-syntax" > ssp_segment_count_ANNOT< / span > < span class = "plain-syntax" > ));< / span >
< span class = "plain-syntax" > } < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP7_1_2_1" class = "named-paragraph-link" > < span class = "named-paragraph" > Issue a problem message for middle without start< / span > < span class = "named-paragraph-number" > 7.1.2.1< / span > < / a > < / span > < span class = "plain-syntax" > ;< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-26 12:52:50 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "5-cp.html#SP7_1" > § 7.1< / a > .< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP7_1_3" class = "paragraph-anchor" > < / a > < b > § 7.1.3. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > This ends a complex SSP< / span > < span class = "named-paragraph-number" > 7.1.3< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > ((< / span > < span class = "identifier-syntax" > SSP_sp< / span > < span class = "plain-syntax" > > < / span > < span class = "constant-syntax" > 0< / span > < span class = "plain-syntax" > ) & & (< / span > < span class = "identifier-syntax" > SSP_stack< / span > < span class = "plain-syntax" > [< / span > < span class = "identifier-syntax" > SSP_sp< / span > < span class = "plain-syntax" > -1] != -1) & & < / span >
< span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > compare_words< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > SSP_stack< / span > < span class = "plain-syntax" > [< / span > < span class = "identifier-syntax" > SSP_sp< / span > < span class = "plain-syntax" > -1], < / span > < span class = "identifier-syntax" > ssp_tok< / span > < span class = "plain-syntax" > ))) {< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Annotations::write_int< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > SSP_invocations< / span > < span class = "plain-syntax" > [< / span > < span class = "identifier-syntax" > SSP_sp< / span > < span class = "plain-syntax" > -1], < / span > < span class = "identifier-syntax" > ssp_segment_count_ANNOT< / span > < span class = "plain-syntax" > ,< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Annotations::read_int< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > SSP_invocations< / span > < span class = "plain-syntax" > [< / span > < span class = "identifier-syntax" > SSP_sp< / span > < span class = "plain-syntax" > -1], < / span > < span class = "identifier-syntax" > ssp_segment_count_ANNOT< / span > < span class = "plain-syntax" > )+1);< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Annotations::write_int< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > SSP_invocations< / span > < span class = "plain-syntax" > [< / span > < span class = "identifier-syntax" > SSP_sp< / span > < span class = "plain-syntax" > -1], < / span > < span class = "identifier-syntax" > ssp_closing_segment_wn_ANNOT< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > ssp_ctok< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Annotations::write_int< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > inv< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > ssp_segment_count_ANNOT< / span > < span class = "plain-syntax" > ,< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Annotations::read_int< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > SSP_invocations< / span > < span class = "plain-syntax" > [< / span > < span class = "identifier-syntax" > SSP_sp< / span > < span class = "plain-syntax" > -1], < / span > < span class = "identifier-syntax" > ssp_segment_count_ANNOT< / span > < span class = "plain-syntax" > ));< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > SSP_sp< / span > < span class = "plain-syntax" > --;< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > } < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP7_1_3_1" class = "named-paragraph-link" > < span class = "named-paragraph" > Issue a problem message for end without start< / span > < span class = "named-paragraph-number" > 7.1.3.1< / span > < / a > < / span > < span class = "plain-syntax" > ;< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-26 12:52:50 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "5-cp.html#SP7_1" > § 7.1< / a > .< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP7_1_4" class = "paragraph-anchor" > < / a > < b > § 7.1.4. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > This is a say if< / span > < span class = "named-paragraph-number" > 7.1.4< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > say_if_nesting< / span > < span class = "plain-syntax" > == < / span > < span class = "constant-syntax" > 0< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > say_if_nesting< / span > < span class = "plain-syntax" > ++;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > SSP_invocations< / span > < span class = "plain-syntax" > [< / span > < span class = "identifier-syntax" > SSP_sp< / span > < span class = "plain-syntax" > ] = < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > SSP_stack_otherwised< / span > < span class = "plain-syntax" > [< / span > < span class = "identifier-syntax" > SSP_sp< / 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" > SSP_stack< / span > < span class = "plain-syntax" > [< / span > < span class = "identifier-syntax" > SSP_sp< / span > < span class = "plain-syntax" > ++] = -1;< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > } < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP7_1_4_1" class = "named-paragraph-link" > < span class = "named-paragraph" > Issue a problem message for nested say if< / span > < span class = "named-paragraph-number" > 7.1.4.1< / span > < / a > < / span > < span class = "plain-syntax" > ;< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-26 12:52:50 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "5-cp.html#SP7_1" > § 7.1< / a > .< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP7_1_5" class = "paragraph-anchor" > < / a > < b > § 7.1.5. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > This is a say otherwise< / span > < span class = "named-paragraph-number" > 7.1.5< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > say_if_nesting< / span > < span class = "plain-syntax" > == < / span > < span class = "constant-syntax" > 0< / span > < span class = "plain-syntax" > )< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP7_1_5_1" class = "named-paragraph-link" > < span class = "named-paragraph" > Issue a problem message for say otherwise without say if< / span > < span class = "named-paragraph-number" > 7.1.5.1< / span > < / a > < / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > SSP_sp< / 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" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > SSP_stack< / span > < span class = "plain-syntax" > [< / span > < span class = "identifier-syntax" > SSP_sp< / span > < span class = "plain-syntax" > -1] != -1)< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP7_1_5_2" class = "named-paragraph-link" > < span class = "named-paragraph" > Issue a problem message for say otherwise interleaved with another construction< / span > < span class = "named-paragraph-number" > 7.1.5.2< / span > < / a > < / span > < span class = "plain-syntax" > ;< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > SSP_stack_otherwised< / span > < span class = "plain-syntax" > [< / span > < span class = "identifier-syntax" > SSP_sp< / span > < span class = "plain-syntax" > -1])< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP7_1_5_3" class = "named-paragraph-link" > < span class = "named-paragraph" > Issue a problem message for two say otherwises< / span > < span class = "named-paragraph-number" > 7.1.5.3< / span > < / a > < / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > say_cs< / span > < span class = "plain-syntax" > == < / span > < span class = "constant-syntax" > OTHERWISE_SAY_CS< / span > < span class = "plain-syntax" > ) < / span > < span class = "identifier-syntax" > SSP_stack_otherwised< / span > < span class = "plain-syntax" > [< / span > < span class = "identifier-syntax" > SSP_sp< / span > < span class = "plain-syntax" > -1] = < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-26 12:52:50 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "5-cp.html#SP7_1" > § 7.1< / a > .< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP7_1_6" class = "paragraph-anchor" > < / a > < b > § 7.1.6. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > This is a say end if< / span > < span class = "named-paragraph-number" > 7.1.6< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > say_if_nesting< / span > < span class = "plain-syntax" > == < / span > < span class = "constant-syntax" > 0< / span > < span class = "plain-syntax" > ) < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP7_1_6_1" class = "named-paragraph-link" > < span class = "named-paragraph" > Issue a problem message for say end if without say if< / span > < span class = "named-paragraph-number" > 7.1.6.1< / span > < / a > < / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > ((< / span > < span class = "identifier-syntax" > SSP_sp< / span > < span class = "plain-syntax" > > < / span > < span class = "constant-syntax" > 0< / span > < span class = "plain-syntax" > ) & & (< / span > < span class = "identifier-syntax" > SSP_stack< / span > < span class = "plain-syntax" > [< / span > < span class = "identifier-syntax" > SSP_sp< / span > < span class = "plain-syntax" > -1] != -1))< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "named-paragraph-container code-font" > < a href = "5-cp.html#SP7_1_6_2" class = "named-paragraph-link" > < span class = "named-paragraph" > Issue a problem message for say end if interleaved with another construction< / span > < span class = "named-paragraph-number" > 7.1.6.2< / span > < / a > < / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > {< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > say_if_nesting< / span > < span class = "plain-syntax" > --;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > SSP_sp< / span > < span class = "plain-syntax" > --;< / span >
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-26 12:52:50 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "5-cp.html#SP7_1" > § 7.1< / a > .< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP7_1_2_1" class = "paragraph-anchor" > < / a > < b > § 7.1.2.1. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Issue a problem message for middle without start< / span > < span class = "named-paragraph-number" > 7.1.2.1< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > problem_issued< / 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" > Problems::quote_source< / span > < span class = "plain-syntax" > (1, < / span > < span class = "identifier-syntax" > current_sentence< / span > < span class = "plain-syntax" > );< / span >
2020-05-11 17:21:29 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::quote_wording< / span > < span class = "plain-syntax" > (2, < / span > < span class = "identifier-syntax" > Node::get_text< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > inv< / span > < span class = "plain-syntax" > ));< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > StandardProblems::handmade_problem< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Task::syntax_tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > _p_< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > PM_ComplicatedSayStructure< / span > < span class = "plain-syntax" > ));< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::issue_problem_segment< / span > < span class = "plain-syntax" > (< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "In the text at %1, the text substitution '[%2]' ought to occur as the "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "middle part of its construction, but it appears to be on its own."< / span > < span class = "plain-syntax" > );< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < a href = "5-cp.html#SP8" class = "function-link" > < span class = "function-syntax" > Routines::Compile::add_say_construction_to_error< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > ssp_tok< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::issue_problem_end< / span > < span class = "plain-syntax" > ();< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > problem_issued< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-26 12:52:50 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "5-cp.html#SP7_1_2" > § 7.1.2< / a > .< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP7_1_3_1" class = "paragraph-anchor" > < / a > < b > § 7.1.3.1. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Issue a problem message for end without start< / span > < span class = "named-paragraph-number" > 7.1.3.1< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > problem_issued< / 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" > Problems::quote_source< / span > < span class = "plain-syntax" > (1, < / span > < span class = "identifier-syntax" > current_sentence< / span > < span class = "plain-syntax" > );< / span >
2020-05-11 17:21:29 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::quote_wording< / span > < span class = "plain-syntax" > (2, < / span > < span class = "identifier-syntax" > Node::get_text< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > inv< / span > < span class = "plain-syntax" > ));< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > StandardProblems::handmade_problem< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Task::syntax_tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > _p_< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > PM_ComplicatedSayStructure2< / span > < span class = "plain-syntax" > ));< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::issue_problem_segment< / span > < span class = "plain-syntax" > (< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "In the text at %1, the text substitution '[%2]' ought to occur as the "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "ending part of its construction, but it appears to be on its own."< / span > < span class = "plain-syntax" > );< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < a href = "5-cp.html#SP8" class = "function-link" > < span class = "function-syntax" > Routines::Compile::add_say_construction_to_error< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > ssp_tok< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::issue_problem_end< / span > < span class = "plain-syntax" > ();< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > problem_issued< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-26 12:52:50 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "5-cp.html#SP7_1_3" > § 7.1.3< / a > .< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP7_1_4_1" class = "paragraph-anchor" > < / a > < b > § 7.1.4.1. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Issue a problem message for nested say if< / span > < span class = "named-paragraph-number" > 7.1.4.1< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > problem_issued< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ) {< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > StandardProblems::sentence_problem< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Task::syntax_tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > _p_< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > PM_SayIfNested< / span > < span class = "plain-syntax" > ),< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "a second '[if ...]' text substitution occurs inside an existing one"< / span > < span class = "plain-syntax" > ,< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "which makes this text too complicated. While a single text can contain "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "more than one '[if ...]', this can only happen if the old if is finished "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "with an '[end if]' or the new one is written '[otherwise if]'. If you "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "need more complicated variety than this allows, the best approach is "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "to define a new text substitution of your own ('To say fiddly details: "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "...') and then use it in this text by including the '[fiddly details]'."< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > problem_issued< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-26 12:52:50 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "5-cp.html#SP7_1_4" > § 7.1.4< / a > .< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP7_1_1_1" class = "paragraph-anchor" > < / a > < b > § 7.1.1.1. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Issue a problem message for an overcomplex SSP< / span > < span class = "named-paragraph-number" > 7.1.1.1< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > problem_issued< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ) {< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > StandardProblems::sentence_problem< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Task::syntax_tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > _p_< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > PM_SayOverComplex< / span > < span class = "plain-syntax" > ),< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "this is too complex a text substitution"< / span > < span class = "plain-syntax" > ,< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "and needs to be simplified. You might find it helful to define "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "a new text substitution of your own ('To say fiddly details: "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "...') and then use it in this text by including the '[fiddly details]'."< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > problem_issued< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-26 12:52:50 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "5-cp.html#SP7_1_1" > § 7.1.1< / a > .< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP7_1_5_1" class = "paragraph-anchor" > < / a > < b > § 7.1.5.1. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Issue a problem message for say otherwise without say if< / span > < span class = "named-paragraph-number" > 7.1.5.1< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > problem_issued< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ) {< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > StandardProblems::sentence_problem< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Task::syntax_tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > _p_< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > PM_SayOtherwiseWithoutIf< / span > < span class = "plain-syntax" > ),< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "an '[otherwise]' text substitution occurs where there appears to be no "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "[if ...]"< / span > < span class = "plain-syntax" > ,< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "which doesn't make sense - there is nothing for it to be otherwise to."< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > problem_issued< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-26 12:52:50 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "5-cp.html#SP7_1_5" > § 7.1.5< / a > .< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP7_1_5_2" class = "paragraph-anchor" > < / a > < b > § 7.1.5.2. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Issue a problem message for say otherwise interleaved with another construction< / span > < span class = "named-paragraph-number" > 7.1.5.2< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > problem_issued< / 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" > Problems::quote_source< / span > < span class = "plain-syntax" > (1, < / span > < span class = "identifier-syntax" > current_sentence< / span > < span class = "plain-syntax" > );< / span >
2020-05-11 17:21:29 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::quote_wording< / span > < span class = "plain-syntax" > (2, < / span > < span class = "identifier-syntax" > Node::get_text< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > inv< / span > < span class = "plain-syntax" > ));< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > StandardProblems::handmade_problem< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Task::syntax_tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > _p_< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > PM_ComplicatedSayStructure5< / span > < span class = "plain-syntax" > ));< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::issue_problem_segment< / span > < span class = "plain-syntax" > (< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "In the text at %1, the '[%2]' ought to occur inside an [if ...], but "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "is cut off because it has been interleaved with a complicated say "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "construction."< / span > < span class = "plain-syntax" > );< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < a href = "5-cp.html#SP8" class = "function-link" > < span class = "function-syntax" > Routines::Compile::add_say_construction_to_error< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > SSP_stack< / span > < span class = "plain-syntax" > [< / span > < span class = "identifier-syntax" > SSP_sp< / span > < span class = "plain-syntax" > -1]);< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::issue_problem_end< / span > < span class = "plain-syntax" > ();< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > problem_issued< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-26 12:52:50 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "5-cp.html#SP7_1_5" > § 7.1.5< / a > .< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP7_1_5_3" class = "paragraph-anchor" > < / a > < b > § 7.1.5.3. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Issue a problem message for two say otherwises< / span > < span class = "named-paragraph-number" > 7.1.5.3< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > problem_issued< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ) {< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > StandardProblems::sentence_problem< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Task::syntax_tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > _p_< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > PM_TwoSayOtherwises< / span > < span class = "plain-syntax" > ),< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "there's already an (unconditional) \"[otherwise]\" or \"[else]\" "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "in this text substitution"< / span > < span class = "plain-syntax" > ,< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "so it doesn't make sense to follow that with a further one."< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > problem_issued< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-26 12:52:50 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "5-cp.html#SP7_1_5" > § 7.1.5< / a > .< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP7_1_6_1" class = "paragraph-anchor" > < / a > < b > § 7.1.6.1. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Issue a problem message for say end if without say if< / span > < span class = "named-paragraph-number" > 7.1.6.1< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > problem_issued< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ) {< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > StandardProblems::sentence_problem< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Task::syntax_tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > _p_< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > PM_SayEndIfWithoutSayIf< / span > < span class = "plain-syntax" > ),< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "an '[end if]' text substitution occurs where there appears to be no "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "[if ...]"< / span > < span class = "plain-syntax" > ,< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "which doesn't make sense - there is nothing for it to end."< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > problem_issued< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-26 12:52:50 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "5-cp.html#SP7_1_6" > § 7.1.6< / a > .< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP7_1_6_2" class = "paragraph-anchor" > < / a > < b > § 7.1.6.2. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Issue a problem message for say end if interleaved with another construction< / span > < span class = "named-paragraph-number" > 7.1.6.2< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > problem_issued< / 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" > Problems::quote_source< / span > < span class = "plain-syntax" > (1, < / span > < span class = "identifier-syntax" > current_sentence< / span > < span class = "plain-syntax" > );< / span >
2020-05-11 17:21:29 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::quote_wording< / span > < span class = "plain-syntax" > (2, < / span > < span class = "identifier-syntax" > Node::get_text< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > inv< / span > < span class = "plain-syntax" > ));< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > StandardProblems::handmade_problem< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Task::syntax_tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > _p_< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > PM_ComplicatedSayStructure4< / span > < span class = "plain-syntax" > ));< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::issue_problem_segment< / span > < span class = "plain-syntax" > (< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "In the text at %1, the '[%2]' is cut off from its [if ...], because "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "it has been interleaved with a complicated say construction."< / span > < span class = "plain-syntax" > );< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < a href = "5-cp.html#SP8" class = "function-link" > < span class = "function-syntax" > Routines::Compile::add_say_construction_to_error< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > SSP_stack< / span > < span class = "plain-syntax" > [< / span > < span class = "identifier-syntax" > SSP_sp< / span > < span class = "plain-syntax" > -1]);< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::issue_problem_end< / span > < span class = "plain-syntax" > ();< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > problem_issued< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-26 12:52:50 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "5-cp.html#SP7_1_6" > § 7.1.6< / a > .< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP7_1_7" class = "paragraph-anchor" > < / a > < b > § 7.1.7. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Issue a problem message for an SSP without end< / span > < span class = "named-paragraph-number" > 7.1.7< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > problem_issued< / 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" > parse_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > stinv< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > NULL< / 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" > i< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > ssp_tok< / span > < span class = "plain-syntax" > = -1;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > for< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > i< / span > < span class = "plain-syntax" > =0; < / span > < span class = "identifier-syntax" > i< / span > < span class = "plain-syntax" > < < / span > < span class = "identifier-syntax" > SSP_sp< / span > < span class = "plain-syntax" > ; < / span > < span class = "identifier-syntax" > i< / 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" > SSP_invocations< / span > < span class = "plain-syntax" > [< / span > < span class = "identifier-syntax" > i< / span > < span class = "plain-syntax" > ]) {< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > stinv< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > SSP_invocations< / span > < span class = "plain-syntax" > [< / span > < span class = "identifier-syntax" > i< / span > < span class = "plain-syntax" > ];< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > ssp_tok< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > SSP_stack< / span > < span class = "plain-syntax" > [< / span > < span class = "identifier-syntax" > i< / span > < span class = "plain-syntax" > ];< / 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" > stinv< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::quote_source< / span > < span class = "plain-syntax" > (1, < / span > < span class = "identifier-syntax" > current_sentence< / span > < span class = "plain-syntax" > );< / span >
2020-05-11 17:21:29 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::quote_wording< / span > < span class = "plain-syntax" > (2, < / span > < span class = "identifier-syntax" > Node::get_text< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > stinv< / span > < span class = "plain-syntax" > ));< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > StandardProblems::handmade_problem< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Task::syntax_tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > _p_< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > PM_ComplicatedSayStructure3< / span > < span class = "plain-syntax" > ));< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::issue_problem_segment< / span > < span class = "plain-syntax" > (< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "In the text at %1, the text substitution '[%2]' seems to start a "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "complicated say construction, but it doesn't have a matching end."< / span > < span class = "plain-syntax" > );< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > ssp_tok< / span > < span class = "plain-syntax" > > = < / span > < span class = "constant-syntax" > 0< / span > < span class = "plain-syntax" > ) < / span > < a href = "5-cp.html#SP8" class = "function-link" > < span class = "function-syntax" > Routines::Compile::add_say_construction_to_error< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > ssp_tok< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::issue_problem_end< / span > < span class = "plain-syntax" > ();< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > problem_issued< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-26 12:52:50 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "5-cp.html#SP7_1" > § 7.1< / a > .< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP8" class = "paragraph-anchor" > < / a > < b > § 8. Problem messages for complex say constructions. < / b > < / p >
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
2020-08-26 12:52:50 +03:00
< span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > Routines::Compile::add_say_construction_to_error< / span > < button class = "popup" onclick = "togglePopup('usagePopup7')" > < span class = "comment-syntax" > ?< / span > < span class = "popuptext" id = "usagePopup7" > Usage of < span class = "code-font" > < span class = "function-syntax" > Routines::Compile::add_say_construction_to_error< / span > < / span > :< br / > < a href = "5-cp.html#SP7_1_2_1" > § 7.1.2.1< / a > , < a href = "5-cp.html#SP7_1_3_1" > § 7.1.3.1< / a > , < a href = "5-cp.html#SP7_1_5_2" > § 7.1.5.2< / a > , < a href = "5-cp.html#SP7_1_6_2" > § 7.1.6.2< / a > , < a href = "5-cp.html#SP7_1_7" > § 7.1.7< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > ssp_tok< / span > < span class = "plain-syntax" > ) {< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::issue_problem_segment< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > " %P(The construction I'm thinking of is '"< / span > < span class = "plain-syntax" > );< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < a href = "5-cp.html#SP8" class = "function-link" > < span class = "function-syntax" > Routines::Compile::add_scte_list< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > ssp_tok< / span > < span class = "plain-syntax" > , < / span > < span class = "constant-syntax" > SSP_START< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::issue_problem_segment< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > " ... "< / span > < span class = "plain-syntax" > );< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < a href = "5-cp.html#SP8" class = "function-link" > < span class = "function-syntax" > Routines::Compile::add_scte_list< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > ssp_tok< / span > < span class = "plain-syntax" > , < / span > < span class = "constant-syntax" > SSP_MIDDLE< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::issue_problem_segment< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > " ... "< / span > < span class = "plain-syntax" > );< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < a href = "5-cp.html#SP8" class = "function-link" > < span class = "function-syntax" > Routines::Compile::add_scte_list< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > ssp_tok< / span > < span class = "plain-syntax" > , < / span > < span class = "constant-syntax" > SSP_END< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::issue_problem_segment< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "'.)"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > }< / span >
< span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > Routines::Compile::add_scte_list< / span > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > ssp_tok< / span > < span class = "plain-syntax" > , < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > list_pos< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > phrase< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > ph< / span > < span class = "plain-syntax" > ; < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > ct< / span > < span class = "plain-syntax" > = < / span > < span class = "constant-syntax" > 0< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > LOOP_OVER< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > ph< / span > < span class = "plain-syntax" > , < / span > < span class = "reserved-syntax" > phrase< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > wording< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > W< / span > < span class = "plain-syntax" > ;< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < a href = "3-ptd.html#SP21" class = "function-link" > < span class = "function-syntax" > Phrases::TypeData::ssp_matches< / span > < / a > < span class = "plain-syntax" > (& (< / span > < span class = "identifier-syntax" > ph< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > type_data< / span > < span class = "plain-syntax" > ), < / span > < span class = "identifier-syntax" > ssp_tok< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > list_pos< / span > < span class = "plain-syntax" > , & < / span > < span class = "identifier-syntax" > W< / span > < span class = "plain-syntax" > )) {< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::quote_wording< / span > < span class = "plain-syntax" > (3, < / span > < span class = "identifier-syntax" > W< / 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" > ct< / span > < span class = "plain-syntax" > ++ == < / span > < span class = "constant-syntax" > 0< / span > < span class = "plain-syntax" > ) < / span > < span class = "identifier-syntax" > Problems::issue_problem_segment< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "[%3]"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::issue_problem_segment< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "/[%3]"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > }< / span >
< / pre >
< nav role = "progress" > < div class = "progresscontainer" >
2020-08-26 12:52:50 +03:00
< ul class = "progressbar" > < li class = "progressprev" > < a href = "5-cii.html" > ❮ < / a > < / li > < li class = "progresschapter" > < a href = "P-wtmd.html" > P< / a > < / li > < li class = "progresschapter" > < a href = "1-im.html" > 1< / a > < / li > < li class = "progresschapter" > < a href = "2-cfs.html" > 2< / a > < / li > < li class = "progresschapter" > < a href = "3-itp.html" > 3< / a > < / li > < li class = "progresschapter" > < a href = "4-lv.html" > 4< / a > < / li > < li class = "progresscurrentchapter" > 5< / li > < li class = "progresssection" > < a href = "5-inv.html" > inv< / a > < / li > < li class = "progresssection" > < a href = "5-pi.html" > pi< / a > < / li > < li class = "progresssection" > < a href = "5-ci.html" > ci< / a > < / li > < li class = "progresssection" > < a href = "5-ciac.html" > ciac< / a > < / li > < li class = "progresssection" > < a href = "5-cii.html" > cii< / a > < / li > < li class = "progresscurrent" > cp< / li > < li class = "progresssection" > < a href = "5-ca.html" > ca< / a > < / li > < li class = "progressnext" > < a href = "5-ca.html" > ❯ < / a > < / li > < / ul > < / div >
2020-05-03 03:01:21 +03:00
< / nav > <!-- End of weave -->
2019-03-17 14:40:57 +02:00
2020-03-19 02:11:25 +02:00
< / main >
2019-03-17 14:40:57 +02:00
< / body >
< / html >