diff --git a/docs/codegen-module/2-alm.html b/docs/codegen-module/2-alm.html index 8ec3d218a..70761ad37 100644 --- a/docs/codegen-module/2-alm.html +++ b/docs/codegen-module/2-alm.html @@ -739,7 +739,7 @@ int rb_splat_count = 1; void CodeGen::Assimilate::routine_body(inter_reading_state *IRS, inter_symbol *block_name, inter_t offset, text_stream *body) { if (Str::is_whitespace(body)) return; - if (Str::len(body) < 100) { + if (Str::len(body) < 120) { LOG("=======\n\nCandidate (%S) len %d: '%S'\n\n", block_name->symbol_name, Str::len(body), body); inter_schema *sch = InterSchemas::from_text(body, FALSE, 0, NULL); diff --git a/docs/codegen-module/3-ip.html b/docs/codegen-module/3-ip.html index e495b6231..c92d60854 100644 --- a/docs/codegen-module/3-ip.html +++ b/docs/codegen-module/3-ip.html @@ -99,6 +99,14 @@ inter_symbol *indirect3_interp = NULL; inter_symbol *indirect4_interp = NULL; inter_symbol *indirect5_interp = NULL; + inter_symbol *message0_interp = NULL; + inter_symbol *message1_interp = NULL; + inter_symbol *message2_interp = NULL; + inter_symbol *message3_interp = NULL; + inter_symbol *callmessage0_interp = NULL; + inter_symbol *callmessage1_interp = NULL; + inter_symbol *callmessage2_interp = NULL; + inter_symbol *callmessage3_interp = NULL; inter_symbol *propertyaddress_interp = NULL; inter_symbol *propertylength_interp = NULL; inter_symbol *provides_interp = NULL; @@ -199,6 +207,14 @@ Primitives::emit_one(I, IRS, I"!indirect3", I"val val val val -> val", &indirect3_interp); Primitives::emit_one(I, IRS, I"!indirect4", I"val val val val val -> val", &indirect4_interp); Primitives::emit_one(I, IRS, I"!indirect5", I"val val val val val val -> val", &indirect5_interp); + Primitives::emit_one(I, IRS, I"!message0", I"val val -> val", &message0_interp); + Primitives::emit_one(I, IRS, I"!message1", I"val val val -> val", &message1_interp); + Primitives::emit_one(I, IRS, I"!message2", I"val val val val -> val", &message2_interp); + Primitives::emit_one(I, IRS, I"!message3", I"val val val val val -> val", &message3_interp); + Primitives::emit_one(I, IRS, I"!callmessage0", I"val -> val", &callmessage0_interp); + Primitives::emit_one(I, IRS, I"!callmessage1", I"val val -> val", &callmessage1_interp); + Primitives::emit_one(I, IRS, I"!callmessage2", I"val val val -> val", &callmessage2_interp); + Primitives::emit_one(I, IRS, I"!callmessage3", I"val val val val -> val", &callmessage3_interp); Primitives::emit_one(I, IRS, I"!propertyaddress", I"val val -> val", &propertyaddress_interp); Primitives::emit_one(I, IRS, I"!propertylength", I"val val -> val", &propertylength_interp); Primitives::emit_one(I, IRS, I"!provides", I"val val -> val", &provides_interp); @@ -370,6 +386,14 @@ enum INDIRECT3_BIP enum INDIRECT4_BIP enum INDIRECT5_BIP + enum MESSAGE0_BIP + enum MESSAGE1_BIP + enum MESSAGE2_BIP + enum MESSAGE3_BIP + enum CALLMESSAGE0_BIP + enum CALLMESSAGE1_BIP + enum CALLMESSAGE2_BIP + enum CALLMESSAGE3_BIP enum PROPERTYADDRESS_BIP enum PROPERTYLENGTH_BIP enum PROVIDES_BIP @@ -470,6 +494,14 @@ if (Str::eq(symb->symbol_name, I"!indirect3")) bip = INDIRECT3_BIP; if (Str::eq(symb->symbol_name, I"!indirect4")) bip = INDIRECT4_BIP; if (Str::eq(symb->symbol_name, I"!indirect5")) bip = INDIRECT5_BIP; + if (Str::eq(symb->symbol_name, I"!message0")) bip = MESSAGE0_BIP; + if (Str::eq(symb->symbol_name, I"!message1")) bip = MESSAGE1_BIP; + if (Str::eq(symb->symbol_name, I"!message2")) bip = MESSAGE2_BIP; + if (Str::eq(symb->symbol_name, I"!message3")) bip = MESSAGE3_BIP; + if (Str::eq(symb->symbol_name, I"!callmessage0")) bip = CALLMESSAGE0_BIP; + if (Str::eq(symb->symbol_name, I"!callmessage1")) bip = CALLMESSAGE1_BIP; + if (Str::eq(symb->symbol_name, I"!callmessage2")) bip = CALLMESSAGE2_BIP; + if (Str::eq(symb->symbol_name, I"!callmessage3")) bip = CALLMESSAGE3_BIP; if (Str::eq(symb->symbol_name, I"!propertyaddress")) bip = PROPERTYADDRESS_BIP; if (Str::eq(symb->symbol_name, I"!propertylength")) bip = PROPERTYLENGTH_BIP; if (Str::eq(symb->symbol_name, I"!provides")) bip = PROVIDES_BIP; diff --git a/docs/codegen-module/3-is.html b/docs/codegen-module/3-is.html index 18d8afbe5..87f7f5755 100644 --- a/docs/codegen-module/3-is.html +++ b/docs/codegen-module/3-is.html @@ -109,6 +109,8 @@ but the need to do this went away.) enum ASSEMBLY_ISNT enum LABEL_ISNT enum CALL_ISNT + enum MESSAGE_ISNT + enum CALLMESSAGE_ISNT
@@ -605,6 +607,12 @@ we go to some trouble here.
             case CALL_ISNT:
                 LOG("* (call)\n");
                 break;
+            case MESSAGE_ISNT:
+                LOG("* (message)\n");
+                break;
+            case CALLMESSAGE_ISNT:
+                LOG("* (call-message)\n");
+                break;
             case SUBEXPRESSION_ISNT:
                 LOG("* (subexpression)\n");
                 break;
@@ -1037,6 +1045,7 @@ out for the two extra syntaxes allowed, InterSchemas::add_token(sch, InterSchemas::new_token(WHITE_SPACE_ISTT, I" ", NULL, 0, -1));
                     break;
                 case DQUOTED_TOKSTATE:
+                    InterSchemas::de_escape_text(current_raw);
                     InterSchemas::add_token(sch, InterSchemas::new_token(DQUOTED_ISTT, current_raw, NULL, 0, -1));
                     break;
                 case SQUOTED_TOKSTATE:
@@ -1871,6 +1880,7 @@ these out at the start of each iteration.
         REPEATEDLY_APPLY(InterSchemas::strip_all_spacing);
         REPEATEDLY_APPLY(InterSchemas::debracket);
         REPEATEDLY_APPLY(InterSchemas::implied_return_values);
+        REPEATEDLY_APPLY(InterSchemas::message_calls);
 

@@ -2352,10 +2362,10 @@ these out at the start of each iteration.
     int InterSchemas::alternatecases(inter_schema_node *par, inter_schema_node *isn) {
         for (; isn; isn=isn->next_node) {
-            if (isn->isn_clarifier == case_interp) {
+            if ((isn->isn_clarifier == case_interp) && (isn->child_node)) {
                 inter_schema_node *A = isn->child_node;
                 inter_schema_node *B = isn->child_node->next_node;
-                if ((A->isn_type == EXPRESSION_ISNT) && (B->isn_type == EXPRESSION_ISNT)) {
+                if ((A) && (B) && (B->next_node)) {
                     inter_schema_node *C = InterSchemas::new_node(isn->parent_schema, OPERATION_ISNT);
                     C->isn_clarifier = alternativecase_interp;
                     C->child_node = A;
@@ -2453,12 +2463,7 @@ these out at the start of each iteration.
                                 while ((n) && (n->ist_type == WHITE_SPACE_ISTT)) n = n->next;
                                 if ((n) && (n->ist_type == DQUOTED_ISTT)) {
                                     subordinate_to = print_interp;
-                                    LOOP_THROUGH_TEXT(P, n->material) {
-                                        if (Str::get(P) == '^')
-                                            Str::put(P, '\n');
-                                        if (Str::get(P) == '~')
-                                            Str::put(P, '\"');
-                                    }
+                                    InterSchemas::de_escape_text(n->material);
                                 }
                             }
                             if (isn->expression_tokens->reserved_word == PRINTRET_I6RW) {
@@ -2650,6 +2655,7 @@ these out at the start of each iteration.
                     if (dangle_text) {
                         new_isn->expression_tokens = InterSchemas::new_token(DQUOTED_ISTT, dangle_text, NULL, 0, -1);
                         new_isn->expression_tokens->owner = new_isn;
+                        InterSchemas::de_escape_text(new_isn->expression_tokens->material);
                     }
                     if (operand2) {
                         inter_schema_node *new_new_isn = InterSchemas::new_node(isn->parent_schema, EXPRESSION_ISNT);
@@ -3157,7 +3163,57 @@ these out at the start of each iteration.
 
 

The function InterSchemas::implied_return_values is used in §20.4.

-

§30. Operators in I6. The following routines return data which is essentially the content of the +

§30.

+ + +
+    int InterSchemas::message_calls(inter_schema_node *par, inter_schema_node *isn) {
+        for (inter_schema_node *prev = NULL; isn; prev = isn, isn = isn->next_node) {
+            if ((isn->isn_type == OPERATION_ISNT) && (isn->isn_clarifier == propertyvalue_interp) &&
+                (isn->child_node) && (isn->child_node->next_node) && (isn->child_node->next_node->isn_type == CALL_ISNT)) {
+                inter_schema_node *obj = isn->child_node;
+                inter_schema_node *message = isn->child_node->next_node->child_node;
+                inter_schema_node *args = isn->child_node->next_node->child_node->next_node;
+                isn->isn_type = MESSAGE_ISNT; isn->isn_clarifier = NULL;
+                obj->next_node = message; message->parent_node = isn; message->next_node = args;
+                if (message->isn_type == EXPRESSION_ISNT) {
+                    inter_schema_token *n = message->expression_tokens;
+                    if ((n) && (Str::eq(n->material, I"call"))) {
+                        obj->next_node = args; isn->isn_type = CALLMESSAGE_ISNT;
+                    }
+                }
+                while (args) { args->parent_node = isn; args = args->next_node; }
+                return TRUE;
+            }
+            if (InterSchemas::message_calls(isn, isn->child_node)) return TRUE;
+        }
+        return FALSE;
+    }
+
+ +

+ +

The function InterSchemas::message_calls is used in §20.4.

+ +

§31.

+ + +
+    void InterSchemas::de_escape_text(text_stream *m) {
+        LOOP_THROUGH_TEXT(P, m) {
+            if (Str::get(P) == '^')
+                Str::put(P, '\n');
+            if (Str::get(P) == '~')
+                Str::put(P, '\"');
+        }
+    }
+
+ +

+ +

The function InterSchemas::de_escape_text is used in §20.2.2, §26.

+ +

§32. Operators in I6. The following routines return data which is essentially the content of the table shown in section 6.2 of the Inform 6 Technical Manual: which operators take precedence over which others, which are right or left associative, which are prefix or postfix, and so on. @@ -3365,7 +3421,7 @@ which are prefix or postfix, and so on.

The function InterSchemas::right_associative is used in §28.

-

§31. Metadata on inter primitives.

+

§33. Metadata on inter primitives.

diff --git a/docs/codegen-module/4-cg.html b/docs/codegen-module/4-cg.html
index b11b4c383..37314acea 100644
--- a/docs/codegen-module/4-cg.html
+++ b/docs/codegen-module/4-cg.html
@@ -290,7 +290,7 @@
 
 

The function CodeGen::repo_list is used in §1, 2/erm (§1).

-

The function CodeGen::frame is used in §1, §3, §4, §4.1, §4.2, §4.6, §4.7, §4.8, §4.9, §4.10, §4.11, §4.12, §4.13, §4.14, §4.15, §4.16, §4.17, §4.18, §4.19, §4.20, §4.21, §4.22, §4.23, §4.24, §4.25, §4.26, §4.27, §4.28, §4.29, §4.30, §4.31, §4.32, §4.33, §4.34, §4.35, §4.36, §4.37, §4.41, §4.42, §4.43, §4.44, §4.45, §4.46, §4.47, §4.48, §4.49, §4.50, §4.51, §4.52, §4.53, §4.54, §4.55, §4.56, §4.57, §4.58, §4.59, §4.60, §4.61, §4.62, §4.63, §4.64, §4.65, §4.66, §4.67, §4.68, §4.69, §4.70, §4.71, §4.72, §4.73, §4.74, §4.75, §4.76, §4.77, §4.78, §4.79, §4.80, §4.81, §4.82, §4.83, §4.84, §4.85, §4.86, §4.87, §4.88, §4.89, §4.90, §4.91, §4.92.

+

The function CodeGen::frame is used in §1, §3, §4, §4.1, §4.2, §4.6, §4.7, §4.8, §4.9, §4.10, §4.11, §4.12, §4.13, §4.14, §4.15, §4.16, §4.17, §4.18, §4.19, §4.20, §4.21, §4.22, §4.23, §4.24, §4.25, §4.26, §4.27, §4.28, §4.29, §4.30, §4.31, §4.32, §4.33, §4.34, §4.35, §4.36, §4.37, §4.41, §4.42, §4.43, §4.44, §4.45, §4.46, §4.47, §4.48, §4.49, §4.50, §4.51, §4.52, §4.53, §4.54, §4.55, §4.56, §4.57, §4.58, §4.59, §4.60, §4.61, §4.62, §4.63, §4.64, §4.65, §4.66, §4.67, §4.68, §4.69, §4.70, §4.71, §4.72, §4.73, §4.74, §4.75, §4.76, §4.77, §4.78, §4.79, §4.80, §4.81, §4.82, §4.83, §4.84, §4.85, §4.86, §4.87, §4.88, §4.89, §4.90, §4.91, §4.92, §4.93, §4.94, §4.95, §4.96, §4.97, §4.98, §4.99, §4.100.

§3. There's a contrivance here to get around an awkward point of I6 syntax: an array written in the form @@ -762,10 +762,18 @@ is 20. We instead compile this as case INDIRECT3_BIP: <Generate primitive for indirect3 4.86>; break; case INDIRECT4_BIP: <Generate primitive for indirect4 4.87>; break; case INDIRECT5_BIP: <Generate primitive for indirect5 4.88>; break; - case PROPERTYADDRESS_BIP: <Generate primitive for propertyaddress 4.89>; break; - case PROPERTYLENGTH_BIP: <Generate primitive for propertylength 4.90>; break; - case PROVIDES_BIP: <Generate primitive for provides 4.91>; break; - case PROPERTYVALUE_BIP: <Generate primitive for propertyvalue 4.92>; break; + case MESSAGE0_BIP: <Generate primitive for message0 4.89>; break; + case MESSAGE1_BIP: <Generate primitive for message1 4.90>; break; + case MESSAGE2_BIP: <Generate primitive for message2 4.91>; break; + case MESSAGE3_BIP: <Generate primitive for message3 4.92>; break; + case CALLMESSAGE0_BIP: <Generate primitive for callmessage0 4.93>; break; + case CALLMESSAGE1_BIP: <Generate primitive for callmessage1 4.94>; break; + case CALLMESSAGE2_BIP: <Generate primitive for callmessage2 4.95>; break; + case CALLMESSAGE3_BIP: <Generate primitive for callmessage3 4.96>; break; + case PROPERTYADDRESS_BIP: <Generate primitive for propertyaddress 4.97>; break; + case PROPERTYLENGTH_BIP: <Generate primitive for propertylength 4.98>; break; + case PROVIDES_BIP: <Generate primitive for provides 4.99>; break; + case PROPERTYVALUE_BIP: <Generate primitive for propertyvalue 4.100>; break; default: LOG("Prim: %S\n", prim->symbol_name); internal_error("unimplemented prim"); } break; @@ -2448,7 +2456,159 @@ then the result.

This code is used in §4.

§4.89. -<Generate primitive for propertyaddress 4.89> = +<Generate primitive for message0 4.89> = +

+ + +
+        WRITE("(");
+        CodeGen::frame(OUT, I, Inter::top_of_frame_list(ifl));
+        WRITE(".");
+        CodeGen::frame(OUT, I, Inter::second_in_frame_list(ifl));
+        WRITE("())");
+
+ +

+ +

This code is used in §4.

+ +

§4.90. +<Generate primitive for message1 4.90> = +

+ + +
+        WRITE("(");
+        CodeGen::frame(OUT, I, Inter::top_of_frame_list(ifl));
+        WRITE(".");
+        CodeGen::frame(OUT, I, Inter::second_in_frame_list(ifl));
+        WRITE("(");
+        CodeGen::frame(OUT, I, Inter::third_in_frame_list(ifl));
+        WRITE("))");
+
+ +

+ +

This code is used in §4.

+ +

§4.91. +<Generate primitive for message2 4.91> = +

+ + +
+        WRITE("(");
+        CodeGen::frame(OUT, I, Inter::top_of_frame_list(ifl));
+        WRITE(".");
+        CodeGen::frame(OUT, I, Inter::second_in_frame_list(ifl));
+        WRITE("(");
+        CodeGen::frame(OUT, I, Inter::third_in_frame_list(ifl));
+        WRITE(",");
+        CodeGen::frame(OUT, I, Inter::fourth_in_frame_list(ifl));
+        WRITE("))");
+
+ +

+ +

This code is used in §4.

+ +

§4.92. +<Generate primitive for message3 4.92> = +

+ + +
+        WRITE("(");
+        CodeGen::frame(OUT, I, Inter::top_of_frame_list(ifl));
+        WRITE(".");
+        CodeGen::frame(OUT, I, Inter::second_in_frame_list(ifl));
+        WRITE("(");
+        CodeGen::frame(OUT, I, Inter::third_in_frame_list(ifl));
+        WRITE(",");
+        CodeGen::frame(OUT, I, Inter::fourth_in_frame_list(ifl));
+        WRITE(",");
+        CodeGen::frame(OUT, I, Inter::fifth_in_frame_list(ifl));
+        WRITE("))");
+
+ +

+ +

This code is used in §4.

+ +

§4.93. +<Generate primitive for callmessage0 4.93> = +

+ + +
+        WRITE("(");
+        CodeGen::frame(OUT, I, Inter::top_of_frame_list(ifl));
+        WRITE(".call())");
+
+ +

+ +

This code is used in §4.

+ +

§4.94. +<Generate primitive for callmessage1 4.94> = +

+ + +
+        WRITE("(");
+        CodeGen::frame(OUT, I, Inter::top_of_frame_list(ifl));
+        WRITE(".call(");
+        CodeGen::frame(OUT, I, Inter::second_in_frame_list(ifl));
+        WRITE("))");
+
+ +

+ +

This code is used in §4.

+ +

§4.95. +<Generate primitive for callmessage2 4.95> = +

+ + +
+        WRITE("(");
+        CodeGen::frame(OUT, I, Inter::top_of_frame_list(ifl));
+        WRITE(".call(");
+        CodeGen::frame(OUT, I, Inter::second_in_frame_list(ifl));
+        WRITE(",");
+        CodeGen::frame(OUT, I, Inter::third_in_frame_list(ifl));
+        WRITE("))");
+
+ +

+ +

This code is used in §4.

+ +

§4.96. +<Generate primitive for callmessage3 4.96> = +

+ + +
+        WRITE("(");
+        CodeGen::frame(OUT, I, Inter::top_of_frame_list(ifl));
+        WRITE(".call(");
+        CodeGen::frame(OUT, I, Inter::second_in_frame_list(ifl));
+        WRITE(",");
+        CodeGen::frame(OUT, I, Inter::third_in_frame_list(ifl));
+        WRITE(",");
+        CodeGen::frame(OUT, I, Inter::fourth_in_frame_list(ifl));
+        WRITE("))");
+
+ +

+ +

This code is used in §4.

+ +

§4.97. +<Generate primitive for propertyaddress 4.97> =

@@ -2464,8 +2624,8 @@ then the result.

This code is used in §4.

-

§4.90. -<Generate primitive for propertylength 4.90> = +

§4.98. +<Generate primitive for propertylength 4.98> =

@@ -2481,8 +2641,8 @@ then the result.

This code is used in §4.

-

§4.91. -<Generate primitive for provides 4.91> = +

§4.99. +<Generate primitive for provides 4.99> =

@@ -2498,8 +2658,8 @@ then the result.

This code is used in §4.

-

§4.92. -<Generate primitive for propertyvalue 4.92> = +

§4.100. +<Generate primitive for propertyvalue 4.100> =

diff --git a/docs/core-module/13-rsfk.html b/docs/core-module/13-rsfk.html index 256b56992..b19e7a3ea 100644 --- a/docs/core-module/13-rsfk.html +++ b/docs/core-module/13-rsfk.html @@ -60,7 +60,7 @@ kinds being compiled to an I6 Class<

-

The function Kinds::RunTime::I6_classname is used in §25, 6/bp (§25), 6/rlt (§29.2, §29.3, §29.4, §29.5, §29.6), 12/ter (§8.6), 12/ca (§6.2), 12/dtd (§24), 13/kak (§2), 25/cii (§3.1.1.4.7.1), 26/iti (§9), 27/hr (§4), 27/eis (§2.8.1).

+

The function Kinds::RunTime::I6_classname is used in §25, 6/bp (§25), 6/rlt (§29.2, §29.3, §29.4, §29.5, §29.6), 12/ter (§8.6), 12/ca (§6.2), 12/dtd (§24), 13/kak (§2), 25/cii (§3.1.1.4.7.1), 26/iti (§9), 27/hr (§4), 27/eis (§2.10.1).

The function Kinds::RunTime::I6_classnumber is used in §23, 16/ic (§6, §10).

diff --git a/docs/core-module/24-lv.html b/docs/core-module/24-lv.html index 751af5cc4..fbed0e5ba 100644 --- a/docs/core-module/24-lv.html +++ b/docs/core-module/24-lv.html @@ -670,7 +670,7 @@ given fresh names in between now and then.

The function LocalVariables::by_name is used in 14/lv (§14.5), 25/cii (§6).

-

The function LocalVariables::by_name_any is used in 27/eis (§2.9).

+

The function LocalVariables::by_name_any is used in 27/eis (§2.11).

The function LocalVariables::phrase_options is used in 14/cn (§16.3).

@@ -1648,7 +1648,7 @@ need in the compilation of any given routine:

The function LocalVariables::declare is used in 26/rt (§3, §4, §4.1.1).

-

The function LocalVariables::declare_this is used in §8, §10, §11, §27, §28, §29, §41, §43, §45, 4/am (§34.2), 11/tr (§10), 12/dtd (§9, §23, §25, §26, §27), 12/cad (§7), 13/rsfk (§24.6.2, §24.6.3, §24.6.4), 14/lv (§14.1, §14.5), 14/cn (§16.3), 20/eq (§48), 25/cii (§1.2.1, §3.5.1, §3.5.3), 25/cp (§5.3.5), 27/eis (§2.9).

+

The function LocalVariables::declare_this is used in §8, §10, §11, §27, §28, §29, §41, §43, §45, 4/am (§34.2), 11/tr (§10), 12/dtd (§9, §23, §25, §26, §27), 12/cad (§7), 13/rsfk (§24.6.2, §24.6.3, §24.6.4), 14/lv (§14.1, §14.5), 14/cn (§16.3), 20/eq (§48), 25/cii (§1.2.1, §3.5.1, §3.5.3), 25/cp (§5.3.5), 27/eis (§2.11).

The function LocalVariables::create_and_declare is used in 13/rsfk (§24.4.1, §24.4.2).

diff --git a/docs/core-module/27-ei.html b/docs/core-module/27-ei.html index 8e7647d43..5b18a9b69 100644 --- a/docs/core-module/27-ei.html +++ b/docs/core-module/27-ei.html @@ -1113,7 +1113,7 @@ insert them into the Inter stream close to the top.

The function Emit::routine is used in 26/rt (§4, §4.1).

-

The function Emit::reserve_label is used in 5/lp (§19, §28), 12/cdp (§2.1.6.1.2.2.2.1, §2.1.6.1.6), 24/pb (§14, §17), 25/cii (§3.4.1), 25/cp (§5.4.3), 27/eis (§2.1, §2.9).

+

The function Emit::reserve_label is used in 5/lp (§19, §28), 12/cdp (§2.1.6.1.2.2.2.1, §2.1.6.1.6), 24/pb (§14, §17), 25/cii (§3.4.1), 25/cp (§5.4.3), 27/eis (§2.1, §2.11).

The function Emit::place_label is used in 5/lp (§19, §27.3), 12/cdp (§2.1.6.1.6), 24/pb (§14), 25/cp (§5.4.3), 27/eis (§2.1).

@@ -1121,7 +1121,7 @@ insert them into the Inter stream close to the top.

The function Emit::local is used in 24/lv (§47), 26/rt (§4.1.1).

-

The function Emit::inv_primitive is used in 4/am (§35, §43), 5/lp (§19, §19.1, §19.2, §19.3, §19.3.1, §19.3.1.1, §19.3.2, §19.2.1, §19.2.2, §27, §27.2, §27.3, §27.3.1, §27.3.2, §27.3.3, §27.3.4), 5/ins (§29), 5/nv (§12, §16), 6/bp (§25), 6/rlt (§15, §15.2, §15.2.4, §15.2.5, §15.2.6, §15.2.7, §15.2.8, §15.2.9, §15.2.10, §15.2.11, §15.2.12, §15.2.9.1, §15.2.10.1, §15.2.12.1, §17, §29.1, §29.2, §29.3, §29.4, §29.5, §29.6, §30), 6/nv (§17, §18.1, §18.2, §18.1.2, §18.1.2.1, §18.1.2.2, §19), 8/ef (§19), 12/ca (§5.2), 12/dtd (§7.1, §7.1.1, §8, §9, §9.1, §15, §16, §18, §19, §20, §22, §23, §25, §26, §27), 12/cdp (§2.1.6, §2.1.6.1.2.2, §2.1.6.1.2.3.2, §2.1.6.1.2.3.7, §2.1.6.1.2.4, §2.1.6.1.2.5, §2.1.6.1.2.2.2, §2.1.6.1.2.2.2.1, §2.1.6.1.7, §2.1.6.1.8, §2.1.6.1.2.2.3, §2.1.6.1.9, §2.1.6.1.10, §2.1.6.1.2.2.4, §2.1.6.1.11, §2.1.6.1.2.2.5, §2.1.6.1.13, §2.1.6.1.14, §2.1.6.1.2.2.6, §2.1.6.1.2.2.6.1, §2.1.6.1.15, §2.1.6.1.17, §2.1.6.1.2.2.7, §2.1.6.1.18), 13/kak (§2), 13/ca (§1.2, §1.3, §1.4, §1.10, §1.11, §1.12, §1.13), 13/rsfk (§16.3, §24.1, §24.2, §24.3, §24.4.1, §24.4.2, §24.5, §24.5.1, §24.6.1, §24.6.2, §24.6.3, §24.6.4, §24.6.5, §24.6.6, §25), 14/rv (§24.3), 14/lv (§14.3.2), 14/cn (§16.1, §16.2, §16.3), 15/ma (§13), 15/epv (§4), 17/tl (§14.2), 17/ts (§11.1), 17/rs (§6.2, §7.2), 19/tc (§8), 19/rsft (§2), 21/rl (§11, §11.2, §20, §20.1, §20.2, §22.1), 21/rb (§24.1.1, §24.1.2, §24.1.3, §24.1.5, §24.1.3.1), 21/rl2 (§14.1), 21/fao (§10), 21/sv (§3, §3.1, §3.2), 21/ac (§14), 22/prcd (§10, §10.2, §10.3, §10.4, §10.5, §10.1.1.1), 22/pav (§9.2), 23/abc (§1), 24/lv (§28, §29, §43), 24/pb (§17), 24/ch (§3, §3.1, §6, §7, §7.1, §7.2, §7.3, §7.4, §7.4.1, §7.5), 25/ci (§3, §3.2.3, §3.2.3.2, §3.2.3.1.1, §3.2.3.3.1.2, §3.2.3.4.1.1, §3.2.3.3.1.2.1, §3.2.3.3.1.3, §4.2), 25/ciac (§2), 25/cii (§1.2.1, §3.1.1.4.10, §3.5.3, §3.5.8.1, §3.5.8.2, §3.5.8.3, §3.5.9), 25/cp (§3.3.1, §5.2.1, §5.3.4, §5.3.5, §5.3.5.1, §5.3.5.2, §5.3.5.3), 26/uo (§21.1, §21.2), 26/lt (§4.1), 26/rt (§4.1.3, §4.1.5), 26/ts (§10, §11, §12), 27/eis (§2.4, §2.5, §2.6, §2.7, §2.8, §2.9).

+

The function Emit::inv_primitive is used in 4/am (§35, §43), 5/lp (§19, §19.1, §19.2, §19.3, §19.3.1, §19.3.1.1, §19.3.2, §19.2.1, §19.2.2, §27, §27.2, §27.3, §27.3.1, §27.3.2, §27.3.3, §27.3.4), 5/ins (§29), 5/nv (§12, §16), 6/bp (§25), 6/rlt (§15, §15.2, §15.2.4, §15.2.5, §15.2.6, §15.2.7, §15.2.8, §15.2.9, §15.2.10, §15.2.11, §15.2.12, §15.2.9.1, §15.2.10.1, §15.2.12.1, §17, §29.1, §29.2, §29.3, §29.4, §29.5, §29.6, §30), 6/nv (§17, §18.1, §18.2, §18.1.2, §18.1.2.1, §18.1.2.2, §19), 8/ef (§19), 12/ca (§5.2), 12/dtd (§7.1, §7.1.1, §8, §9, §9.1, §15, §16, §18, §19, §20, §22, §23, §25, §26, §27), 12/cdp (§2.1.6, §2.1.6.1.2.2, §2.1.6.1.2.3.2, §2.1.6.1.2.3.7, §2.1.6.1.2.4, §2.1.6.1.2.5, §2.1.6.1.2.2.2, §2.1.6.1.2.2.2.1, §2.1.6.1.7, §2.1.6.1.8, §2.1.6.1.2.2.3, §2.1.6.1.9, §2.1.6.1.10, §2.1.6.1.2.2.4, §2.1.6.1.11, §2.1.6.1.2.2.5, §2.1.6.1.13, §2.1.6.1.14, §2.1.6.1.2.2.6, §2.1.6.1.2.2.6.1, §2.1.6.1.15, §2.1.6.1.17, §2.1.6.1.2.2.7, §2.1.6.1.18), 13/kak (§2), 13/ca (§1.2, §1.3, §1.4, §1.10, §1.11, §1.12, §1.13), 13/rsfk (§16.3, §24.1, §24.2, §24.3, §24.4.1, §24.4.2, §24.5, §24.5.1, §24.6.1, §24.6.2, §24.6.3, §24.6.4, §24.6.5, §24.6.6, §25), 14/rv (§24.3), 14/lv (§14.3.2), 14/cn (§16.1, §16.2, §16.3), 15/ma (§13), 15/epv (§4), 17/tl (§14.2), 17/ts (§11.1), 17/rs (§6.2, §7.2), 19/tc (§8), 19/rsft (§2), 21/rl (§11, §11.2, §20, §20.1, §20.2, §22.1), 21/rb (§24.1.1, §24.1.2, §24.1.3, §24.1.5, §24.1.3.1), 21/rl2 (§14.1), 21/fao (§10), 21/sv (§3, §3.1, §3.2), 21/ac (§14), 22/prcd (§10, §10.2, §10.3, §10.4, §10.5, §10.1.1.1), 22/pav (§9.2), 23/abc (§1), 24/lv (§28, §29, §43), 24/pb (§17), 24/ch (§3, §3.1, §6, §7, §7.1, §7.2, §7.3, §7.4, §7.4.1, §7.5), 25/ci (§3, §3.2.3, §3.2.3.2, §3.2.3.1.1, §3.2.3.3.1.2, §3.2.3.4.1.1, §3.2.3.3.1.2.1, §3.2.3.3.1.3, §4.2), 25/ciac (§2), 25/cii (§1.2.1, §3.1.1.4.10, §3.5.3, §3.5.8.1, §3.5.8.2, §3.5.8.3, §3.5.9), 25/cp (§3.3.1, §5.2.1, §5.3.4, §5.3.5, §5.3.5.1, §5.3.5.2, §5.3.5.3), 26/uo (§21.1, §21.2), 26/lt (§4.1), 26/rt (§4.1.3, §4.1.5), 26/ts (§10, §11, §12), 27/eis (§2.4, §2.5, §2.6, §2.7, §2.8, §2.9, §2.10, §2.11).

The function Emit::inv_call is used in 27/eis (§2.4).

@@ -1491,43 +1491,43 @@ insert them into the Inter stream close to the top.

The function Emit::note_level is used in §3.

-

The function Emit::to_last_level is used in 27/eis (§1, §2.2, §2.8).

+

The function Emit::to_last_level is used in 27/eis (§1, §2.2, §2.10).

The function Emit::at is used in §3.

-

The function Emit::down is used in §3, 4/am (§35, §43), 5/lp (§19, §19.1, §19.2, §19.3, §19.3.1, §19.3.1.1, §19.3.2, §19.2.1, §19.2.2, §27, §27.2, §27.3, §27.3.1, §27.3.2, §27.3.3, §27.3.4), 5/ins (§29), 5/nv (§12, §16), 6/bp (§25, §33), 6/rlt (§15, §15.2, §15.2.1, §15.2.4, §15.2.5, §15.2.5.1, §15.2.6, §15.2.7, §15.2.8, §15.2.9, §15.2.10, §15.2.11, §15.2.12, §15.2.9.1, §15.2.10.1, §15.2.12.1, §17, §29.1, §29.2, §29.3, §29.4, §29.5, §29.6, §30), 6/nv (§17, §18.1, §18.2, §18.1.2, §18.1.2.1, §18.1.2.2, §19), 8/ef (§19), 12/ca (§5.2), 12/dtd (§7.1, §7.1.1, §7.1.2, §8, §9, §9.1, §11, §15, §16, §17, §18, §19, §20, §22, §23, §25, §26, §27), 12/cdp (§2.1.6, §2.1.6.1.2.2, §2.1.6.1.2.3.2, §2.1.6.1.2.3.7, §2.1.6.1.2.4, §2.1.6.1.2.5, §2.1.6.1.2.3.3.1, §2.1.6.1.2.2.2, §2.1.6.1.2.2.2.1, §2.1.6.1.7, §2.1.6.1.8, §2.1.6.1.2.2.3, §2.1.6.1.9, §2.1.6.1.10, §2.1.6.1.2.2.4, §2.1.6.1.11, §2.1.6.1.2.2.5, §2.1.6.1.13, §2.1.6.1.14, §2.1.6.1.2.2.6, §2.1.6.1.2.2.6.1, §2.1.6.1.15, §2.1.6.1.17, §2.1.6.1.2.2.7, §2.1.6.1.18), 13/kak (§2), 13/ca (§1, §1.2, §1.3, §1.4, §1.5, §1.6, §1.7, §1.8, §1.9, §1.10, §1.11, §1.12, §1.13), 13/rsfk (§7, §16.3, §19, §24.1, §24.2, §24.3, §24.4.1, §24.4.2, §24.5, §24.5.1, §24.6.1, §24.6.2, §24.6.3, §24.6.4, §24.6.5, §24.6.6, §25), 14/rv (§24.3), 14/lv (§14.3, §14.3.2, §14.4, §14.5), 14/cn (§16.1, §16.2, §16.3), 14/cfs (§7), 15/ma (§13), 15/epv (§4), 17/tl (§14.2), 17/ts (§8, §11.1), 17/rs (§6.1, §6.2, §7.2), 19/tc (§8), 19/rsft (§2), 20/eq (§48), 21/rl (§11, §11.2, §20, §20.1, §20.2, §22.1), 21/rb (§24.1.1, §24.1.2, §24.1.3, §24.1.4, §24.1.5, §24.1.3.1), 21/rl2 (§14.1), 21/fao (§10), 21/sv (§3, §3.1, §3.2), 21/ac (§14), 22/prcd (§10, §10.2, §10.3, §10.4, §10.5, §10.1.1.1), 22/pav (§9.2), 23/abc (§1), 24/lv (§28, §29, §41, §43), 24/pb (§17), 24/ch (§3, §4, §6, §7, §7.1, §7.2, §7.3, §7.4, §7.4.1, §7.5), 25/ci (§3, §3.2.3, §3.2.3.2, §3.2.3.1.1, §3.2.3.3, §3.2.3.6, §3.2.3.3.1.2, §3.2.3.4.1.1, §3.2.3.3.1.2.1, §3.2.3.3.1.3, §4.2), 25/ciac (§2), 25/cii (§1.2.1, §3.1.1.4.7.1, §3.1.1.4.9, §3.1.1.4.10, §3.5.3, §3.5.8, §3.5.8.1, §3.5.8.2, §3.5.8.3, §3.5.9), 25/cp (§3.3.1, §5.2.1, §5.3.4, §5.3.5, §5.3.5.1, §5.3.5.2, §5.3.5.3), 26/uo (§21.1, §21.2), 26/lt (§4.1), 26/rt (§4.1.2, §4.1.3, §4.1.4, §4.1.5), 26/iti (§9), 26/ts (§10, §11, §12), 27/eis (§2.2, §2.3, §2.4, §2.5, §2.6, §2.7, §2.8, §2.9).

+

The function Emit::down is used in §3, 4/am (§35, §43), 5/lp (§19, §19.1, §19.2, §19.3, §19.3.1, §19.3.1.1, §19.3.2, §19.2.1, §19.2.2, §27, §27.2, §27.3, §27.3.1, §27.3.2, §27.3.3, §27.3.4), 5/ins (§29), 5/nv (§12, §16), 6/bp (§25, §33), 6/rlt (§15, §15.2, §15.2.1, §15.2.4, §15.2.5, §15.2.5.1, §15.2.6, §15.2.7, §15.2.8, §15.2.9, §15.2.10, §15.2.11, §15.2.12, §15.2.9.1, §15.2.10.1, §15.2.12.1, §17, §29.1, §29.2, §29.3, §29.4, §29.5, §29.6, §30), 6/nv (§17, §18.1, §18.2, §18.1.2, §18.1.2.1, §18.1.2.2, §19), 8/ef (§19), 12/ca (§5.2), 12/dtd (§7.1, §7.1.1, §7.1.2, §8, §9, §9.1, §11, §15, §16, §17, §18, §19, §20, §22, §23, §25, §26, §27), 12/cdp (§2.1.6, §2.1.6.1.2.2, §2.1.6.1.2.3.2, §2.1.6.1.2.3.7, §2.1.6.1.2.4, §2.1.6.1.2.5, §2.1.6.1.2.3.3.1, §2.1.6.1.2.2.2, §2.1.6.1.2.2.2.1, §2.1.6.1.7, §2.1.6.1.8, §2.1.6.1.2.2.3, §2.1.6.1.9, §2.1.6.1.10, §2.1.6.1.2.2.4, §2.1.6.1.11, §2.1.6.1.2.2.5, §2.1.6.1.13, §2.1.6.1.14, §2.1.6.1.2.2.6, §2.1.6.1.2.2.6.1, §2.1.6.1.15, §2.1.6.1.17, §2.1.6.1.2.2.7, §2.1.6.1.18), 13/kak (§2), 13/ca (§1, §1.2, §1.3, §1.4, §1.5, §1.6, §1.7, §1.8, §1.9, §1.10, §1.11, §1.12, §1.13), 13/rsfk (§7, §16.3, §19, §24.1, §24.2, §24.3, §24.4.1, §24.4.2, §24.5, §24.5.1, §24.6.1, §24.6.2, §24.6.3, §24.6.4, §24.6.5, §24.6.6, §25), 14/rv (§24.3), 14/lv (§14.3, §14.3.2, §14.4, §14.5), 14/cn (§16.1, §16.2, §16.3), 14/cfs (§7), 15/ma (§13), 15/epv (§4), 17/tl (§14.2), 17/ts (§8, §11.1), 17/rs (§6.1, §6.2, §7.2), 19/tc (§8), 19/rsft (§2), 20/eq (§48), 21/rl (§11, §11.2, §20, §20.1, §20.2, §22.1), 21/rb (§24.1.1, §24.1.2, §24.1.3, §24.1.4, §24.1.5, §24.1.3.1), 21/rl2 (§14.1), 21/fao (§10), 21/sv (§3, §3.1, §3.2), 21/ac (§14), 22/prcd (§10, §10.2, §10.3, §10.4, §10.5, §10.1.1.1), 22/pav (§9.2), 23/abc (§1), 24/lv (§28, §29, §41, §43), 24/pb (§17), 24/ch (§3, §4, §6, §7, §7.1, §7.2, §7.3, §7.4, §7.4.1, §7.5), 25/ci (§3, §3.2.3, §3.2.3.2, §3.2.3.1.1, §3.2.3.3, §3.2.3.6, §3.2.3.3.1.2, §3.2.3.4.1.1, §3.2.3.3.1.2.1, §3.2.3.3.1.3, §4.2), 25/ciac (§2), 25/cii (§1.2.1, §3.1.1.4.7.1, §3.1.1.4.9, §3.1.1.4.10, §3.5.3, §3.5.8, §3.5.8.1, §3.5.8.2, §3.5.8.3, §3.5.9), 25/cp (§3.3.1, §5.2.1, §5.3.4, §5.3.5, §5.3.5.1, §5.3.5.2, §5.3.5.3), 26/uo (§21.1, §21.2), 26/lt (§4.1), 26/rt (§4.1.2, §4.1.3, §4.1.4, §4.1.5), 26/iti (§9), 26/ts (§10, §11, §12), 27/eis (§2.2, §2.3, §2.4, §2.5, §2.6, §2.7, §2.8, §2.9, §2.10, §2.11).

-

The function Emit::up is used in §3, 4/am (§35, §43), 5/lp (§19, §19.1, §19.2, §19.3, §19.3.1, §19.3.1.1, §19.3.2, §19.2.1, §19.2.2, §27, §27.2, §27.3, §27.3.1, §27.3.2, §27.3.3, §27.3.4), 5/ins (§29), 5/nv (§12, §16), 6/bp (§25, §33), 6/rlt (§15, §15.2, §15.2.1, §15.2.4, §15.2.5, §15.2.5.1, §15.2.6, §15.2.7, §15.2.8, §15.2.9, §15.2.10, §15.2.11, §15.2.12, §15.2.9.1, §15.2.10.1, §15.2.12.1, §17, §29.1, §29.2, §29.3, §29.4, §29.5, §29.6, §30), 6/nv (§17, §18.1, §18.2, §18.1.2, §18.1.2.1, §18.1.2.2, §19), 8/ef (§19), 12/is (§8), 12/ca (§5.2), 12/dtd (§7.1, §7.1.2, §8, §9, §9.1, §11, §15, §16, §17, §18, §19, §20, §22, §23, §25, §26, §27), 12/cdp (§2.1.6, §2.1.6.1, §2.1.6.1.2.2, §2.1.6.1.2.3.3, §2.1.6.1.2.3.7, §2.1.6.1.2.4, §2.1.6.1.2.5, §2.1.6.1.2.6, §2.1.6.1.2.2.2, §2.1.6.1.2.2.2.1, §2.1.6.1.7, §2.1.6.1.8, §2.1.6.1.2.2.3, §2.1.6.1.9, §2.1.6.1.10, §2.1.6.1.2.2.4, §2.1.6.1.11, §2.1.6.1.2.2.5, §2.1.6.1.13, §2.1.6.1.14, §2.1.6.1.2.2.6, §2.1.6.1.2.2.6.1, §2.1.6.1.15, §2.1.6.1.17, §2.1.6.1.2.2.7, §2.1.6.1.18), 13/kak (§2), 13/ca (§1, §1.2, §1.3, §1.4, §1.5, §1.6, §1.7, §1.8, §1.9, §1.10, §1.11, §1.12, §1.13), 13/rsfk (§16.3, §19, §24.1, §24.2, §24.3, §24.4.1, §24.4.2, §24.5, §24.5.1, §24.6.1, §24.6.2, §24.6.3, §24.6.4, §24.6.5, §24.6.6, §25), 14/rv (§24.3), 14/lv (§14.3, §14.3.2, §14.4, §14.5), 14/cn (§16.1, §16.2, §16.3), 14/cfs (§7, §8), 15/ma (§13), 15/epv (§4), 17/tl (§14.2), 17/ts (§8, §11.1), 17/rs (§6.1, §6.2, §7.2, §12.1.1), 19/tc (§8), 19/rsft (§2), 20/eq (§48), 21/rl (§11, §11.2, §20, §20.1, §20.2, §22.1), 21/rb (§24.1.1, §24.1.2, §24.1.3, §24.1.4, §24.1.5, §24.1.3.1), 21/rl2 (§14.1), 21/fao (§10), 21/sv (§3, §3.1, §3.2), 21/ac (§14), 22/prcd (§10, §10.3, §10.4, §10.1.1.1), 22/pav (§9.2), 23/abc (§1), 24/lv (§28, §29, §41, §43), 24/pb (§17), 24/ch (§3, §4, §6, §7, §7.1, §7.2, §7.3, §7.4, §7.4.1, §7.5), 25/ci (§3, §3.2.3, §3.2.3.2, §3.2.3.1.1, §3.2.3.3, §3.2.3.6, §3.2.3.4.1, §3.2.3.3.1.2.1, §3.2.3.3.1.3, §4.2), 25/ciac (§2), 25/cii (§1.2.1, §3.1.1.4.7.1, §3.1.1.4.9, §3.1.1.4.10, §3.5.3, §3.5.8, §3.5.8.1, §3.5.8.2, §3.5.8.3, §3.5.9), 25/cp (§3.3.1, §5.2.1, §5.3.4, §5.3.5, §5.3.5.1, §5.3.5.2, §5.3.5.3, §5.4.5), 26/uo (§21.1, §21.2), 26/lt (§4.1), 26/rt (§4.1.2, §4.1.3, §4.1.4, §4.1.5), 26/iti (§9), 26/ts (§10, §11, §12), 27/eis (§2.2, §2.3, §2.4, §2.5, §2.6, §2.7, §2.8, §2.9).

+

The function Emit::up is used in §3, 4/am (§35, §43), 5/lp (§19, §19.1, §19.2, §19.3, §19.3.1, §19.3.1.1, §19.3.2, §19.2.1, §19.2.2, §27, §27.2, §27.3, §27.3.1, §27.3.2, §27.3.3, §27.3.4), 5/ins (§29), 5/nv (§12, §16), 6/bp (§25, §33), 6/rlt (§15, §15.2, §15.2.1, §15.2.4, §15.2.5, §15.2.5.1, §15.2.6, §15.2.7, §15.2.8, §15.2.9, §15.2.10, §15.2.11, §15.2.12, §15.2.9.1, §15.2.10.1, §15.2.12.1, §17, §29.1, §29.2, §29.3, §29.4, §29.5, §29.6, §30), 6/nv (§17, §18.1, §18.2, §18.1.2, §18.1.2.1, §18.1.2.2, §19), 8/ef (§19), 12/is (§8), 12/ca (§5.2), 12/dtd (§7.1, §7.1.2, §8, §9, §9.1, §11, §15, §16, §17, §18, §19, §20, §22, §23, §25, §26, §27), 12/cdp (§2.1.6, §2.1.6.1, §2.1.6.1.2.2, §2.1.6.1.2.3.3, §2.1.6.1.2.3.7, §2.1.6.1.2.4, §2.1.6.1.2.5, §2.1.6.1.2.6, §2.1.6.1.2.2.2, §2.1.6.1.2.2.2.1, §2.1.6.1.7, §2.1.6.1.8, §2.1.6.1.2.2.3, §2.1.6.1.9, §2.1.6.1.10, §2.1.6.1.2.2.4, §2.1.6.1.11, §2.1.6.1.2.2.5, §2.1.6.1.13, §2.1.6.1.14, §2.1.6.1.2.2.6, §2.1.6.1.2.2.6.1, §2.1.6.1.15, §2.1.6.1.17, §2.1.6.1.2.2.7, §2.1.6.1.18), 13/kak (§2), 13/ca (§1, §1.2, §1.3, §1.4, §1.5, §1.6, §1.7, §1.8, §1.9, §1.10, §1.11, §1.12, §1.13), 13/rsfk (§16.3, §19, §24.1, §24.2, §24.3, §24.4.1, §24.4.2, §24.5, §24.5.1, §24.6.1, §24.6.2, §24.6.3, §24.6.4, §24.6.5, §24.6.6, §25), 14/rv (§24.3), 14/lv (§14.3, §14.3.2, §14.4, §14.5), 14/cn (§16.1, §16.2, §16.3), 14/cfs (§7, §8), 15/ma (§13), 15/epv (§4), 17/tl (§14.2), 17/ts (§8, §11.1), 17/rs (§6.1, §6.2, §7.2, §12.1.1), 19/tc (§8), 19/rsft (§2), 20/eq (§48), 21/rl (§11, §11.2, §20, §20.1, §20.2, §22.1), 21/rb (§24.1.1, §24.1.2, §24.1.3, §24.1.4, §24.1.5, §24.1.3.1), 21/rl2 (§14.1), 21/fao (§10), 21/sv (§3, §3.1, §3.2), 21/ac (§14), 22/prcd (§10, §10.3, §10.4, §10.1.1.1), 22/pav (§9.2), 23/abc (§1), 24/lv (§28, §29, §41, §43), 24/pb (§17), 24/ch (§3, §4, §6, §7, §7.1, §7.2, §7.3, §7.4, §7.4.1, §7.5), 25/ci (§3, §3.2.3, §3.2.3.2, §3.2.3.1.1, §3.2.3.3, §3.2.3.6, §3.2.3.4.1, §3.2.3.3.1.2.1, §3.2.3.3.1.3, §4.2), 25/ciac (§2), 25/cii (§1.2.1, §3.1.1.4.7.1, §3.1.1.4.9, §3.1.1.4.10, §3.5.3, §3.5.8, §3.5.8.1, §3.5.8.2, §3.5.8.3, §3.5.9), 25/cp (§3.3.1, §5.2.1, §5.3.4, §5.3.5, §5.3.5.1, §5.3.5.2, §5.3.5.3, §5.4.5), 26/uo (§21.1, §21.2), 26/lt (§4.1), 26/rt (§4.1.2, §4.1.3, §4.1.4, §4.1.5), 26/iti (§9), 26/ts (§10, §11, §12), 27/eis (§2.2, §2.3, §2.4, §2.5, §2.6, §2.7, §2.8, §2.9, §2.10, §2.11).

The function Emit::pop_code_position is used in 17/ts (§11).

The function Emit::code is used in 4/am (§35, §43), 5/lp (§19, §19.1, §19.2, §19.3, §19.3.1, §19.3.1.1, §19.3.2, §19.2.1, §19.2.2, §27, §27.2, §27.3.3, §27.3.4), 6/bp (§25), 6/rlt (§15.2, §15.2.4, §15.2.9, §15.2.12, §15.2.9.1, §15.2.10.1, §15.2.12.1, §29.1, §29.2, §29.3, §29.4, §29.5, §29.6), 6/nv (§18.1, §18.2, §18.1.2, §18.1.2.1, §18.1.2.2, §19), 8/ef (§19), 12/dtd (§23, §27), 12/cdp (§2.1.6, §2.1.6.1.2.3.3.1, §2.1.6.1.2.2.3, §2.1.6.1.10, §2.1.6.1.2.2.4, §2.1.6.1.11, §2.1.6.1.14, §2.1.6.1.2.2.6, §2.1.6.1.17), 13/rsfk (§16.3, §24.3, §24.5, §24.6.1, §24.6.2, §24.6.3, §24.6.4, §24.6.5, §24.6.6, §25), 15/ma (§13), 17/ts (§11.1), 17/rs (§6.2, §7.2), 19/tc (§8), 19/rsft (§2), 21/rl (§11, §20, §20.2), 21/rb (§24.1.2, §24.1.3, §24.1.4, §24.1.3.1), 21/rl2 (§14.1), 21/fao (§10), 21/sv (§3), 22/prcd (§10, §10.2, §10.3, §10.4, §10.5, §10.1.1.1), 24/ch (§6, §7, §7.4, §7.5), 25/ci (§3.2.3.3, §3.2.3.6, §3.2.3.3.1.2), 25/cii (§3.5.9), 25/cp (§5.3.4, §5.3.5, §5.3.5.1, §5.3.5.2, §5.3.5.3), 26/uo (§21.1, §21.2), 26/lt (§4.1), 26/ts (§10), 27/eis (§2.2).

-

The function Emit::evaluation is used in 26/iti (§9), 27/eis (§2.9).

+

The function Emit::evaluation is used in 26/iti (§9), 27/eis (§2.11).

-

The function Emit::reference is used in 13/ca (§1.10), 27/eis (§2.6, §2.9).

+

The function Emit::reference is used in 13/ca (§1.10), 27/eis (§2.8, §2.11).

-

The function Emit::val is used in §3, 4/am (§43), 5/lp (§19, §19.2, §19.3, §19.3.1, §19.3.1.1, §19.3.2, §19.2.1, §19.2.2, §27, §27.2, §27.3.3, §27.3.4), 5/nv (§12), 6/rlt (§15, §15.2.1, §15.2.4, §15.2.6, §15.2.7, §15.2.8, §15.2.10, §15.2.11, §15.2.12, §15.2.12.1), 6/nv (§17, §18.1, §18.1.2, §18.1.2.1, §18.1.2.2, §19), 8/ef (§19), 12/is (§7.3), 12/dtd (§7, §8, §9, §9.1, §10, §15, §18, §19, §20, §22, §23, §25, §26, §27), 12/cdp (§2.1.6, §2.1.6.1.2.3.7, §2.1.6.1.2.5, §2.1.6.1.2.2.3, §2.1.6.1.10, §2.1.6.1.11, §2.1.6.1.14, §2.1.6.1.2.2.6, §2.1.6.1.17), 13/rsfk (§9, §16.3, §19, §24.4.1, §24.4.2, §24.5, §24.5.1, §24.6.2, §24.6.3, §24.6.4), 14/vh (§3), 14/lv (§14.5), 14/cn (§16, §16.3), 15/epv (§4), 16/is (§29), 17/rs (§6.2, §7.2), 19/tc (§8), 21/rl (§11.1, §11.2, §20), 21/rb (§24.1.3, §24.1.5), 21/rl2 (§14.1), 21/fao (§10), 21/sv (§3), 21/ac (§14), 22/prcd (§10, §10.5, §10.1.1.1), 22/pav (§9.2), 24/lv (§28, §29, §43), 24/ch (§3, §4, §7.1, §7.2, §7.3, §7.4, §7.5), 25/ci (§3.2.3.1.1, §3.2.3.6, §3.2.3.3.1.3), 25/ciac (§2, §2.1), 25/cii (§3.1, §3.4.2, §3.1.1.4.10, §3.1.1.4.11, §3.6.1), 25/cp (§3.3.1, §5.2.1), 26/uo (§21.1, §21.2), 26/lt (§4.1), 26/rt (§4.1.2, §4.1.4), 26/iti (§9), 26/ts (§10, §12), 27/eis (§2.5, §2.9).

+

The function Emit::val is used in §3, 4/am (§43), 5/lp (§19, §19.2, §19.3, §19.3.1, §19.3.1.1, §19.3.2, §19.2.1, §19.2.2, §27, §27.2, §27.3.3, §27.3.4), 5/nv (§12), 6/rlt (§15, §15.2.1, §15.2.4, §15.2.6, §15.2.7, §15.2.8, §15.2.10, §15.2.11, §15.2.12, §15.2.12.1), 6/nv (§17, §18.1, §18.1.2, §18.1.2.1, §18.1.2.2, §19), 8/ef (§19), 12/is (§7.3), 12/dtd (§7, §8, §9, §9.1, §10, §15, §18, §19, §20, §22, §23, §25, §26, §27), 12/cdp (§2.1.6, §2.1.6.1.2.3.7, §2.1.6.1.2.5, §2.1.6.1.2.2.3, §2.1.6.1.10, §2.1.6.1.11, §2.1.6.1.14, §2.1.6.1.2.2.6, §2.1.6.1.17), 13/rsfk (§9, §16.3, §19, §24.4.1, §24.4.2, §24.5, §24.5.1, §24.6.2, §24.6.3, §24.6.4), 14/vh (§3), 14/lv (§14.5), 14/cn (§16, §16.3), 15/epv (§4), 16/is (§29), 17/rs (§6.2, §7.2), 19/tc (§8), 21/rl (§11.1, §11.2, §20), 21/rb (§24.1.3, §24.1.5), 21/rl2 (§14.1), 21/fao (§10), 21/sv (§3), 21/ac (§14), 22/prcd (§10, §10.5, §10.1.1.1), 22/pav (§9.2), 24/lv (§28, §29, §43), 24/ch (§3, §4, §7.1, §7.2, §7.3, §7.4, §7.5), 25/ci (§3.2.3.1.1, §3.2.3.6, §3.2.3.3.1.3), 25/ciac (§2, §2.1), 25/cii (§3.1, §3.4.2, §3.1.1.4.10, §3.1.1.4.11, §3.6.1), 25/cp (§3.3.1, §5.2.1), 26/uo (§21.1, §21.2), 26/lt (§4.1), 26/rt (§4.1.2, §4.1.4), 26/iti (§9), 26/ts (§10, §12), 27/eis (§2.7, §2.11).

The function Emit::val_nothing is used in 4/am (§43), 6/rlt (§29.1, §29.2, §29.3), 12/cdp (§2.1.6.1.11, §2.1.6.1.18).

-

The function Emit::lab is used in 5/lp (§19, §19.1, §19.2, §19.3, §19.3.1, §19.3.2, §27.2), 12/cdp (§2.1.6.1.2.2.2.1), 24/pb (§17), 25/cii (§3.4.1), 27/eis (§2.9).

+

The function Emit::lab is used in 5/lp (§19, §19.1, §19.2, §19.3, §19.3.1, §19.3.2, §27.2), 12/cdp (§2.1.6.1.2.2.2.1), 24/pb (§17), 25/cii (§3.4.1), 27/eis (§2.11).

The function Emit::ref appears nowhere else.

-

The function Emit::val_iname is used in §3, 4/am (§30, §43), 5/lp (§19, §19.3.1, §19.3.2, §19.2.1), 5/ins (§29), 5/nv (§12, §16), 6/bp (§25, §33), 6/rlt (§15, §15.2, §15.2.1, §15.2.5, §15.2.5.1, §15.2.6, §15.2.7, §15.2.8, §15.2.9, §15.2.12, §15.2.9.1, §15.2.10.1, §15.2.12.1, §17, §29.2, §29.3, §29.4, §29.5, §29.6), 6/nv (§17, §18.1, §18.2), 12/is (§8), 12/dtd (§9, §9.1, §13, §16, §18, §19, §22, §26), 12/cdp (§2.1.6.1.2.5, §2.1.6.1.8, §2.1.6.1.2.2.3, §2.1.6.1.2.2.5, §2.1.6.1.14, §2.1.6.1.2.2.6, §2.1.6.1.2.2.6.1), 13/kak (§2), 13/rsfk (§9, §12, §16.3, §24.3, §24.5, §24.5.1, §24.6.3, §24.6.6, §25), 14/lv (§14.3, §14.4, §14.5), 15/epv (§4), 17/ts (§8, §11.1), 17/rs (§5, §6.1, §6.2, §7.2), 19/tc (§8), 19/rsft (§2), 20/eq (§48), 21/rl (§20, §20.1, §20.2), 21/rb (§24.1.1, §24.1.2, §24.1.3, §24.1.3.1), 21/rl2 (§14.1), 21/fao (§10), 21/sv (§3.1, §3.2), 21/ac (§14), 22/prcd (§10, §10.3, §10.4, §10.1.1.1), 24/lv (§28, §29), 24/ch (§3, §7.1, §7.2, §7.3), 25/ci (§3, §3.2.3), 25/cii (§3.2.3, §3.2.4, §3.2.5, §3.2.6, §3.4.3, §3.1.1.4.7.1, §3.1.1.4.10, §3.5.8.3, §3.6.2, §3.6.3), 26/lt (§4.1), 26/iti (§9), 26/ts (§10, §11), 27/eis (§2.8.1).

+

The function Emit::val_iname is used in §3, 4/am (§30, §43), 5/lp (§19, §19.3.1, §19.3.2, §19.2.1), 5/ins (§29), 5/nv (§12, §16), 6/bp (§25, §33), 6/rlt (§15, §15.2, §15.2.1, §15.2.5, §15.2.5.1, §15.2.6, §15.2.7, §15.2.8, §15.2.9, §15.2.12, §15.2.9.1, §15.2.10.1, §15.2.12.1, §17, §29.2, §29.3, §29.4, §29.5, §29.6), 6/nv (§17, §18.1, §18.2), 12/is (§8), 12/dtd (§9, §9.1, §13, §16, §18, §19, §22, §26), 12/cdp (§2.1.6.1.2.5, §2.1.6.1.8, §2.1.6.1.2.2.3, §2.1.6.1.2.2.5, §2.1.6.1.14, §2.1.6.1.2.2.6, §2.1.6.1.2.2.6.1), 13/kak (§2), 13/rsfk (§9, §12, §16.3, §24.3, §24.5, §24.5.1, §24.6.3, §24.6.6, §25), 14/lv (§14.3, §14.4, §14.5), 15/epv (§4), 17/ts (§8, §11.1), 17/rs (§5, §6.1, §6.2, §7.2), 19/tc (§8), 19/rsft (§2), 20/eq (§48), 21/rl (§20, §20.1, §20.2), 21/rb (§24.1.1, §24.1.2, §24.1.3, §24.1.3.1), 21/rl2 (§14.1), 21/fao (§10), 21/sv (§3.1, §3.2), 21/ac (§14), 22/prcd (§10, §10.3, §10.4, §10.1.1.1), 24/lv (§28, §29), 24/ch (§3, §7.1, §7.2, §7.3), 25/ci (§3, §3.2.3), 25/cii (§3.2.3, §3.2.4, §3.2.5, §3.2.6, §3.4.3, §3.1.1.4.7.1, §3.1.1.4.10, §3.5.8.3, §3.6.2, §3.6.3), 26/lt (§4.1), 26/iti (§9), 26/ts (§10, §11), 27/eis (§2.10.1).

-

The function Emit::val_symbol is used in 4/am (§43), 5/lp (§19, §19.1, §19.2, §19.3, §19.3.1, §19.3.1.1, §19.3.2, §19.2.1, §19.2.2, §27, §27.2, §27.3.3, §27.3.4), 5/ins (§29), 6/bp (§25), 6/rlt (§15.2, §15.2.1, §15.2.4, §15.2.5, §15.2.5.1, §15.2.6, §15.2.7, §15.2.8, §15.2.9, §15.2.10, §15.2.11, §15.2.12, §15.2.9.1, §15.2.10.1, §15.2.12.1, §17, §29.1, §29.2, §29.3, §29.4, §29.5, §29.6), 6/nv (§18.1, §18.2, §18.1.2.1, §18.1.2.2, §19), 8/ef (§19), 11/tr (§10), 12/dtd (§23, §25, §26, §27), 12/cad (§7), 12/cdp (§2.1.6, §2.1.6.1.7, §2.1.6.1.8, §2.1.6.1.2.2.3, §2.1.6.1.9, §2.1.6.1.2.2.4, §2.1.6.1.11, §2.1.6.1.2.2.5, §2.1.6.1.13, §2.1.6.1.2.2.6, §2.1.6.1.2.2.6.1, §2.1.6.1.15, §2.1.6.1.17, §2.1.6.1.2.2.7), 13/kak (§2), 13/rsfk (§16.3, §24.1, §24.2, §24.3, §24.4.1, §24.4.2, §24.5, §24.5.1, §24.6.1, §24.6.2, §24.6.3, §24.6.4, §24.6.5, §24.6.6, §25), 14/lv (§14.1, §14.5), 14/cn (§16.3), 15/epv (§4), 17/rs (§6.2, §7.2), 19/tc (§8), 19/rsft (§2), 20/eq (§48), 21/rl (§20, §20.1, §20.2), 21/rb (§24.1.3, §24.1.3.1), 21/rl2 (§14.1), 21/fao (§10), 21/sv (§3, §3.1, §3.2), 24/lv (§28, §41, §45), 24/ch (§7, §7.1, §7.2, §7.3, §7.4, §7.5), 25/cii (§3.5.1, §3.5.3, §3.6.2), 26/uo (§21.1, §21.2), 26/rt (§4.1.3, §4.1.5), 27/eis (§2.9).

+

The function Emit::val_symbol is used in 4/am (§43), 5/lp (§19, §19.1, §19.2, §19.3, §19.3.1, §19.3.1.1, §19.3.2, §19.2.1, §19.2.2, §27, §27.2, §27.3.3, §27.3.4), 5/ins (§29), 6/bp (§25), 6/rlt (§15.2, §15.2.1, §15.2.4, §15.2.5, §15.2.5.1, §15.2.6, §15.2.7, §15.2.8, §15.2.9, §15.2.10, §15.2.11, §15.2.12, §15.2.9.1, §15.2.10.1, §15.2.12.1, §17, §29.1, §29.2, §29.3, §29.4, §29.5, §29.6), 6/nv (§18.1, §18.2, §18.1.2.1, §18.1.2.2, §19), 8/ef (§19), 11/tr (§10), 12/dtd (§23, §25, §26, §27), 12/cad (§7), 12/cdp (§2.1.6, §2.1.6.1.7, §2.1.6.1.8, §2.1.6.1.2.2.3, §2.1.6.1.9, §2.1.6.1.2.2.4, §2.1.6.1.11, §2.1.6.1.2.2.5, §2.1.6.1.13, §2.1.6.1.2.2.6, §2.1.6.1.2.2.6.1, §2.1.6.1.15, §2.1.6.1.17, §2.1.6.1.2.2.7), 13/kak (§2), 13/rsfk (§16.3, §24.1, §24.2, §24.3, §24.4.1, §24.4.2, §24.5, §24.5.1, §24.6.1, §24.6.2, §24.6.3, §24.6.4, §24.6.5, §24.6.6, §25), 14/lv (§14.1, §14.5), 14/cn (§16.3), 15/epv (§4), 17/rs (§6.2, §7.2), 19/tc (§8), 19/rsft (§2), 20/eq (§48), 21/rl (§20, §20.1, §20.2), 21/rb (§24.1.3, §24.1.3.1), 21/rl2 (§14.1), 21/fao (§10), 21/sv (§3, §3.1, §3.2), 24/lv (§28, §41, §45), 24/ch (§7, §7.1, §7.2, §7.3, §7.4, §7.5), 25/cii (§3.5.1, §3.5.3, §3.6.2), 26/uo (§21.1, §21.2), 26/rt (§4.1.3, §4.1.5), 27/eis (§2.11).

-

The function Emit::val_text is used in 4/am (§43), 5/lp (§19, §27.3, §27.3.1, §27.3.2, §27.3.3), 6/rlt (§15), 6/nv (§18.2, §19), 8/ef (§19), 13/rsfk (§24.3, §25), 17/tl (§14.2), 17/ts (§11.1), 17/rs (§7.2), 19/rsft (§2), 21/rl (§20.1, §20.2), 21/fao (§10), 24/ch (§7.4), 25/ci (§4.2), 25/cii (§3.5.8.1), 26/uo (§21.2), 26/ts (§10, §11, §12), 27/eis (§2.9).

+

The function Emit::val_text is used in 4/am (§43), 5/lp (§19, §27.3, §27.3.1, §27.3.2, §27.3.3), 6/rlt (§15), 6/nv (§18.2, §19), 8/ef (§19), 13/rsfk (§24.3, §25), 17/tl (§14.2), 17/ts (§11.1), 17/rs (§7.2), 19/rsft (§2), 21/rl (§20.1, §20.2), 21/fao (§10), 24/ch (§7.4), 25/ci (§4.2), 25/cii (§3.5.8.1), 26/uo (§21.2), 26/ts (§10, §11, §12), 27/eis (§2.11).

-

The function Emit::val_char is used in 27/eis (§2.9).

+

The function Emit::val_char is used in 27/eis (§2.11).

The function Emit::val_real appears nowhere else.

-

The function Emit::val_real_from_text is used in 27/eis (§2.9).

+

The function Emit::val_real_from_text is used in 27/eis (§2.11).

-

The function Emit::val_dword is used in 5/lp (§19.1), 26/ts (§10), 27/eis (§2.9).

+

The function Emit::val_dword is used in 5/lp (§19.1), 26/ts (§10), 27/eis (§2.11).

The function Emit::ref_iname is used in §3, 4/am (§43), 5/lp (§19, §19.1, §19.3.1, §19.3.2, §19.2.2), 6/nv (§17), 12/dtd (§19, §22), 14/lv (§14.3.2), 17/rs (§6.2), 21/rb (§24.1.3), 22/prcd (§10.3), 25/ci (§3, §3.2.3.1.1, §3.2.3.3.1.3), 25/cii (§3.1.1.4.10, §3.5.8.2, §3.5.8.3), 25/cp (§5.2.1), 26/lt (§4.1).

@@ -1545,7 +1545,7 @@ insert them into the Inter stream close to the top.

The function Emit::entire_splat appears nowhere else.

-

The function Emit::entire_splat_code is used in 27/eis (§2.10).

+

The function Emit::entire_splat_code is used in 27/eis (§2.12).

The function Emit::write_bytecode appears nowhere else.

diff --git a/docs/core-module/27-eis.html b/docs/core-module/27-eis.html index 488e375f5..347d85e96 100644 --- a/docs/core-module/27-eis.html +++ b/docs/core-module/27-eis.html @@ -41,14 +41,16 @@ switch (isn->isn_type) { case LABEL_ISNT: <Label 2.1>; break; case CODE_ISNT: <Code block 2.2>; break; - case EVAL_ISNT: <Eval block 2.5>; break; - case EXPRESSION_ISNT: <Expression 2.9>; break; - case SUBEXPRESSION_ISNT: <Subexpression 2.7>; break; - case STATEMENT_ISNT: <Statement 2.8>; break; - case OPERATION_ISNT: <Operation 2.6>; break; + case EVAL_ISNT: <Eval block 2.7>; break; + case EXPRESSION_ISNT: <Expression 2.11>; break; + case SUBEXPRESSION_ISNT: <Subexpression 2.9>; break; + case STATEMENT_ISNT: <Statement 2.10>; break; + case OPERATION_ISNT: <Operation 2.8>; break; case ASSEMBLY_ISNT: <Assembly 2.3>; break; case CALL_ISNT: <Call 2.4>; break; - case DIRECTIVE_ISNT: <Directive 2.10>; break; + case MESSAGE_ISNT: <Message 2.5>; break; + case CALLMESSAGE_ISNT: <Call-message 2.6>; break; + case DIRECTIVE_ISNT: <Directive 2.12>; break; default: internal_error("unknown schema node type"); } } @@ -56,7 +58,7 @@

-

The function EmitInterSchemas::emit_inner is used in §1, §2.2, §2.3, §2.4, §2.5, §2.6, §2.7, §2.8, §2.8.1.

+

The function EmitInterSchemas::emit_inner is used in §1, §2.2, §2.3, §2.4, §2.5, §2.6, §2.7, §2.8, §2.9, §2.10, §2.10.1.

§2.1. <Label 2.1> = @@ -192,7 +194,67 @@

This code is used in §2.

§2.5. -<Eval block 2.5> = +<Message 2.5> = +

+ + +
+        if (isn->child_node) {
+            inter_schema_node *at = isn->child_node;
+            int argc = 0;
+            for (inter_schema_node *n = isn->child_node; n; n=n->next_node) argc++;
+            switch (argc) {
+                case 2: Emit::inv_primitive(message0_interp); break;
+                case 3: Emit::inv_primitive(message1_interp); break;
+                case 4: Emit::inv_primitive(message2_interp); break;
+                case 5: Emit::inv_primitive(message3_interp); break;
+                default: internal_error("too many args for message"); break;
+            }
+            Emit::down();
+            for (; at; at=at->next_node)
+                EmitInterSchemas::emit_inner(at,
+                    VH, sch, opaque_state, VAL_PRIM_CAT,
+                    first_call, second_call, inline_command_handler, i7_source_handler);
+            Emit::up();
+        }
+
+ +

+ +

This code is used in §2.

+ +

§2.6. +<Call-message 2.6> = +

+ + +
+        if (isn->child_node) {
+            inter_schema_node *at = isn->child_node;
+            int argc = 0;
+            for (inter_schema_node *n = isn->child_node; n; n=n->next_node) argc++;
+            switch (argc) {
+                case 1: Emit::inv_primitive(callmessage0_interp); break;
+                case 2: Emit::inv_primitive(callmessage1_interp); break;
+                case 3: Emit::inv_primitive(callmessage2_interp); break;
+                case 4: Emit::inv_primitive(callmessage3_interp); break;
+                default: internal_error("too many args for call-message"); break;
+            }
+            Emit::down();
+            for (; at; at=at->next_node)
+                EmitInterSchemas::emit_inner(at,
+                    VH, sch, opaque_state, VAL_PRIM_CAT,
+                    first_call, second_call, inline_command_handler, i7_source_handler);
+            Emit::up();
+        }
+
+ +

+ +

This code is used in §2.

+ +

§2.7. +<Eval block 2.7> =

@@ -220,8 +282,8 @@

This code is used in §2.

-

§2.6. -<Operation 2.6> = +

§2.8. +<Operation 2.8> =

@@ -249,8 +311,8 @@

This code is used in §2.

-

§2.7. -<Subexpression 2.7> = +

§2.9. +<Subexpression 2.9> =

@@ -273,8 +335,8 @@

This code is used in §2.

-

§2.8. -<Statement 2.8> = +

§2.10. +<Statement 2.10> =

@@ -286,7 +348,7 @@ if (arity > 0) { Emit::down(); if (isn->isn_clarifier == objectloop_interp) - <Add the objectloop range tokens 2.8.1>; + <Add the objectloop range tokens 2.10.1>; inter_schema_node *at = isn->child_node; inter_schema_node *last = NULL; int actual_arity = 0; @@ -308,8 +370,8 @@

This code is used in §2.

-

§2.8.1. -<Add the objectloop range tokens 2.8.1> = +

§2.10.1. +<Add the objectloop range tokens 2.10.1> =

@@ -342,10 +404,10 @@

-

This code is used in §2.8.

+

This code is used in §2.10.

-

§2.9. -<Expression 2.9> = +

§2.11. +<Expression 2.11> =

@@ -437,8 +499,8 @@

This code is used in §2.

-

§2.10. -<Directive 2.10> = +

§2.12. +<Directive 2.12> =

@@ -515,7 +577,7 @@

-

The function EmitInterSchemas::find_identifier is used in §2.4, §2.9.

+

The function EmitInterSchemas::find_identifier is used in §2.4, §2.11.

The function EmitInterSchemas::find_identifier_text is used in 25/cii (§3.6.2).

diff --git a/docs/core-module/27-hr.html b/docs/core-module/27-hr.html index f7631addc..1ba40bf7b 100644 --- a/docs/core-module/27-hr.html +++ b/docs/core-module/27-hr.html @@ -2074,7 +2074,7 @@

-

The function Hierarchy::find is used in 4/am (§43), 5/lp (§19, §19.1, §19.3.1, §19.3.1.1, §19.3.2, §19.2.1, §19.2.2), 5/nv (§12, §16, §20), 6/bp (§33, §42), 6/rlt (§14, §15, §15.1.2, §15.2, §15.2.1, §15.2.5.1, §15.2.6, §15.2.9, §15.2.10, §15.2.11, §15.2.12, §15.2.9.1, §15.2.10.1, §15.2.12.1, §16, §17, §29.1, §29.5, §29.6), 6/nv (§17, §18, §18.1, §18.2), 8/ef (§19), 12/is (§8), 12/dtd (§9, §9.1, §17, §19, §22, §27), 12/cdp (§2.1.6.1.2.5, §2.1.6.1.8, §2.1.6.1.2.2.3, §2.1.6.1.9, §2.1.6.1.2.2.5, §2.1.6.1.14, §2.1.6.1.2.2.6, §2.1.6.1.2.2.6.1), 13/kak (§5), 13/ca (§1, §1.2, §1.3, §1.4, §1.5, §1.6, §1.7, §1.8, §1.9, §1.11, §1.12), 13/rsfk (§4, §16.3, §18.1, §19, §24, §24.5, §24.5.1, §24.6.1, §24.6.2, §24.6.3, §24.6.4, §24.6.5, §24.6.6, §25), 14/rv (§24.3), 14/lv (§14.3, §14.3.2, §14.4, §14.5), 14/cfs (§7), 17/tl (§10, §14.1, §16), 17/ts (§8, §8.1, §11, §11.1), 17/rs (§6.1, §6.2, §7.3, §7.3.1.1), 19/tc (§8), 19/rsft (§1.1.1.1.1.5, §1.2, §1.3, §2), 20/eq (§48), 21/rl (§20, §20.1), 21/rb (§23, §24, §24.1.1, §24.1.2, §24.1.3, §24.1.3.1), 21/rl2 (§14, §14.1, §20), 21/fao (§10), 21/sv (§3, §3.1, §3.2), 21/ac (§8, §14), 22/cs (§8), 22/prcd (§10, §10.3, §10.4, §10.1.1.1), 22/pav (§9.2), 22/tp2 (§4), 24/lv (§28, §29, §41), 24/ch (§3, §4, §6, §7, §7.1, §7.2, §7.3, §8), 25/ci (§3, §3.2.3, §3.2.3.6, §3.2.3.3.1.3), 25/cii (§3.2.6, §3.1.1.4.7.1, §3.1.1.4.9, §3.1.1.4.10, §3.5.3, §3.5.8.2, §3.5.8.3, §3.6.2), 25/cp (§5.2.1, §6), 26/vm (§8), 26/uo (§21, §21.1), 26/lt (§4.1), 26/rt (§4.1.2, §4.1.3, §4.1.4), 26/iti (§10), 26/pl (§8), 26/ts (§10, §11, §12), 27/eis (§2.9), 27/ei (§2, §3).

+

The function Hierarchy::find is used in 4/am (§43), 5/lp (§19, §19.1, §19.3.1, §19.3.1.1, §19.3.2, §19.2.1, §19.2.2), 5/nv (§12, §16, §20), 6/bp (§33, §42), 6/rlt (§14, §15, §15.1.2, §15.2, §15.2.1, §15.2.5.1, §15.2.6, §15.2.9, §15.2.10, §15.2.11, §15.2.12, §15.2.9.1, §15.2.10.1, §15.2.12.1, §16, §17, §29.1, §29.5, §29.6), 6/nv (§17, §18, §18.1, §18.2), 8/ef (§19), 12/is (§8), 12/dtd (§9, §9.1, §17, §19, §22, §27), 12/cdp (§2.1.6.1.2.5, §2.1.6.1.8, §2.1.6.1.2.2.3, §2.1.6.1.9, §2.1.6.1.2.2.5, §2.1.6.1.14, §2.1.6.1.2.2.6, §2.1.6.1.2.2.6.1), 13/kak (§5), 13/ca (§1, §1.2, §1.3, §1.4, §1.5, §1.6, §1.7, §1.8, §1.9, §1.11, §1.12), 13/rsfk (§4, §16.3, §18.1, §19, §24, §24.5, §24.5.1, §24.6.1, §24.6.2, §24.6.3, §24.6.4, §24.6.5, §24.6.6, §25), 14/rv (§24.3), 14/lv (§14.3, §14.3.2, §14.4, §14.5), 14/cfs (§7), 17/tl (§10, §14.1, §16), 17/ts (§8, §8.1, §11, §11.1), 17/rs (§6.1, §6.2, §7.3, §7.3.1.1), 19/tc (§8), 19/rsft (§1.1.1.1.1.5, §1.2, §1.3, §2), 20/eq (§48), 21/rl (§20, §20.1), 21/rb (§23, §24, §24.1.1, §24.1.2, §24.1.3, §24.1.3.1), 21/rl2 (§14, §14.1, §20), 21/fao (§10), 21/sv (§3, §3.1, §3.2), 21/ac (§8, §14), 22/cs (§8), 22/prcd (§10, §10.3, §10.4, §10.1.1.1), 22/pav (§9.2), 22/tp2 (§4), 24/lv (§28, §29, §41), 24/ch (§3, §4, §6, §7, §7.1, §7.2, §7.3, §8), 25/ci (§3, §3.2.3, §3.2.3.6, §3.2.3.3.1.3), 25/cii (§3.2.6, §3.1.1.4.7.1, §3.1.1.4.9, §3.1.1.4.10, §3.5.3, §3.5.8.2, §3.5.8.3, §3.6.2), 25/cp (§5.2.1, §6), 26/vm (§8), 26/uo (§21, §21.1), 26/lt (§4.1), 26/rt (§4.1.2, §4.1.3, §4.1.4), 26/iti (§10), 26/pl (§8), 26/ts (§10, §11, §12), 27/eis (§2.11), 27/ei (§2, §3).

The function Hierarchy::make_available is used in 15/pr (§21), 21/rl (§9).

diff --git a/docs/core-module/27-in.html b/docs/core-module/27-in.html index 695e18244..1c631493f 100644 --- a/docs/core-module/27-in.html +++ b/docs/core-module/27-in.html @@ -324,7 +324,7 @@ automatically here:

-

The function InterNames::to_symbol is used in 15/epv (§4), 21/rl (§11.2, §22), 26/iti (§9), 27/hr (§5), 27/eis (§2.9, §3), 27/ei (§2, §3, §4, §5).

+

The function InterNames::to_symbol is used in 15/epv (§4), 21/rl (§11.2, §22), 26/iti (§9), 27/hr (§5), 27/eis (§2.11, §3), 27/ei (§2, §3, §4, §5).



diff --git a/inform7/core-module/Chapter 27/Emitting Inter Schemas.w b/inform7/core-module/Chapter 27/Emitting Inter Schemas.w index 3b59dac8f..4d9d172de 100644 --- a/inform7/core-module/Chapter 27/Emitting Inter Schemas.w +++ b/inform7/core-module/Chapter 27/Emitting Inter Schemas.w @@ -30,6 +30,8 @@ void EmitInterSchemas::emit_inner(inter_schema_node *isn, value_holster *VH, case OPERATION_ISNT: @; break; case ASSEMBLY_ISNT: @; break; case CALL_ISNT: @; break; + case MESSAGE_ISNT: @; break; + case CALLMESSAGE_ISNT: @; break; case DIRECTIVE_ISNT: @; break; default: internal_error("unknown schema node type"); } @@ -128,6 +130,46 @@ void EmitInterSchemas::emit_inner(inter_schema_node *isn, value_holster *VH, Emit::up(); } +@ = + if (isn->child_node) { + inter_schema_node *at = isn->child_node; + int argc = 0; + for (inter_schema_node *n = isn->child_node; n; n=n->next_node) argc++; + switch (argc) { + case 2: Emit::inv_primitive(message0_interp); break; + case 3: Emit::inv_primitive(message1_interp); break; + case 4: Emit::inv_primitive(message2_interp); break; + case 5: Emit::inv_primitive(message3_interp); break; + default: internal_error("too many args for message"); break; + } + Emit::down(); + for (; at; at=at->next_node) + EmitInterSchemas::emit_inner(at, + VH, sch, opaque_state, VAL_PRIM_CAT, + first_call, second_call, inline_command_handler, i7_source_handler); + Emit::up(); + } + +@ = + if (isn->child_node) { + inter_schema_node *at = isn->child_node; + int argc = 0; + for (inter_schema_node *n = isn->child_node; n; n=n->next_node) argc++; + switch (argc) { + case 1: Emit::inv_primitive(callmessage0_interp); break; + case 2: Emit::inv_primitive(callmessage1_interp); break; + case 3: Emit::inv_primitive(callmessage2_interp); break; + case 4: Emit::inv_primitive(callmessage3_interp); break; + default: internal_error("too many args for call-message"); break; + } + Emit::down(); + for (; at; at=at->next_node) + EmitInterSchemas::emit_inner(at, + VH, sch, opaque_state, VAL_PRIM_CAT, + first_call, second_call, inline_command_handler, i7_source_handler); + Emit::up(); + } + @ = if ((prim_cat != CODE_PRIM_CAT) && (prim_cat != VAL_PRIM_CAT)) internal_error("eval block outside evaluation context"); diff --git a/inter/Tests/Units/_Results_Ideal/exp.txt b/inter/Tests/Units/_Results_Ideal/exp.txt new file mode 100644 index 000000000..9a788c693 --- /dev/null +++ b/inter/Tests/Units/_Results_Ideal/exp.txt @@ -0,0 +1,59 @@ +Test: parse schema from: + alpha.beta() + +* (message) + * (expr) + IDENTIFIER alpha + * (expr) + IDENTIFIER beta +========= +Test: parse schema from: + alpha.beta(x) + +* (message) + * (expr) + IDENTIFIER alpha + * (expr) + IDENTIFIER beta + * (expr) + IDENTIFIER x +========= +Test: parse schema from: + routine.call(x) + +* (call-message) + * (expr) + IDENTIFIER routine + * (expr) + IDENTIFIER x +========= +Test: parse schema from: + (alpha.beta)(x) + +* (call) + * (subexpression) + * (operation) !propertyvalue + * (expr) + IDENTIFIER alpha + * (expr) + IDENTIFIER beta + * (expr) + IDENTIFIER x +========= +Test: parse schema from: + debug_rules = 2; say__p = 1; + "Rules tracing now switched to ~all~. Type ~rules off~ to switch it off again."; + +* (operation) !store + * (expr) + IDENTIFIER debug_rules + * (expr) + NUMBER 2 +* (operation) !store + * (expr) + IDENTIFIER say__p + * (expr) + NUMBER 1 +* (expr) ; + DQUOTED Rules tracing now switched to "all". Type "rules off" to switch it off again. +========= diff --git a/inter/Tests/Units/exp.txt b/inter/Tests/Units/exp.txt new file mode 100644 index 000000000..5cfc38394 --- /dev/null +++ b/inter/Tests/Units/exp.txt @@ -0,0 +1,16 @@ +schema + alpha.beta() +end +schema + alpha.beta(x) +end +schema + routine.call(x) +end +schema + (alpha.beta)(x) +end +schema + debug_rules = 2; say__p = 1; + "Rules tracing now switched to ~all~. Type ~rules off~ to switch it off again."; +end diff --git a/inter/codegen-module/Chapter 2/Assimilate.w b/inter/codegen-module/Chapter 2/Assimilate.w index 068db5f84..0c3f6c4ff 100644 --- a/inter/codegen-module/Chapter 2/Assimilate.w +++ b/inter/codegen-module/Chapter 2/Assimilate.w @@ -669,7 +669,7 @@ inter_symbol *CodeGen::Assimilate::computed_constant_symbol(inter_package *pack) int rb_splat_count = 1; void CodeGen::Assimilate::routine_body(inter_reading_state *IRS, inter_symbol *block_name, inter_t offset, text_stream *body) { if (Str::is_whitespace(body)) return; - if (Str::len(body) < 100) { + if (Str::len(body) < 120) { LOG("=======\n\nCandidate (%S) len %d: '%S'\n\n", block_name->symbol_name, Str::len(body), body); inter_schema *sch = InterSchemas::from_text(body, FALSE, 0, NULL); diff --git a/inter/codegen-module/Chapter 3/Inter Primitives.w b/inter/codegen-module/Chapter 3/Inter Primitives.w index d168ddadd..40324c6bc 100644 --- a/inter/codegen-module/Chapter 3/Inter Primitives.w +++ b/inter/codegen-module/Chapter 3/Inter Primitives.w @@ -89,6 +89,14 @@ inter_symbol *indirect2_interp = NULL; inter_symbol *indirect3_interp = NULL; inter_symbol *indirect4_interp = NULL; inter_symbol *indirect5_interp = NULL; +inter_symbol *message0_interp = NULL; +inter_symbol *message1_interp = NULL; +inter_symbol *message2_interp = NULL; +inter_symbol *message3_interp = NULL; +inter_symbol *callmessage0_interp = NULL; +inter_symbol *callmessage1_interp = NULL; +inter_symbol *callmessage2_interp = NULL; +inter_symbol *callmessage3_interp = NULL; inter_symbol *propertyaddress_interp = NULL; inter_symbol *propertylength_interp = NULL; inter_symbol *provides_interp = NULL; @@ -183,6 +191,14 @@ void Primitives::emit(inter_repository *I, inter_reading_state *IRS) { Primitives::emit_one(I, IRS, I"!indirect3", I"val val val val -> val", &indirect3_interp); Primitives::emit_one(I, IRS, I"!indirect4", I"val val val val val -> val", &indirect4_interp); Primitives::emit_one(I, IRS, I"!indirect5", I"val val val val val val -> val", &indirect5_interp); + Primitives::emit_one(I, IRS, I"!message0", I"val val -> val", &message0_interp); + Primitives::emit_one(I, IRS, I"!message1", I"val val val -> val", &message1_interp); + Primitives::emit_one(I, IRS, I"!message2", I"val val val val -> val", &message2_interp); + Primitives::emit_one(I, IRS, I"!message3", I"val val val val val -> val", &message3_interp); + Primitives::emit_one(I, IRS, I"!callmessage0", I"val -> val", &callmessage0_interp); + Primitives::emit_one(I, IRS, I"!callmessage1", I"val val -> val", &callmessage1_interp); + Primitives::emit_one(I, IRS, I"!callmessage2", I"val val val -> val", &callmessage2_interp); + Primitives::emit_one(I, IRS, I"!callmessage3", I"val val val val -> val", &callmessage3_interp); Primitives::emit_one(I, IRS, I"!propertyaddress", I"val val -> val", &propertyaddress_interp); Primitives::emit_one(I, IRS, I"!propertylength", I"val val -> val", &propertylength_interp); Primitives::emit_one(I, IRS, I"!provides", I"val val -> val", &provides_interp); @@ -337,6 +353,14 @@ inter_symbol *Primitives::indirectv_interp(int arity) { @e INDIRECT3_BIP @e INDIRECT4_BIP @e INDIRECT5_BIP +@e MESSAGE0_BIP +@e MESSAGE1_BIP +@e MESSAGE2_BIP +@e MESSAGE3_BIP +@e CALLMESSAGE0_BIP +@e CALLMESSAGE1_BIP +@e CALLMESSAGE2_BIP +@e CALLMESSAGE3_BIP @e PROPERTYADDRESS_BIP @e PROPERTYLENGTH_BIP @e PROVIDES_BIP @@ -436,6 +460,14 @@ inter_t Primitives::to_bip(inter_repository *I, inter_symbol *symb) { if (Str::eq(symb->symbol_name, I"!indirect3")) bip = INDIRECT3_BIP; if (Str::eq(symb->symbol_name, I"!indirect4")) bip = INDIRECT4_BIP; if (Str::eq(symb->symbol_name, I"!indirect5")) bip = INDIRECT5_BIP; + if (Str::eq(symb->symbol_name, I"!message0")) bip = MESSAGE0_BIP; + if (Str::eq(symb->symbol_name, I"!message1")) bip = MESSAGE1_BIP; + if (Str::eq(symb->symbol_name, I"!message2")) bip = MESSAGE2_BIP; + if (Str::eq(symb->symbol_name, I"!message3")) bip = MESSAGE3_BIP; + if (Str::eq(symb->symbol_name, I"!callmessage0")) bip = CALLMESSAGE0_BIP; + if (Str::eq(symb->symbol_name, I"!callmessage1")) bip = CALLMESSAGE1_BIP; + if (Str::eq(symb->symbol_name, I"!callmessage2")) bip = CALLMESSAGE2_BIP; + if (Str::eq(symb->symbol_name, I"!callmessage3")) bip = CALLMESSAGE3_BIP; if (Str::eq(symb->symbol_name, I"!propertyaddress")) bip = PROPERTYADDRESS_BIP; if (Str::eq(symb->symbol_name, I"!propertylength")) bip = PROPERTYLENGTH_BIP; if (Str::eq(symb->symbol_name, I"!provides")) bip = PROVIDES_BIP; diff --git a/inter/codegen-module/Chapter 3/Inter Schemas.w b/inter/codegen-module/Chapter 3/Inter Schemas.w index 78b358c51..d002761ec 100644 --- a/inter/codegen-module/Chapter 3/Inter Schemas.w +++ b/inter/codegen-module/Chapter 3/Inter Schemas.w @@ -65,6 +65,8 @@ but the need to do this went away.) @e ASSEMBLY_ISNT @e LABEL_ISNT @e CALL_ISNT +@e MESSAGE_ISNT +@e CALLMESSAGE_ISNT = typedef struct inter_schema_node { @@ -463,6 +465,12 @@ void InterSchemas::log_just(inter_schema_node *isn, int depth) { case CALL_ISNT: LOG("* (call)\n"); break; + case MESSAGE_ISNT: + LOG("* (message)\n"); + break; + case CALLMESSAGE_ISNT: + LOG("* (call-message)\n"); + break; case SUBEXPRESSION_ISNT: LOG("* (subexpression)\n"); break; @@ -791,6 +799,7 @@ out for the two extra syntaxes allowed, |{-bracing}| and |(+ Inform 7 interpolat InterSchemas::add_token(sch, InterSchemas::new_token(WHITE_SPACE_ISTT, I" ", NULL, 0, -1)); break; case DQUOTED_TOKSTATE: + InterSchemas::de_escape_text(current_raw); InterSchemas::add_token(sch, InterSchemas::new_token(DQUOTED_ISTT, current_raw, NULL, 0, -1)); break; case SQUOTED_TOKSTATE: @@ -1429,6 +1438,7 @@ void InterSchemas::unmark(inter_schema_node *isn) { REPEATEDLY_APPLY(InterSchemas::strip_all_spacing); REPEATEDLY_APPLY(InterSchemas::debracket); REPEATEDLY_APPLY(InterSchemas::implied_return_values); + REPEATEDLY_APPLY(InterSchemas::message_calls); @ = int InterSchemas::implied_braces(inter_schema_node *par, inter_schema_node *at) { @@ -1846,10 +1856,10 @@ int InterSchemas::splitcases(inter_schema_node *par, inter_schema_node *isn) { @ = int InterSchemas::alternatecases(inter_schema_node *par, inter_schema_node *isn) { for (; isn; isn=isn->next_node) { - if (isn->isn_clarifier == case_interp) { + if ((isn->isn_clarifier == case_interp) && (isn->child_node)) { inter_schema_node *A = isn->child_node; inter_schema_node *B = isn->child_node->next_node; - if ((A->isn_type == EXPRESSION_ISNT) && (B->isn_type == EXPRESSION_ISNT)) { + if ((A) && (B) && (B->next_node)) { inter_schema_node *C = InterSchemas::new_node(isn->parent_schema, OPERATION_ISNT); C->isn_clarifier = alternativecase_interp; C->child_node = A; @@ -1939,12 +1949,7 @@ int InterSchemas::identify_constructs(inter_schema_node *par, inter_schema_node while ((n) && (n->ist_type == WHITE_SPACE_ISTT)) n = n->next; if ((n) && (n->ist_type == DQUOTED_ISTT)) { subordinate_to = print_interp; - LOOP_THROUGH_TEXT(P, n->material) { - if (Str::get(P) == '^') - Str::put(P, '\n'); - if (Str::get(P) == '~') - Str::put(P, '\"'); - } + InterSchemas::de_escape_text(n->material); } } if (isn->expression_tokens->reserved_word == PRINTRET_I6RW) { @@ -2136,6 +2141,7 @@ int InterSchemas::identify_constructs(inter_schema_node *par, inter_schema_node if (dangle_text) { new_isn->expression_tokens = InterSchemas::new_token(DQUOTED_ISTT, dangle_text, NULL, 0, -1); new_isn->expression_tokens->owner = new_isn; + InterSchemas::de_escape_text(new_isn->expression_tokens->material); } if (operand2) { inter_schema_node *new_new_isn = InterSchemas::new_node(isn->parent_schema, EXPRESSION_ISNT); @@ -2570,6 +2576,40 @@ int InterSchemas::implied_return_values(inter_schema_node *par, inter_schema_nod return FALSE; } +@ = +int InterSchemas::message_calls(inter_schema_node *par, inter_schema_node *isn) { + for (inter_schema_node *prev = NULL; isn; prev = isn, isn = isn->next_node) { + if ((isn->isn_type == OPERATION_ISNT) && (isn->isn_clarifier == propertyvalue_interp) && + (isn->child_node) && (isn->child_node->next_node) && (isn->child_node->next_node->isn_type == CALL_ISNT)) { + inter_schema_node *obj = isn->child_node; + inter_schema_node *message = isn->child_node->next_node->child_node; + inter_schema_node *args = isn->child_node->next_node->child_node->next_node; + isn->isn_type = MESSAGE_ISNT; isn->isn_clarifier = NULL; + obj->next_node = message; message->parent_node = isn; message->next_node = args; + if (message->isn_type == EXPRESSION_ISNT) { + inter_schema_token *n = message->expression_tokens; + if ((n) && (Str::eq(n->material, I"call"))) { + obj->next_node = args; isn->isn_type = CALLMESSAGE_ISNT; + } + } + while (args) { args->parent_node = isn; args = args->next_node; } + return TRUE; + } + if (InterSchemas::message_calls(isn, isn->child_node)) return TRUE; + } + return FALSE; +} + +@ = +void InterSchemas::de_escape_text(text_stream *m) { + LOOP_THROUGH_TEXT(P, m) { + if (Str::get(P) == '^') + Str::put(P, '\n'); + if (Str::get(P) == '~') + Str::put(P, '\"'); + } +} + @h Operators in I6. The following routines return data which is essentially the content of the table shown in section 6.2 of the Inform 6 Technical Manual: which operators diff --git a/inter/codegen-module/Chapter 4/Code Generation.w b/inter/codegen-module/Chapter 4/Code Generation.w index 4c2c3bc14..72cafaa60 100644 --- a/inter/codegen-module/Chapter 4/Code Generation.w +++ b/inter/codegen-module/Chapter 4/Code Generation.w @@ -702,6 +702,14 @@ void CodeGen::inv(OUTPUT_STREAM, inter_repository *I, inter_frame P) { case INDIRECT3_BIP: @; break; case INDIRECT4_BIP: @; break; case INDIRECT5_BIP: @; break; + case MESSAGE0_BIP: @; break; + case MESSAGE1_BIP: @; break; + case MESSAGE2_BIP: @; break; + case MESSAGE3_BIP: @; break; + case CALLMESSAGE0_BIP: @; break; + case CALLMESSAGE1_BIP: @; break; + case CALLMESSAGE2_BIP: @; break; + case CALLMESSAGE3_BIP: @; break; case PROPERTYADDRESS_BIP: @; break; case PROPERTYLENGTH_BIP: @; break; case PROVIDES_BIP: @; break; @@ -1459,6 +1467,78 @@ then the result. CodeGen::frame(OUT, I, Inter::sixth_in_frame_list(ifl)); WRITE(")"); +@ = + WRITE("("); + CodeGen::frame(OUT, I, Inter::top_of_frame_list(ifl)); + WRITE("."); + CodeGen::frame(OUT, I, Inter::second_in_frame_list(ifl)); + WRITE("())"); + +@ = + WRITE("("); + CodeGen::frame(OUT, I, Inter::top_of_frame_list(ifl)); + WRITE("."); + CodeGen::frame(OUT, I, Inter::second_in_frame_list(ifl)); + WRITE("("); + CodeGen::frame(OUT, I, Inter::third_in_frame_list(ifl)); + WRITE("))"); + +@ = + WRITE("("); + CodeGen::frame(OUT, I, Inter::top_of_frame_list(ifl)); + WRITE("."); + CodeGen::frame(OUT, I, Inter::second_in_frame_list(ifl)); + WRITE("("); + CodeGen::frame(OUT, I, Inter::third_in_frame_list(ifl)); + WRITE(","); + CodeGen::frame(OUT, I, Inter::fourth_in_frame_list(ifl)); + WRITE("))"); + +@ = + WRITE("("); + CodeGen::frame(OUT, I, Inter::top_of_frame_list(ifl)); + WRITE("."); + CodeGen::frame(OUT, I, Inter::second_in_frame_list(ifl)); + WRITE("("); + CodeGen::frame(OUT, I, Inter::third_in_frame_list(ifl)); + WRITE(","); + CodeGen::frame(OUT, I, Inter::fourth_in_frame_list(ifl)); + WRITE(","); + CodeGen::frame(OUT, I, Inter::fifth_in_frame_list(ifl)); + WRITE("))"); + +@ = + WRITE("("); + CodeGen::frame(OUT, I, Inter::top_of_frame_list(ifl)); + WRITE(".call())"); + +@ = + WRITE("("); + CodeGen::frame(OUT, I, Inter::top_of_frame_list(ifl)); + WRITE(".call("); + CodeGen::frame(OUT, I, Inter::second_in_frame_list(ifl)); + WRITE("))"); + +@ = + WRITE("("); + CodeGen::frame(OUT, I, Inter::top_of_frame_list(ifl)); + WRITE(".call("); + CodeGen::frame(OUT, I, Inter::second_in_frame_list(ifl)); + WRITE(","); + CodeGen::frame(OUT, I, Inter::third_in_frame_list(ifl)); + WRITE("))"); + +@ = + WRITE("("); + CodeGen::frame(OUT, I, Inter::top_of_frame_list(ifl)); + WRITE(".call("); + CodeGen::frame(OUT, I, Inter::second_in_frame_list(ifl)); + WRITE(","); + CodeGen::frame(OUT, I, Inter::third_in_frame_list(ifl)); + WRITE(","); + CodeGen::frame(OUT, I, Inter::fourth_in_frame_list(ifl)); + WRITE("))"); + @ = WRITE("("); CodeGen::frame(OUT, I, Inter::top_of_frame_list(ifl));