Compiled code to print and parse values expressed as literals.


§1. Matching an LP at run-time. The following routine compiles an I6 general parsing routine (GPR) to match typed input in the correct notation. It amounts to printing out a version of the above routine, but ported to I6, and with the token loop "rolled out" so that no tc and ec variables are needed at run-time, and simplified by having the numerical overflow detection removed. (It's a little slow to perform that check within the VM.)

Properly speaking this is not an entire GPR, but only a segment of one, and we should compile code which allows execution to reach the end if and only if we fail to make a match.

void RTLiteralPatterns::gpr(gpr_kit *gprk, literal_pattern *lp) {
    int label = lp->allocation_id;
    int tc, ec;
    RTLiteralPatterns::comment_use_of_lp(lp);

    Produce::inv_primitive(Emit::tree(), STORE_BIP);
    Produce::down(Emit::tree());
        Produce::ref_symbol(Emit::tree(), K_value, gprk->wpos_s);
        Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 0);
    Produce::up(Emit::tree());
    Produce::inv_primitive(Emit::tree(), STORE_BIP);
    Produce::down(Emit::tree());
        Produce::ref_symbol(Emit::tree(), K_value, gprk->mid_word_s);
        Produce::val(Emit::tree(), K_truth_state, LITERAL_IVAL, 0);
    Produce::up(Emit::tree());
    Produce::inv_primitive(Emit::tree(), STORE_BIP);
    Produce::down(Emit::tree());
        Produce::ref_symbol(Emit::tree(), K_value, gprk->matched_number_s);
        Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 0);
    Produce::up(Emit::tree());

    TEMPORARY_TEXT(SL)
    WRITE_TO(SL, ".Succeeded_LP_%d", label);
    inter_symbol *succeeded_label = Produce::reserve_label(Emit::tree(), SL);
    DISCARD_TEXT(SL)
    TEMPORARY_TEXT(FL)
    WRITE_TO(FL, ".Failed_LP_%d", label);
    inter_symbol *failed_label = Produce::reserve_label(Emit::tree(), FL);
    DISCARD_TEXT(FL)

    for (tc=0, ec=0; tc<lp->no_lp_tokens; tc++) {
        int lookahead = -1;
        if ((tc+1<lp->no_lp_tokens) && (lp->lp_tokens[tc+1].lpt_type == CHARACTER_LPT))
            lookahead = (int) (lp->lp_tokens[tc+1].token_char);
        Produce::inv_primitive(Emit::tree(), IF_BIP);
        Produce::down(Emit::tree());
            Produce::inv_primitive(Emit::tree(), EQ_BIP);
            Produce::down(Emit::tree());
                Produce::val_symbol(Emit::tree(), K_value, gprk->mid_word_s);
                Produce::val(Emit::tree(), K_truth_state, LITERAL_IVAL, 0);
            Produce::up(Emit::tree());
            Produce::code(Emit::tree());
            Produce::down(Emit::tree());
                Produce::inv_primitive(Emit::tree(), STORE_BIP);
                Produce::down(Emit::tree());
                    Produce::ref_symbol(Emit::tree(), K_value, gprk->cur_word_s);
                    Produce::inv_call_iname(Emit::tree(), Hierarchy::find(NEXTWORDSTOPPED_HL));
                Produce::up(Emit::tree());
                Produce::inv_primitive(Emit::tree(), POSTDECREMENT_BIP);
                Produce::down(Emit::tree());
                    Produce::ref_iname(Emit::tree(), K_value, Hierarchy::find(WN_HL));
                Produce::up(Emit::tree());
                inter_symbol *to_label = NULL;
                if ((lp->lp_elements[ec].preamble_optional) && (lp->lp_tokens[tc].lpt_type == ELEMENT_LPT))
                    to_label = failed_label;
                else if (LiteralPatterns::at_optional_break_point(lp, ec, tc))
                    to_label = succeeded_label;
                else
                    to_label = failed_label;
                Produce::inv_primitive(Emit::tree(), IF_BIP);
                Produce::down(Emit::tree());
                    Produce::inv_primitive(Emit::tree(), EQ_BIP);
                    Produce::down(Emit::tree());
                        Produce::val_symbol(Emit::tree(), K_value, gprk->cur_word_s);
                        Produce::val(Emit::tree(), K_number, LITERAL_IVAL, (inter_ti) -1);
                    Produce::up(Emit::tree());
                    Produce::code(Emit::tree());
                    Produce::down(Emit::tree());
                        Produce::inv_primitive(Emit::tree(), JUMP_BIP);
                        Produce::down(Emit::tree());
                            Produce::lab(Emit::tree(), to_label);
                        Produce::up(Emit::tree());
                    Produce::up(Emit::tree());
                Produce::up(Emit::tree());
            Produce::up(Emit::tree());
        Produce::up(Emit::tree());

        switch (lp->lp_tokens[tc].lpt_type) {
            case WORD_LPT: Compile I6 code to match a fixed word token within a literal pattern1.1; break;
            case CHARACTER_LPT: Compile I6 code to match a character token within a literal pattern1.2; break;
            case ELEMENT_LPT: Compile I6 code to match an element token within a literal pattern1.3; break;
            default: internal_error("unknown literal pattern token type");
        }
    }

    Produce::place_label(Emit::tree(), succeeded_label);

    Produce::inv_primitive(Emit::tree(), IF_BIP);
    Produce::down(Emit::tree());
        Produce::val_symbol(Emit::tree(), K_value, gprk->mid_word_s);
        Produce::code(Emit::tree());
        Produce::down(Emit::tree());
            Produce::inv_primitive(Emit::tree(), JUMP_BIP);
            Produce::down(Emit::tree());
                Produce::lab(Emit::tree(), failed_label);
            Produce::up(Emit::tree());
        Produce::up(Emit::tree());
    Produce::up(Emit::tree());

    Produce::inv_primitive(Emit::tree(), IF_BIP);
    Produce::down(Emit::tree());
        Produce::inv_primitive(Emit::tree(), LT_BIP);
        Produce::down(Emit::tree());
            Produce::val_symbol(Emit::tree(), K_value, gprk->sgn_s);
            Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 0);
        Produce::up(Emit::tree());
        Produce::code(Emit::tree());
        Produce::down(Emit::tree());
            Produce::inv_primitive(Emit::tree(), STORE_BIP);
            Produce::down(Emit::tree());
                Produce::ref_symbol(Emit::tree(), K_value, gprk->matched_number_s);
                if (Kinds::FloatingPoint::uses_floating_point(lp->kind_specified)) {
                    Produce::inv_primitive(Emit::tree(), BITWISEOR_BIP);
                    Produce::down(Emit::tree());
                        Produce::val_symbol(Emit::tree(), K_value, gprk->matched_number_s);
                        Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 0x80000000);
                    Produce::up(Emit::tree());
                } else {
                    Produce::inv_primitive(Emit::tree(), TIMES_BIP);
                    Produce::down(Emit::tree());
                        Produce::val(Emit::tree(), K_number, LITERAL_IVAL, (inter_ti) -1);
                        Produce::val_symbol(Emit::tree(), K_value, gprk->matched_number_s);
                    Produce::up(Emit::tree());
                }
            Produce::up(Emit::tree());
        Produce::up(Emit::tree());
    Produce::up(Emit::tree());

    Produce::inv_primitive(Emit::tree(), STORE_BIP);
    Produce::down(Emit::tree());
        Produce::ref_iname(Emit::tree(), K_object, Hierarchy::find(PARSED_NUMBER_HL));
        Produce::val_symbol(Emit::tree(), K_value, gprk->matched_number_s);
    Produce::up(Emit::tree());

    Kinds::Scalings::compile_quanta_to_value(lp->scaling,
        Hierarchy::find(PARSED_NUMBER_HL), gprk->sgn_s, gprk->x_s, failed_label);

    Produce::inv_primitive(Emit::tree(), IFDEBUG_BIP);
    Produce::down(Emit::tree());
        Produce::code(Emit::tree());
        Produce::down(Emit::tree());
            Produce::inv_primitive(Emit::tree(), IF_BIP);
            Produce::down(Emit::tree());
                Produce::inv_primitive(Emit::tree(), GE_BIP);
                Produce::down(Emit::tree());
                    Produce::val_iname(Emit::tree(), K_value, Hierarchy::find(PARSER_TRACE_HL));
                    Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 3);
                Produce::up(Emit::tree());
                Produce::code(Emit::tree());
                Produce::down(Emit::tree());
                    Produce::inv_primitive(Emit::tree(), PRINT_BIP);
                    Produce::down(Emit::tree());
                        Produce::val_text(Emit::tree(), I"  [parsed value ");
                    Produce::up(Emit::tree());
                    Produce::inv_primitive(Emit::tree(), PRINTNUMBER_BIP);
                    Produce::down(Emit::tree());
                        Produce::val_iname(Emit::tree(), K_object, Hierarchy::find(PARSED_NUMBER_HL));
                    Produce::up(Emit::tree());
                    Produce::inv_primitive(Emit::tree(), PRINT_BIP);
                    Produce::down(Emit::tree());
                        TEMPORARY_TEXT(EXP)
                        WRITE_TO(EXP, " by: %W]\n", lp->prototype_text);
                        Produce::val_text(Emit::tree(), EXP);
                        DISCARD_TEXT(EXP)
                    Produce::up(Emit::tree());
                Produce::up(Emit::tree());
            Produce::up(Emit::tree());
        Produce::up(Emit::tree());
    Produce::up(Emit::tree());

    Produce::inv_primitive(Emit::tree(), RETURN_BIP);
    Produce::down(Emit::tree());
        Produce::val_iname(Emit::tree(), K_value, Hierarchy::find(GPR_NUMBER_HL));
    Produce::up(Emit::tree());
    Produce::place_label(Emit::tree(), failed_label);
}

§1.1. Compile I6 code to match a fixed word token within a literal pattern1.1 =

    Produce::inv_primitive(Emit::tree(), IF_BIP);
    Produce::down(Emit::tree());
        Produce::val_symbol(Emit::tree(), K_value, gprk->mid_word_s);
        Produce::code(Emit::tree());
        Produce::down(Emit::tree());
            Produce::inv_primitive(Emit::tree(), JUMP_BIP);
            Produce::down(Emit::tree());
                Produce::lab(Emit::tree(), failed_label);
            Produce::up(Emit::tree());
        Produce::up(Emit::tree());
    Produce::up(Emit::tree());

    Produce::inv_primitive(Emit::tree(), IF_BIP);
    Produce::down(Emit::tree());
        Produce::inv_primitive(Emit::tree(), NE_BIP);
        Produce::down(Emit::tree());
            Produce::val_symbol(Emit::tree(), K_value, gprk->cur_word_s);
            TEMPORARY_TEXT(N)
            WRITE_TO(N, "%N", lp->lp_tokens[tc].token_wn);
            Produce::val_dword(Emit::tree(), N);
            DISCARD_TEXT(N)
        Produce::up(Emit::tree());
        Produce::code(Emit::tree());
        Produce::down(Emit::tree());
            Produce::inv_primitive(Emit::tree(), JUMP_BIP);
            Produce::down(Emit::tree());
                Produce::lab(Emit::tree(), failed_label);
            Produce::up(Emit::tree());
        Produce::up(Emit::tree());
    Produce::up(Emit::tree());

    Produce::inv_primitive(Emit::tree(), POSTINCREMENT_BIP);
    Produce::down(Emit::tree());
        Produce::ref_iname(Emit::tree(), K_value, Hierarchy::find(WN_HL));
    Produce::up(Emit::tree());

§1.2. Compile I6 code to match a character token within a literal pattern1.2 =

    Compile I6 code to enter mid-word parsing if not already in it1.2.1;
    wchar_t lower_form = Characters::tolower(lp->lp_tokens[tc].token_char);
    wchar_t upper_form = Characters::toupper(lp->lp_tokens[tc].token_char);

    Produce::inv_primitive(Emit::tree(), IF_BIP);
    Produce::down(Emit::tree());
        if (upper_form != lower_form) { Produce::inv_primitive(Emit::tree(), AND_BIP); Produce::down(Emit::tree()); }
        Produce::inv_primitive(Emit::tree(), NE_BIP);
        Produce::down(Emit::tree());
            Produce::inv_primitive(Emit::tree(), LOOKUPBYTE_BIP);
            Produce::down(Emit::tree());
                Produce::val_symbol(Emit::tree(), K_value, gprk->cur_addr_s);
                Produce::inv_primitive(Emit::tree(), POSTINCREMENT_BIP);
                Produce::down(Emit::tree());
                    Produce::ref_symbol(Emit::tree(), K_value, gprk->wpos_s);
                Produce::up(Emit::tree());
            Produce::up(Emit::tree());
            Produce::val(Emit::tree(), K_number, LITERAL_IVAL, (inter_ti) lower_form);
        Produce::up(Emit::tree());
        if (upper_form != lower_form) {
            Produce::inv_primitive(Emit::tree(), NE_BIP);
            Produce::down(Emit::tree());
                Produce::inv_primitive(Emit::tree(), LOOKUPBYTE_BIP);
                Produce::down(Emit::tree());
                    Produce::val_symbol(Emit::tree(), K_value, gprk->cur_addr_s);
                    Produce::inv_primitive(Emit::tree(), MINUS_BIP);
                    Produce::down(Emit::tree());
                        Produce::val_symbol(Emit::tree(), K_value, gprk->wpos_s);
                        Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 1);
                    Produce::up(Emit::tree());
                Produce::up(Emit::tree());
                Produce::val(Emit::tree(), K_number, LITERAL_IVAL, (inter_ti) upper_form);
            Produce::up(Emit::tree());
        }
        if (upper_form != lower_form) { Produce::up(Emit::tree()); }
        Produce::code(Emit::tree());
        Produce::down(Emit::tree());
            Produce::inv_primitive(Emit::tree(), JUMP_BIP);
            Produce::down(Emit::tree());
                Produce::lab(Emit::tree(), failed_label);
            Produce::up(Emit::tree());
        Produce::up(Emit::tree());
    Produce::up(Emit::tree());

    Compile I6 code to exit mid-word parsing if at end of a word1.2.2;

§1.3. Compile I6 code to match an element token within a literal pattern1.3 =

    Compile I6 code to enter mid-word parsing if not already in it1.2.1;
    literal_pattern_element *lpe = &(lp->lp_elements[ec++]);
    if (ec == 1) {
        Produce::inv_primitive(Emit::tree(), STORE_BIP);
        Produce::down(Emit::tree());
            Produce::ref_symbol(Emit::tree(), K_value, gprk->sgn_s);
            Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 1);
        Produce::up(Emit::tree());
    }
    Produce::inv_primitive(Emit::tree(), IF_BIP);
    Produce::down(Emit::tree());
        Produce::inv_primitive(Emit::tree(), EQ_BIP);
        Produce::down(Emit::tree());
            Produce::inv_primitive(Emit::tree(), LOOKUPBYTE_BIP);
            Produce::down(Emit::tree());
                Produce::val_symbol(Emit::tree(), K_value, gprk->cur_addr_s);
                Produce::val_symbol(Emit::tree(), K_value, gprk->wpos_s);
            Produce::up(Emit::tree());
            Produce::val(Emit::tree(), K_number, LITERAL_IVAL, (inter_ti) '-');
        Produce::up(Emit::tree());
        Produce::code(Emit::tree());
        Produce::down(Emit::tree());
        if ((lp->number_signed) && (ec == 1)) {
            Produce::inv_primitive(Emit::tree(), STORE_BIP);
            Produce::down(Emit::tree());
                Produce::ref_symbol(Emit::tree(), K_value, gprk->sgn_s);
                Produce::val(Emit::tree(), K_number, LITERAL_IVAL, (inter_ti) -1);
            Produce::up(Emit::tree());
            Produce::inv_primitive(Emit::tree(), POSTINCREMENT_BIP);
            Produce::down(Emit::tree());
                Produce::ref_symbol(Emit::tree(), K_value, gprk->wpos_s);
            Produce::up(Emit::tree());
        } else {
            Produce::inv_primitive(Emit::tree(), JUMP_BIP);
            Produce::down(Emit::tree());
                Produce::lab(Emit::tree(), failed_label);
            Produce::up(Emit::tree());
        }
        Produce::up(Emit::tree());
    Produce::up(Emit::tree());

    if (Kinds::FloatingPoint::uses_floating_point(lp->kind_specified))
        Compile I6 code to match a real number here1.3.1
    else
        Compile I6 code to match an integer here1.3.2;
    Compile I6 code to exit mid-word parsing if at end of a word1.2.2;

§1.3.1. Compile I6 code to match a real number here1.3.1 =

    Produce::inv_primitive(Emit::tree(), STORE_BIP);
    Produce::down(Emit::tree());
        Produce::ref_symbol(Emit::tree(), K_value, gprk->f_s);
        Produce::val(Emit::tree(), K_truth_state, LITERAL_IVAL, 0);
    Produce::up(Emit::tree());
    Produce::inv_primitive(Emit::tree(), STORE_BIP);
    Produce::down(Emit::tree());
        Produce::ref_symbol(Emit::tree(), K_value, gprk->x_s);
        Produce::inv_primitive(Emit::tree(), PLUS_BIP);
        Produce::down(Emit::tree());
            Produce::val_symbol(Emit::tree(), K_value, gprk->cur_addr_s);
            Produce::val_symbol(Emit::tree(), K_value, gprk->wpos_s);
        Produce::up(Emit::tree());
    Produce::up(Emit::tree());
    March forwards through decimal digits1.3.1.1;
    Produce::inv_primitive(Emit::tree(), IF_BIP);
    Produce::down(Emit::tree());
        Produce::inv_primitive(Emit::tree(), EQ_BIP);
        Produce::down(Emit::tree());
            Produce::val_symbol(Emit::tree(), K_value, gprk->f_s);
            Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 0);
        Produce::up(Emit::tree());
        Produce::code(Emit::tree());
        Produce::down(Emit::tree());
            Produce::inv_primitive(Emit::tree(), JUMP_BIP);
            Produce::down(Emit::tree());
                Produce::lab(Emit::tree(), failed_label);
            Produce::up(Emit::tree());
        Produce::up(Emit::tree());
    Produce::up(Emit::tree());

    Produce::inv_primitive(Emit::tree(), IF_BIP);
    Produce::down(Emit::tree());
        Produce::inv_primitive(Emit::tree(), EQ_BIP);
        Produce::down(Emit::tree());
            Produce::val_symbol(Emit::tree(), K_value, gprk->wpos_s);
            Produce::val_symbol(Emit::tree(), K_value, gprk->cur_len_s);
        Produce::up(Emit::tree());
        Produce::code(Emit::tree());
        Produce::down(Emit::tree());
            Produce::inv_primitive(Emit::tree(), POSTINCREMENT_BIP);
            Produce::down(Emit::tree());
                Produce::ref_iname(Emit::tree(), K_value, Hierarchy::find(WN_HL));
            Produce::up(Emit::tree());
            Produce::inv_primitive(Emit::tree(), STORE_BIP);
            Produce::down(Emit::tree());
                Produce::ref_symbol(Emit::tree(), K_value, gprk->cur_word_s);
                Produce::inv_call_iname(Emit::tree(), Hierarchy::find(NEXTWORDSTOPPED_HL));
            Produce::up(Emit::tree());
            Produce::inv_primitive(Emit::tree(), STORE_BIP);
            Produce::down(Emit::tree());
                Produce::ref_iname(Emit::tree(), K_value, Hierarchy::find(WN_HL));
                Produce::inv_primitive(Emit::tree(), MINUS_BIP);
                Produce::down(Emit::tree());
                    Produce::val_iname(Emit::tree(), K_value, Hierarchy::find(WN_HL));
                    Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 2);
                Produce::up(Emit::tree());
            Produce::up(Emit::tree());
            Produce::inv_primitive(Emit::tree(), IF_BIP);
            Produce::down(Emit::tree());
                Produce::inv_primitive(Emit::tree(), EQ_BIP);
                Produce::down(Emit::tree());
                    Produce::val_symbol(Emit::tree(), K_value, gprk->cur_word_s);
                    Produce::val_iname(Emit::tree(), K_value, Hierarchy::find(THEN1__WD_HL));
                Produce::up(Emit::tree());
                Produce::code(Emit::tree());
                Produce::down(Emit::tree());
                    Produce::inv_primitive(Emit::tree(), STORE_BIP);
                    Produce::down(Emit::tree());
                        Produce::ref_iname(Emit::tree(), K_value, Hierarchy::find(WN_HL));
                        Produce::inv_primitive(Emit::tree(), PLUS_BIP);
                        Produce::down(Emit::tree());
                            Produce::val_iname(Emit::tree(), K_value, Hierarchy::find(WN_HL));
                            Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 2);
                        Produce::up(Emit::tree());
                    Produce::up(Emit::tree());
                    Produce::inv_primitive(Emit::tree(), POSTINCREMENT_BIP);
                    Produce::down(Emit::tree());
                        Produce::ref_symbol(Emit::tree(), K_value, gprk->f_s);
                    Produce::up(Emit::tree());
                    Produce::inv_primitive(Emit::tree(), STORE_BIP);
                    Produce::down(Emit::tree());
                        Produce::ref_symbol(Emit::tree(), K_value, gprk->mid_word_s);
                        Produce::val(Emit::tree(), K_truth_state, LITERAL_IVAL, 0);
                    Produce::up(Emit::tree());
                    Produce::inv_primitive(Emit::tree(), POSTINCREMENT_BIP);
                    Produce::down(Emit::tree());
                        Produce::ref_symbol(Emit::tree(), K_value, gprk->wpos_s);
                    Produce::up(Emit::tree());
                    Compile I6 code to enter mid-word parsing if not already in it1.2.1;
                    March forwards through decimal digits1.3.1.1;
                Produce::up(Emit::tree());
            Produce::up(Emit::tree());
        Produce::up(Emit::tree());
    Produce::up(Emit::tree());

    Produce::inv_primitive(Emit::tree(), STORE_BIP);
    Produce::down(Emit::tree());
        Produce::ref_symbol(Emit::tree(), K_value, gprk->tot_s);
        Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 0);
    Produce::up(Emit::tree());

    Produce::inv_primitive(Emit::tree(), IF_BIP);
    Produce::down(Emit::tree());
        Produce::inv_primitive(Emit::tree(), EQ_BIP);
        Produce::down(Emit::tree());
            Produce::val_symbol(Emit::tree(), K_value, gprk->wpos_s);
            Produce::val_symbol(Emit::tree(), K_value, gprk->cur_len_s);
        Produce::up(Emit::tree());
        Produce::code(Emit::tree());
        Produce::down(Emit::tree());
            Produce::inv_primitive(Emit::tree(), POSTINCREMENT_BIP);
            Produce::down(Emit::tree());
                Produce::ref_symbol(Emit::tree(), K_value, gprk->tot_s);
            Produce::up(Emit::tree());
            Produce::inv_primitive(Emit::tree(), STORE_BIP);
            Produce::down(Emit::tree());
                Produce::ref_symbol(Emit::tree(), K_value, gprk->cur_word_s);
                Produce::inv_call_iname(Emit::tree(), Hierarchy::find(NEXTWORDSTOPPED_HL));
            Produce::up(Emit::tree());
            Produce::inv_primitive(Emit::tree(), STORE_BIP);
            Produce::down(Emit::tree());
                Produce::ref_symbol(Emit::tree(), K_value, gprk->mid_word_s);
                Produce::val(Emit::tree(), K_truth_state, LITERAL_IVAL, 0);
            Produce::up(Emit::tree());
            Compile I6 code to enter mid-word parsing if not already in it1.2.1;
        Produce::up(Emit::tree());
    Produce::up(Emit::tree());

    Produce::inv_primitive(Emit::tree(), IF_BIP);
    Produce::down(Emit::tree());
        Produce::inv_primitive(Emit::tree(), AND_BIP);
        Produce::down(Emit::tree());
            Produce::inv_primitive(Emit::tree(), LT_BIP);
            Produce::down(Emit::tree());
                Produce::val_symbol(Emit::tree(), K_value, gprk->wpos_s);
                Produce::val_symbol(Emit::tree(), K_value, gprk->cur_len_s);
            Produce::up(Emit::tree());
            Produce::inv_primitive(Emit::tree(), EQ_BIP);
            Produce::down(Emit::tree());
                Produce::inv_primitive(Emit::tree(), LOOKUPBYTE_BIP);
                Produce::down(Emit::tree());
                    Produce::val_symbol(Emit::tree(), K_value, gprk->cur_addr_s);
                    Produce::val_symbol(Emit::tree(), K_value, gprk->wpos_s);
                Produce::up(Emit::tree());
                Produce::val(Emit::tree(), K_number, LITERAL_IVAL, (inter_ti) 'x');
            Produce::up(Emit::tree());
        Produce::up(Emit::tree());
        Produce::code(Emit::tree());
        Produce::down(Emit::tree());
            Produce::inv_primitive(Emit::tree(), STORE_BIP);
            Produce::down(Emit::tree());
                Produce::ref_symbol(Emit::tree(), K_value, gprk->f_s);
                Produce::inv_primitive(Emit::tree(), PLUS_BIP);
                Produce::down(Emit::tree());
                    Produce::inv_primitive(Emit::tree(), PLUS_BIP);
                    Produce::down(Emit::tree());
                        Produce::val_symbol(Emit::tree(), K_value, gprk->f_s);
                        Produce::val_symbol(Emit::tree(), K_value, gprk->tot_s);
                    Produce::up(Emit::tree());
                    Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 1);
                Produce::up(Emit::tree());
            Produce::up(Emit::tree());
            Produce::inv_primitive(Emit::tree(), POSTINCREMENT_BIP);
            Produce::down(Emit::tree());
                Produce::ref_symbol(Emit::tree(), K_value, gprk->wpos_s);
            Produce::up(Emit::tree());

            Produce::inv_primitive(Emit::tree(), IF_BIP);
            Produce::down(Emit::tree());
                Produce::inv_primitive(Emit::tree(), EQ_BIP);
                Produce::down(Emit::tree());
                    Produce::val_symbol(Emit::tree(), K_value, gprk->wpos_s);
                    Produce::val_symbol(Emit::tree(), K_value, gprk->cur_len_s);
                Produce::up(Emit::tree());
                Produce::code(Emit::tree());
                Produce::down(Emit::tree());
                    Produce::inv_primitive(Emit::tree(), POSTINCREMENT_BIP);
                    Produce::down(Emit::tree());
                        Produce::ref_symbol(Emit::tree(), K_value, gprk->f_s);
                    Produce::up(Emit::tree());
                    Produce::inv_primitive(Emit::tree(), STORE_BIP);
                    Produce::down(Emit::tree());
                        Produce::ref_symbol(Emit::tree(), K_value, gprk->cur_word_s);
                        Produce::inv_call_iname(Emit::tree(), Hierarchy::find(NEXTWORDSTOPPED_HL));
                    Produce::up(Emit::tree());
                    Produce::inv_primitive(Emit::tree(), STORE_BIP);
                    Produce::down(Emit::tree());
                        Produce::ref_symbol(Emit::tree(), K_value, gprk->mid_word_s);
                        Produce::val(Emit::tree(), K_truth_state, LITERAL_IVAL, 0);
                    Produce::up(Emit::tree());
                    Compile I6 code to enter mid-word parsing if not already in it1.2.1;
                Produce::up(Emit::tree());
            Produce::up(Emit::tree());

            Produce::inv_primitive(Emit::tree(), IFELSE_BIP);
            Produce::down(Emit::tree());
                Produce::inv_primitive(Emit::tree(), AND_BIP);
                Produce::down(Emit::tree());
                    Produce::inv_primitive(Emit::tree(), LT_BIP);
                    Produce::down(Emit::tree());
                        Produce::inv_primitive(Emit::tree(), PLUS_BIP);
                        Produce::down(Emit::tree());
                            Produce::val_symbol(Emit::tree(), K_value, gprk->wpos_s);
                            Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 3);
                        Produce::up(Emit::tree());
                        Produce::val_symbol(Emit::tree(), K_value, gprk->cur_len_s);
                    Produce::up(Emit::tree());
                    Produce::inv_primitive(Emit::tree(), AND_BIP);
                    Produce::down(Emit::tree());
                        Produce::inv_primitive(Emit::tree(), EQ_BIP);
                        Produce::down(Emit::tree());
                            Produce::inv_primitive(Emit::tree(), LOOKUPBYTE_BIP);
                            Produce::down(Emit::tree());
                                Produce::val_symbol(Emit::tree(), K_value, gprk->cur_addr_s);
                                Produce::val_symbol(Emit::tree(), K_value, gprk->wpos_s);
                            Produce::up(Emit::tree());
                            Produce::val(Emit::tree(), K_number, LITERAL_IVAL, (inter_ti) '1');
                        Produce::up(Emit::tree());
                        Produce::inv_primitive(Emit::tree(), AND_BIP);
                        Produce::down(Emit::tree());
                            Produce::inv_primitive(Emit::tree(), EQ_BIP);
                            Produce::down(Emit::tree());
                                Produce::inv_primitive(Emit::tree(), LOOKUPBYTE_BIP);
                                Produce::down(Emit::tree());
                                    Produce::val_symbol(Emit::tree(), K_value, gprk->cur_addr_s);
                                    Produce::inv_primitive(Emit::tree(), PLUS_BIP);
                                    Produce::down(Emit::tree());
                                        Produce::val_symbol(Emit::tree(), K_value, gprk->wpos_s);
                                        Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 1);
                                    Produce::up(Emit::tree());
                                Produce::up(Emit::tree());
                                Produce::val(Emit::tree(), K_number, LITERAL_IVAL, (inter_ti) '0');
                            Produce::up(Emit::tree());
                            Produce::inv_primitive(Emit::tree(), EQ_BIP);
                            Produce::down(Emit::tree());
                                Produce::inv_primitive(Emit::tree(), LOOKUPBYTE_BIP);
                                Produce::down(Emit::tree());
                                    Produce::val_symbol(Emit::tree(), K_value, gprk->cur_addr_s);
                                    Produce::inv_primitive(Emit::tree(), PLUS_BIP);
                                    Produce::down(Emit::tree());
                                        Produce::val_symbol(Emit::tree(), K_value, gprk->wpos_s);
                                        Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 2);
                                    Produce::up(Emit::tree());
                                Produce::up(Emit::tree());
                                Produce::val(Emit::tree(), K_number, LITERAL_IVAL, (inter_ti) '^');
                            Produce::up(Emit::tree());
                        Produce::up(Emit::tree());
                    Produce::up(Emit::tree());
                Produce::up(Emit::tree());
                Produce::code(Emit::tree());
                Produce::down(Emit::tree());
                    Produce::inv_primitive(Emit::tree(), STORE_BIP);
                    Produce::down(Emit::tree());
                        Produce::ref_symbol(Emit::tree(), K_value, gprk->f_s);
                        Produce::inv_primitive(Emit::tree(), PLUS_BIP);
                        Produce::down(Emit::tree());
                            Produce::val_symbol(Emit::tree(), K_value, gprk->f_s);
                            Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 3);
                        Produce::up(Emit::tree());
                    Produce::up(Emit::tree());
                    Produce::inv_primitive(Emit::tree(), STORE_BIP);
                    Produce::down(Emit::tree());
                        Produce::ref_symbol(Emit::tree(), K_value, gprk->wpos_s);
                        Produce::inv_primitive(Emit::tree(), PLUS_BIP);
                        Produce::down(Emit::tree());
                            Produce::val_symbol(Emit::tree(), K_value, gprk->wpos_s);
                            Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 3);
                        Produce::up(Emit::tree());
                    Produce::up(Emit::tree());
                    Produce::inv_primitive(Emit::tree(), IF_BIP);
                    Produce::down(Emit::tree());
                        Produce::inv_primitive(Emit::tree(), AND_BIP);
                        Produce::down(Emit::tree());
                            Produce::inv_primitive(Emit::tree(), LT_BIP);
                            Produce::down(Emit::tree());
                                Produce::val_symbol(Emit::tree(), K_value, gprk->wpos_s);
                                Produce::val_symbol(Emit::tree(), K_value, gprk->cur_len_s);
                            Produce::up(Emit::tree());
                            Produce::inv_primitive(Emit::tree(), OR_BIP);
                            Produce::down(Emit::tree());
                                Produce::inv_primitive(Emit::tree(), EQ_BIP);
                                Produce::down(Emit::tree());
                                    Produce::inv_primitive(Emit::tree(), LOOKUPBYTE_BIP);
                                    Produce::down(Emit::tree());
                                        Produce::val_symbol(Emit::tree(), K_value, gprk->cur_addr_s);
                                        Produce::val_symbol(Emit::tree(), K_value, gprk->wpos_s);
                                    Produce::up(Emit::tree());
                                    Produce::val(Emit::tree(), K_number, LITERAL_IVAL, (inter_ti) '+');
                                Produce::up(Emit::tree());
                                Produce::inv_primitive(Emit::tree(), EQ_BIP);
                                Produce::down(Emit::tree());
                                    Produce::inv_primitive(Emit::tree(), LOOKUPBYTE_BIP);
                                    Produce::down(Emit::tree());
                                        Produce::val_symbol(Emit::tree(), K_value, gprk->cur_addr_s);
                                        Produce::val_symbol(Emit::tree(), K_value, gprk->wpos_s);
                                    Produce::up(Emit::tree());
                                    Produce::val(Emit::tree(), K_number, LITERAL_IVAL, (inter_ti) '-');
                                Produce::up(Emit::tree());
                            Produce::up(Emit::tree());
                        Produce::up(Emit::tree());
                        Produce::code(Emit::tree());
                        Produce::down(Emit::tree());
                            Produce::inv_primitive(Emit::tree(), POSTINCREMENT_BIP);
                            Produce::down(Emit::tree());
                                Produce::ref_symbol(Emit::tree(), K_value, gprk->f_s);
                            Produce::up(Emit::tree());
                            Produce::inv_primitive(Emit::tree(), POSTINCREMENT_BIP);
                            Produce::down(Emit::tree());
                                Produce::ref_symbol(Emit::tree(), K_value, gprk->wpos_s);
                            Produce::up(Emit::tree());
                        Produce::up(Emit::tree());
                    Produce::up(Emit::tree());
                    March forwards through decimal digits1.3.1.1;
                Produce::up(Emit::tree());
                Produce::code(Emit::tree());
                Produce::down(Emit::tree());
                    Produce::inv_primitive(Emit::tree(), POSTDECREMENT_BIP);
                    Produce::down(Emit::tree());
                        Produce::ref_symbol(Emit::tree(), K_value, gprk->f_s);
                    Produce::up(Emit::tree());
                Produce::up(Emit::tree());
            Produce::up(Emit::tree());
        Produce::up(Emit::tree());
    Produce::up(Emit::tree());

    Produce::inv_primitive(Emit::tree(), STORE_BIP);
    Produce::down(Emit::tree());
        Produce::ref_symbol(Emit::tree(), K_value, gprk->x_s);
        Produce::inv_call_iname(Emit::tree(), Hierarchy::find(FLOATPARSE_HL));
        Produce::down(Emit::tree());
            Produce::val_symbol(Emit::tree(), K_value, gprk->x_s);
            Produce::val_symbol(Emit::tree(), K_value, gprk->f_s);
            Produce::val(Emit::tree(), K_truth_state, LITERAL_IVAL, 1);
        Produce::up(Emit::tree());
    Produce::up(Emit::tree());

    Produce::inv_primitive(Emit::tree(), IF_BIP);
    Produce::down(Emit::tree());
        Produce::inv_primitive(Emit::tree(), EQ_BIP);
        Produce::down(Emit::tree());
            Produce::val_symbol(Emit::tree(), K_value, gprk->x_s);
            Produce::val_symbol(Emit::tree(), K_value, Site::veneer_symbol(Emit::tree(), FLOAT_NAN_VSYMB));
        Produce::up(Emit::tree());
        Produce::code(Emit::tree());
        Produce::down(Emit::tree());
            Produce::inv_primitive(Emit::tree(), JUMP_BIP);
            Produce::down(Emit::tree());
                Produce::lab(Emit::tree(), failed_label);
            Produce::up(Emit::tree());
        Produce::up(Emit::tree());
    Produce::up(Emit::tree());

    Produce::inv_primitive(Emit::tree(), IF_BIP);
    Produce::down(Emit::tree());
        Produce::inv_primitive(Emit::tree(), EQ_BIP);
        Produce::down(Emit::tree());
            Produce::val_symbol(Emit::tree(), K_value, gprk->wpos_s);
            Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 0);
        Produce::up(Emit::tree());
        Produce::code(Emit::tree());
        Produce::down(Emit::tree());
            Produce::inv_primitive(Emit::tree(), STORE_BIP);
            Produce::down(Emit::tree());
                Produce::ref_symbol(Emit::tree(), K_value, gprk->mid_word_s);
                Produce::val(Emit::tree(), K_truth_state, LITERAL_IVAL, 0);
            Produce::up(Emit::tree());
        Produce::up(Emit::tree());
    Produce::up(Emit::tree());

    Produce::inv_primitive(Emit::tree(), STORE_BIP);
    Produce::down(Emit::tree());
        Produce::ref_symbol(Emit::tree(), K_value, gprk->matched_number_s);
        Produce::val_symbol(Emit::tree(), K_value, gprk->x_s);
    Produce::up(Emit::tree());

§1.3.1.1. March forwards through decimal digits1.3.1.1 =

    Produce::inv_primitive(Emit::tree(), WHILE_BIP);
    Produce::down(Emit::tree());
        Produce::inv_primitive(Emit::tree(), AND_BIP);
        Produce::down(Emit::tree());
            Produce::inv_primitive(Emit::tree(), LT_BIP);
            Produce::down(Emit::tree());
                Produce::val_symbol(Emit::tree(), K_value, gprk->wpos_s);
                Produce::val_symbol(Emit::tree(), K_value, gprk->cur_len_s);
            Produce::up(Emit::tree());
            Produce::inv_primitive(Emit::tree(), GE_BIP);
            Produce::down(Emit::tree());
                Produce::inv_call_iname(Emit::tree(), Hierarchy::find(DIGITTOVALUE_HL));
                Produce::down(Emit::tree());
                    Produce::inv_primitive(Emit::tree(), LOOKUPBYTE_BIP);
                    Produce::down(Emit::tree());
                        Produce::val_symbol(Emit::tree(), K_value, gprk->cur_addr_s);
                        Produce::val_symbol(Emit::tree(), K_value, gprk->wpos_s);
                    Produce::up(Emit::tree());
                Produce::up(Emit::tree());
                Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 0);
            Produce::up(Emit::tree());
        Produce::up(Emit::tree());
        Produce::code(Emit::tree());
        Produce::down(Emit::tree());
            Produce::inv_primitive(Emit::tree(), POSTINCREMENT_BIP);
            Produce::down(Emit::tree());
                Produce::ref_symbol(Emit::tree(), K_value, gprk->f_s);
            Produce::up(Emit::tree());
            Produce::inv_primitive(Emit::tree(), POSTINCREMENT_BIP);
            Produce::down(Emit::tree());
                Produce::ref_symbol(Emit::tree(), K_value, gprk->wpos_s);
            Produce::up(Emit::tree());
        Produce::up(Emit::tree());
    Produce::up(Emit::tree());

§1.3.2. Compile I6 code to match an integer here1.3.2 =

    Produce::inv_primitive(Emit::tree(), STORE_BIP);
    Produce::down(Emit::tree());
        Produce::ref_symbol(Emit::tree(), K_value, gprk->tot_s);
        Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 0);
    Produce::up(Emit::tree());
    Produce::inv_primitive(Emit::tree(), STORE_BIP);
    Produce::down(Emit::tree());
        Produce::ref_symbol(Emit::tree(), K_value, gprk->f_s);
        Produce::val(Emit::tree(), K_truth_state, LITERAL_IVAL, 0);
    Produce::up(Emit::tree());

    Produce::inv_primitive(Emit::tree(), WHILE_BIP);
    Produce::down(Emit::tree());
        Produce::inv_primitive(Emit::tree(), AND_BIP);
        Produce::down(Emit::tree());
            Produce::inv_primitive(Emit::tree(), LT_BIP);
            Produce::down(Emit::tree());
                Produce::val_symbol(Emit::tree(), K_value, gprk->wpos_s);
                Produce::val_symbol(Emit::tree(), K_value, gprk->cur_len_s);
            Produce::up(Emit::tree());
            Produce::inv_primitive(Emit::tree(), GE_BIP);
            Produce::down(Emit::tree());
                Produce::inv_call_iname(Emit::tree(), Hierarchy::find(DIGITTOVALUE_HL));
                Produce::down(Emit::tree());
                    Produce::inv_primitive(Emit::tree(), LOOKUPBYTE_BIP);
                    Produce::down(Emit::tree());
                        Produce::val_symbol(Emit::tree(), K_value, gprk->cur_addr_s);
                        Produce::val_symbol(Emit::tree(), K_value, gprk->wpos_s);
                    Produce::up(Emit::tree());
                Produce::up(Emit::tree());
                Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 0);
            Produce::up(Emit::tree());
        Produce::up(Emit::tree());
        Produce::code(Emit::tree());
        Produce::down(Emit::tree());
            Produce::inv_primitive(Emit::tree(), STORE_BIP);
            Produce::down(Emit::tree());
                Produce::ref_symbol(Emit::tree(), K_value, gprk->f_s);
                Produce::inv_call_iname(Emit::tree(), Hierarchy::find(DIGITTOVALUE_HL));
                Produce::down(Emit::tree());
                    Produce::inv_primitive(Emit::tree(), LOOKUPBYTE_BIP);
                    Produce::down(Emit::tree());
                        Produce::val_symbol(Emit::tree(), K_value, gprk->cur_addr_s);
                        Produce::val_symbol(Emit::tree(), K_value, gprk->wpos_s);
                    Produce::up(Emit::tree());
                Produce::up(Emit::tree());
            Produce::up(Emit::tree());
            Kinds::Scalings::compile_scale_and_add(gprk->tot_s, gprk->sgn_s, 10, 0, gprk->f_s, failed_label);
            Produce::inv_primitive(Emit::tree(), STORE_BIP);
            Produce::down(Emit::tree());
                Produce::ref_symbol(Emit::tree(), K_value, gprk->f_s);
                Produce::val(Emit::tree(), K_truth_state, LITERAL_IVAL, 1);
            Produce::up(Emit::tree());
            Produce::inv_primitive(Emit::tree(), POSTINCREMENT_BIP);
            Produce::down(Emit::tree());
                Produce::ref_symbol(Emit::tree(), K_value, gprk->wpos_s);
            Produce::up(Emit::tree());
        Produce::up(Emit::tree());
    Produce::up(Emit::tree());

    Produce::inv_primitive(Emit::tree(), IF_BIP);
    Produce::down(Emit::tree());
        Produce::inv_primitive(Emit::tree(), EQ_BIP);
        Produce::down(Emit::tree());
            Produce::val_symbol(Emit::tree(), K_value, gprk->f_s);
            Produce::val(Emit::tree(), K_truth_state, LITERAL_IVAL, 0);
        Produce::up(Emit::tree());
        Produce::code(Emit::tree());
        Produce::down(Emit::tree());
            Produce::inv_primitive(Emit::tree(), JUMP_BIP);
            Produce::down(Emit::tree());
                Produce::lab(Emit::tree(), failed_label);
            Produce::up(Emit::tree());
        Produce::up(Emit::tree());
    Produce::up(Emit::tree());

    if (lpe->element_index > 0) {
        Produce::inv_primitive(Emit::tree(), IF_BIP);
        Produce::down(Emit::tree());
            Produce::inv_primitive(Emit::tree(), GE_BIP);
            Produce::down(Emit::tree());
                Produce::val_symbol(Emit::tree(), K_value, gprk->tot_s);
                Produce::val(Emit::tree(), K_number, LITERAL_IVAL, (inter_ti) lpe->element_range);
            Produce::up(Emit::tree());
            Produce::code(Emit::tree());
            Produce::down(Emit::tree());
                Produce::inv_primitive(Emit::tree(), JUMP_BIP);
                Produce::down(Emit::tree());
                    Produce::lab(Emit::tree(), failed_label);
                Produce::up(Emit::tree());
            Produce::up(Emit::tree());
        Produce::up(Emit::tree());
    }

    Kinds::Scalings::compile_scale_and_add(gprk->tot_s, gprk->sgn_s, lpe->element_multiplier, 0, gprk->matched_number_s, failed_label);
    Produce::inv_primitive(Emit::tree(), STORE_BIP);
    Produce::down(Emit::tree());
        Produce::ref_symbol(Emit::tree(), K_value, gprk->matched_number_s);
        Produce::val_symbol(Emit::tree(), K_value, gprk->tot_s);
    Produce::up(Emit::tree());

    int M = Kinds::Scalings::get_integer_multiplier(lp->scaling);
    if (M > 1) {
        Produce::inv_primitive(Emit::tree(), IF_BIP);
        Produce::down(Emit::tree());
            Produce::inv_primitive(Emit::tree(), EQ_BIP);
            Produce::down(Emit::tree());
                Produce::val_symbol(Emit::tree(), K_value, gprk->wpos_s);
                Produce::val_symbol(Emit::tree(), K_value, gprk->cur_len_s);
            Produce::up(Emit::tree());
            Produce::code(Emit::tree());
            Produce::down(Emit::tree());
                Produce::inv_primitive(Emit::tree(), POSTINCREMENT_BIP);
                Produce::down(Emit::tree());
                    Produce::ref_iname(Emit::tree(), K_value, Hierarchy::find(WN_HL));
                Produce::up(Emit::tree());
                Produce::inv_primitive(Emit::tree(), STORE_BIP);
                Produce::down(Emit::tree());
                    Produce::ref_symbol(Emit::tree(), K_value, gprk->cur_word_s);
                    Produce::inv_call_iname(Emit::tree(), Hierarchy::find(NEXTWORDSTOPPED_HL));
                Produce::up(Emit::tree());
                Produce::inv_primitive(Emit::tree(), STORE_BIP);
                Produce::down(Emit::tree());
                    Produce::ref_iname(Emit::tree(), K_value, Hierarchy::find(WN_HL));
                    Produce::inv_primitive(Emit::tree(), MINUS_BIP);
                    Produce::down(Emit::tree());
                        Produce::val_iname(Emit::tree(), K_value, Hierarchy::find(WN_HL));
                        Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 2);
                    Produce::up(Emit::tree());
                Produce::up(Emit::tree());
                Produce::inv_primitive(Emit::tree(), IF_BIP);
                Produce::down(Emit::tree());
                    Produce::inv_primitive(Emit::tree(), EQ_BIP);
                    Produce::down(Emit::tree());
                        Produce::val_symbol(Emit::tree(), K_value, gprk->cur_word_s);
                        Produce::val_iname(Emit::tree(), K_value, Hierarchy::find(THEN1__WD_HL));
                    Produce::up(Emit::tree());
                    Produce::code(Emit::tree());
                    Produce::down(Emit::tree());
                        Produce::inv_primitive(Emit::tree(), STORE_BIP);
                        Produce::down(Emit::tree());
                            Produce::ref_iname(Emit::tree(), K_value, Hierarchy::find(WN_HL));
                            Produce::inv_primitive(Emit::tree(), PLUS_BIP);
                            Produce::down(Emit::tree());
                                Produce::val_iname(Emit::tree(), K_value, Hierarchy::find(WN_HL));
                                Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 2);
                            Produce::up(Emit::tree());
                        Produce::up(Emit::tree());
                        Produce::inv_primitive(Emit::tree(), STORE_BIP);
                        Produce::down(Emit::tree());
                            Produce::ref_symbol(Emit::tree(), K_value, gprk->mid_word_s);
                            Produce::val(Emit::tree(), K_truth_state, LITERAL_IVAL, 0);
                        Produce::up(Emit::tree());
                        Compile I6 code to enter mid-word parsing if not already in it1.2.1;
                        Produce::inv_primitive(Emit::tree(), STORE_BIP);
                        Produce::down(Emit::tree());
                            Produce::ref_symbol(Emit::tree(), K_value, gprk->x_s);
                            Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 0);
                        Produce::up(Emit::tree());
                        Produce::inv_primitive(Emit::tree(), STORE_BIP);
                        Produce::down(Emit::tree());
                            Produce::ref_symbol(Emit::tree(), K_value, gprk->f_s);
                            Produce::val(Emit::tree(), K_number, LITERAL_IVAL, (inter_ti) M);
                        Produce::up(Emit::tree());
                        Produce::inv_primitive(Emit::tree(), WHILE_BIP);
                        Produce::down(Emit::tree());
                            Produce::inv_primitive(Emit::tree(), AND_BIP);
                            Produce::down(Emit::tree());
                                Produce::inv_primitive(Emit::tree(), GT_BIP);
                                Produce::down(Emit::tree());
                                    Produce::val_symbol(Emit::tree(), K_value, gprk->f_s);
                                    Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 1);
                                Produce::up(Emit::tree());
                                Produce::inv_primitive(Emit::tree(), AND_BIP);
                                Produce::down(Emit::tree());
                                    Produce::inv_primitive(Emit::tree(), EQ_BIP);
                                    Produce::down(Emit::tree());
                                        Produce::inv_primitive(Emit::tree(), MODULO_BIP);
                                        Produce::down(Emit::tree());
                                            Produce::val_symbol(Emit::tree(), K_value, gprk->f_s);
                                            Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 10);
                                        Produce::up(Emit::tree());
                                        Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 0);
                                    Produce::up(Emit::tree());
                                    Produce::inv_primitive(Emit::tree(), GE_BIP);
                                    Produce::down(Emit::tree());
                                        Produce::inv_call_iname(Emit::tree(), Hierarchy::find(DIGITTOVALUE_HL));
                                        Produce::down(Emit::tree());
                                            Produce::inv_primitive(Emit::tree(), LOOKUPBYTE_BIP);
                                            Produce::down(Emit::tree());
                                                Produce::val_symbol(Emit::tree(), K_value, gprk->cur_addr_s);
                                                Produce::val_symbol(Emit::tree(), K_value, gprk->wpos_s);
                                            Produce::up(Emit::tree());
                                        Produce::up(Emit::tree());
                                        Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 0);
                                    Produce::up(Emit::tree());
                                Produce::up(Emit::tree());
                            Produce::up(Emit::tree());
                            Produce::code(Emit::tree());
                            Produce::down(Emit::tree());
                                Produce::inv_primitive(Emit::tree(), STORE_BIP);
                                Produce::down(Emit::tree());
                                    Produce::ref_symbol(Emit::tree(), K_value, gprk->w_s);
                                    Produce::inv_primitive(Emit::tree(), DIVIDE_BIP);
                                    Produce::down(Emit::tree());
                                        Produce::inv_primitive(Emit::tree(), TIMES_BIP);
                                        Produce::down(Emit::tree());
                                            Produce::inv_call_iname(Emit::tree(), Hierarchy::find(DIGITTOVALUE_HL));
                                            Produce::down(Emit::tree());
                                                Produce::inv_primitive(Emit::tree(), LOOKUPBYTE_BIP);
                                                Produce::down(Emit::tree());
                                                    Produce::val_symbol(Emit::tree(), K_value, gprk->cur_addr_s);
                                                    Produce::val_symbol(Emit::tree(), K_value, gprk->wpos_s);
                                                Produce::up(Emit::tree());
                                            Produce::up(Emit::tree());
                                            Produce::val_symbol(Emit::tree(), K_value, gprk->f_s);
                                        Produce::up(Emit::tree());
                                        Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 10);
                                    Produce::up(Emit::tree());
                                Produce::up(Emit::tree());
                                Kinds::Scalings::compile_scale_and_add(gprk->x_s, gprk->sgn_s,
                                    1, 0, gprk->w_s, failed_label);
                                Produce::inv_primitive(Emit::tree(), POSTINCREMENT_BIP);
                                Produce::down(Emit::tree());
                                    Produce::ref_symbol(Emit::tree(), K_value, gprk->wpos_s);
                                Produce::up(Emit::tree());
                                Produce::inv_primitive(Emit::tree(), STORE_BIP);
                                Produce::down(Emit::tree());
                                    Produce::ref_symbol(Emit::tree(), K_value, gprk->f_s);
                                    Produce::inv_primitive(Emit::tree(), DIVIDE_BIP);
                                    Produce::down(Emit::tree());
                                        Produce::val_symbol(Emit::tree(), K_value, gprk->f_s);
                                        Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 10);
                                    Produce::up(Emit::tree());
                                Produce::up(Emit::tree());
                            Produce::up(Emit::tree());
                        Produce::up(Emit::tree());
                    Produce::up(Emit::tree());
                Produce::up(Emit::tree());
            Produce::up(Emit::tree());
        Produce::up(Emit::tree());
    }

§1.2.1. Compile I6 code to enter mid-word parsing if not already in it1.2.1 =

    Produce::inv_primitive(Emit::tree(), IF_BIP);
    Produce::down(Emit::tree());
        Produce::inv_primitive(Emit::tree(), EQ_BIP);
        Produce::down(Emit::tree());
            Produce::val_symbol(Emit::tree(), K_value, gprk->mid_word_s);
            Produce::val(Emit::tree(), K_truth_state, LITERAL_IVAL, 0);
        Produce::up(Emit::tree());
        Produce::code(Emit::tree());
        Produce::down(Emit::tree());
            Produce::inv_primitive(Emit::tree(), STORE_BIP);
            Produce::down(Emit::tree());
                Produce::ref_symbol(Emit::tree(), K_value, gprk->mid_word_s);
                Produce::val(Emit::tree(), K_truth_state, LITERAL_IVAL, 1);
            Produce::up(Emit::tree());
            Produce::inv_primitive(Emit::tree(), STORE_BIP);
            Produce::down(Emit::tree());
                Produce::ref_symbol(Emit::tree(), K_value, gprk->wpos_s);
                Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 0);
            Produce::up(Emit::tree());
            Produce::inv_primitive(Emit::tree(), STORE_BIP);
            Produce::down(Emit::tree());
                Produce::ref_symbol(Emit::tree(), K_value, gprk->cur_addr_s);
                Produce::inv_call_iname(Emit::tree(), Hierarchy::find(WORDADDRESS_HL));
                Produce::down(Emit::tree());
                    Produce::val_iname(Emit::tree(), K_value, Hierarchy::find(WN_HL));
                Produce::up(Emit::tree());
            Produce::up(Emit::tree());
            Produce::inv_primitive(Emit::tree(), STORE_BIP);
            Produce::down(Emit::tree());
                Produce::ref_symbol(Emit::tree(), K_value, gprk->cur_len_s);
                Produce::inv_call_iname(Emit::tree(), Hierarchy::find(WORDLENGTH_HL));
                Produce::down(Emit::tree());
                    Produce::val_iname(Emit::tree(), K_value, Hierarchy::find(WN_HL));
                Produce::up(Emit::tree());
            Produce::up(Emit::tree());
        Produce::up(Emit::tree());
    Produce::up(Emit::tree());

§1.2.2. Compile I6 code to exit mid-word parsing if at end of a word1.2.2 =

    Produce::inv_primitive(Emit::tree(), IF_BIP);
    Produce::down(Emit::tree());
        Produce::inv_primitive(Emit::tree(), EQ_BIP);
        Produce::down(Emit::tree());
            Produce::val_symbol(Emit::tree(), K_value, gprk->wpos_s);
            Produce::val_symbol(Emit::tree(), K_value, gprk->cur_len_s);
        Produce::up(Emit::tree());
        Produce::code(Emit::tree());
        Produce::down(Emit::tree());
            Produce::inv_primitive(Emit::tree(), POSTINCREMENT_BIP);
            Produce::down(Emit::tree());
                Produce::ref_iname(Emit::tree(), K_value, Hierarchy::find(WN_HL));
            Produce::up(Emit::tree());
            Produce::inv_primitive(Emit::tree(), STORE_BIP);
            Produce::down(Emit::tree());
                Produce::ref_symbol(Emit::tree(), K_value, gprk->mid_word_s);
                Produce::val(Emit::tree(), K_truth_state, LITERAL_IVAL, 0);
            Produce::up(Emit::tree());
        Produce::up(Emit::tree());
    Produce::up(Emit::tree());

§2. Printing the I6 variable |value| out in an LP's notation at run-time.

void RTLiteralPatterns::printing_routine(inter_name *iname, literal_pattern *lp_list) {
    packaging_state save = Routines::begin(iname);

    literal_pattern_name *lpn;
    literal_pattern *lp;
    int k;
    inter_symbol *value_s = LocalVariables::add_named_call_as_symbol(I"value");
    inter_symbol *which_s = LocalVariables::add_named_call_as_symbol(I"which");
    inter_symbol *rem_s = LocalVariables::add_internal_local_as_symbol(I"rem");
    inter_symbol *S_s = LocalVariables::add_internal_local_as_symbol(I"S");

    LOOP_OVER(lpn, literal_pattern_name) {
        if (Wordings::nonempty(lpn->notation_name)) {
            k = 0;
            for (lp = lp_list; lp; lp = lp->next_for_this_kind)
                lp->marked_for_printing = FALSE;
            literal_pattern_name *lpn2;
            for (lpn2 = lpn; lpn2; lpn2 = lpn2->next)
                for (lp = lp_list; lp; lp = lp->next_for_this_kind)
                    if (lp == lpn2->can_use_this_lp) {
                        k++; lp->marked_for_printing = TRUE;
                    }
            if (k > 0) {
                TEMPORARY_TEXT(C)
                WRITE_TO(C, "The named notation: %W", lpn->notation_name);
                Emit::code_comment(C);
                DISCARD_TEXT(C)
                Produce::inv_primitive(Emit::tree(), IF_BIP);
                Produce::down(Emit::tree());
                    Produce::inv_primitive(Emit::tree(), EQ_BIP);
                    Produce::down(Emit::tree());
                        Produce::val_symbol(Emit::tree(), K_value, which_s);
                        Produce::val(Emit::tree(), K_number, LITERAL_IVAL, (inter_ti) (lpn->allocation_id + 1));
                    Produce::up(Emit::tree());
                    Produce::code(Emit::tree());
                    Produce::down(Emit::tree());
                        Compile code to jump to the correct printing pattern2.2;
                    Produce::up(Emit::tree());
                Produce::up(Emit::tree());
            }
        }
    }

    Choose which patterns are eligible for printing2.1;
    Compile code to jump to the correct printing pattern2.2;

    Produce::rtrue(Emit::tree());

    for (lp = lp_list; lp; lp = lp->next_for_this_kind) {
        Print according to this particular literal pattern2.3;
        Produce::rtrue(Emit::tree());
    }
    Routines::end(save);
}

§2.1. This was at one time a more complicated criterion, which masked bugs in the sorting measure.

Choose which patterns are eligible for printing2.1 =

    for (k=0, lp = lp_list; lp; lp = lp->next_for_this_kind) {
        int eligible = FALSE;
        if (lp->equivalent_unit == FALSE) eligible = TRUE;
        if (eligible) k++;
        lp->marked_for_printing = eligible;
    }

§2.2. Compile code to jump to the correct printing pattern2.2 =

    literal_pattern *lpb = NULL;
    for (lp = lp_list; lp; lp = lp->next_for_this_kind)
        if (lp->marked_for_printing)
            if (lp->benchmark)
                lpb = lp;

    if ((lpb) && (lpb->singular_form_only == FALSE)) {
        Produce::inv_primitive(Emit::tree(), IF_BIP);
        Produce::down(Emit::tree());
            Produce::inv_primitive(Emit::tree(), EQ_BIP);
            Produce::down(Emit::tree());
                Produce::val_symbol(Emit::tree(), K_value, value_s);
                Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 0);
            Produce::up(Emit::tree());
            Produce::code(Emit::tree());
            Produce::down(Emit::tree());
                Produce::inv_primitive(Emit::tree(), JUMP_BIP);
                Produce::down(Emit::tree());
                    Produce::lab(Emit::tree(), RTLiteralPatterns::jump_label(lpb));
                Produce::up(Emit::tree());
            Produce::up(Emit::tree());
        Produce::up(Emit::tree());
    }

    literal_pattern *last_lp = NULL, *last_primary = NULL, *last_singular = NULL, *last_plural = NULL;

    for (lp = lp_list; lp; lp = lp->next_for_this_kind) {
        if (lp->marked_for_printing) {
            inter_ti op = GE_BIP; last_lp = lp;
            if (lp->primary_alternative) { last_primary = lp; }
            if (lp->singular_form_only) { last_singular = lp; op = EQ_BIP; }
            if (lp->plural_form_only) { last_plural = lp; op = GT_BIP; }
            Produce::inv_primitive(Emit::tree(), IF_BIP);
            Produce::down(Emit::tree());
                Kinds::Scalings::compile_threshold_test(lp->scaling, value_s, op);
                Produce::code(Emit::tree());
                Produce::down(Emit::tree());
                    Produce::inv_primitive(Emit::tree(), JUMP_BIP);
                    Produce::down(Emit::tree());
                        Produce::lab(Emit::tree(), RTLiteralPatterns::jump_label(lp));
                    Produce::up(Emit::tree());
                Produce::up(Emit::tree());
            Produce::up(Emit::tree());
        }
    }

    if (last_primary) last_lp = last_primary;
    if (last_lp) {
        if ((last_lp->singular_form_only) &&
            (last_plural) &&
            (Kinds::Scalings::compare(last_plural->scaling, last_lp->scaling) == 0)) {
            Produce::inv_primitive(Emit::tree(), JUMP_BIP);
            Produce::down(Emit::tree());
                Produce::lab(Emit::tree(), RTLiteralPatterns::jump_label(last_plural));
            Produce::up(Emit::tree());
        }
        Produce::inv_primitive(Emit::tree(), JUMP_BIP);
        Produce::down(Emit::tree());
            Produce::lab(Emit::tree(), RTLiteralPatterns::jump_label(last_lp));
        Produce::up(Emit::tree());
    }

§2.3. Print according to this particular literal pattern2.3 =

    RTLiteralPatterns::comment_use_of_lp(lp);
    Produce::place_label(Emit::tree(), RTLiteralPatterns::jump_label(lp));

    int ec=0, oc=0;
    for (int tc=0; tc<lp->no_lp_tokens; tc++) {
        if (lp->lp_elements[ec].preamble_optional)
            Truncate the printed form here if subsequent numerical parts are zero2.3.4;
        if ((tc>0) && (lp->lp_tokens[tc].new_word_at)) {
            Produce::inv_primitive(Emit::tree(), PRINT_BIP);
            Produce::down(Emit::tree());
                Produce::val_text(Emit::tree(), I" ");
            Produce::up(Emit::tree());
        }
        switch (lp->lp_tokens[tc].lpt_type) {
            case WORD_LPT: Compile I6 code to print a fixed word token within a literal pattern2.3.1; break;
            case CHARACTER_LPT: Compile I6 code to print a character token within a literal pattern2.3.2; break;
            case ELEMENT_LPT: Compile I6 code to print an element token within a literal pattern2.3.3; break;
            default: internal_error("unknown literal pattern token type");
        }
    }

§2.3.1. Compile I6 code to print a fixed word token within a literal pattern2.3.1 =

    TEMPORARY_TEXT(T)
    CompiledText::from_wide_string(T, Lexer::word_raw_text(lp->lp_tokens[tc].token_wn), CT_RAW);
    Produce::inv_primitive(Emit::tree(), PRINT_BIP);
    Produce::down(Emit::tree());
        Produce::val_text(Emit::tree(), T);
    Produce::up(Emit::tree());
    DISCARD_TEXT(T)

§2.3.2. Compile I6 code to print a character token within a literal pattern2.3.2 =

    TEMPORARY_TEXT(T)
    TEMPORARY_TEXT(tiny_string)
    PUT_TO(tiny_string, (int) lp->lp_tokens[tc].token_char);
    CompiledText::from_stream(T, tiny_string, CT_RAW);
    DISCARD_TEXT(tiny_string)
    Produce::inv_primitive(Emit::tree(), PRINT_BIP);
    Produce::down(Emit::tree());
        Produce::val_text(Emit::tree(), T);
    Produce::up(Emit::tree());
    DISCARD_TEXT(T)

§2.3.3. Compile I6 code to print an element token within a literal pattern2.3.3 =

    literal_pattern_element *lpe = &(lp->lp_elements[ec]);
    if (lpe->element_optional)
        Truncate the printed form here if subsequent numerical parts are zero2.3.4;
    oc = ec + 1;
    if (lp->no_lp_elements == 1) {
        Kinds::Scalings::compile_print_in_quanta(lp->scaling, value_s, rem_s, S_s);
    } else {
        if (ec == 0) {
            if (lp->number_signed) {
                Produce::inv_primitive(Emit::tree(), IF_BIP);
                Produce::down(Emit::tree());
                    Produce::inv_primitive(Emit::tree(), AND_BIP);
                    Produce::down(Emit::tree());
                        Produce::inv_primitive(Emit::tree(), LT_BIP);
                        Produce::down(Emit::tree());
                            Produce::val_symbol(Emit::tree(), K_value, value_s);
                            Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 0);
                        Produce::up(Emit::tree());
                        Produce::inv_primitive(Emit::tree(), EQ_BIP);
                        Produce::down(Emit::tree());
                            Produce::inv_primitive(Emit::tree(), DIVIDE_BIP);
                            Produce::down(Emit::tree());
                                Produce::val_symbol(Emit::tree(), K_value, value_s);
                                Produce::val(Emit::tree(), K_number, LITERAL_IVAL, (inter_ti) (lpe->element_multiplier));
                            Produce::up(Emit::tree());
                            Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 0);
                        Produce::up(Emit::tree());
                    Produce::up(Emit::tree());
                    Produce::code(Emit::tree());
                    Produce::down(Emit::tree());
                        Produce::inv_primitive(Emit::tree(), PRINT_BIP);
                        Produce::down(Emit::tree());
                            Produce::val_text(Emit::tree(), I"-");
                        Produce::up(Emit::tree());
                    Produce::up(Emit::tree());
                Produce::up(Emit::tree());
            }
            Produce::inv_primitive(Emit::tree(), PRINTNUMBER_BIP);
            Produce::down(Emit::tree());
                Produce::inv_primitive(Emit::tree(), DIVIDE_BIP);
                Produce::down(Emit::tree());
                    Produce::val_symbol(Emit::tree(), K_value, value_s);
                    Produce::val(Emit::tree(), K_number, LITERAL_IVAL, (inter_ti) (lpe->element_multiplier));
                Produce::up(Emit::tree());
            Produce::up(Emit::tree());
            if (lp->number_signed) {
                Produce::inv_primitive(Emit::tree(), IF_BIP);
                Produce::down(Emit::tree());
                    Produce::inv_primitive(Emit::tree(), LT_BIP);
                    Produce::down(Emit::tree());
                        Produce::val_symbol(Emit::tree(), K_value, value_s);
                        Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 0);
                    Produce::up(Emit::tree());
                    Produce::code(Emit::tree());
                    Produce::down(Emit::tree());
                        Produce::inv_primitive(Emit::tree(), STORE_BIP);
                        Produce::down(Emit::tree());
                            Produce::ref_symbol(Emit::tree(), K_value, value_s);
                            Produce::inv_primitive(Emit::tree(), MINUS_BIP);
                            Produce::down(Emit::tree());
                                Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 0);
                                Produce::val_symbol(Emit::tree(), K_value, value_s);
                            Produce::up(Emit::tree());
                        Produce::up(Emit::tree());
                    Produce::up(Emit::tree());
                Produce::up(Emit::tree());
            }
        } else {
            if ((lp->lp_tokens[tc].new_word_at == FALSE) &&
                (lpe->without_leading_zeros == FALSE)) {
                int pow = 1;
                for (pow = 1000000000; pow>1; pow = pow/10)
                    if (lpe->element_range > pow) {
                        Produce::inv_primitive(Emit::tree(), IF_BIP);
                        Produce::down(Emit::tree());
                            Produce::inv_primitive(Emit::tree(), LT_BIP);
                            Produce::down(Emit::tree());
                                Produce::inv_primitive(Emit::tree(), MODULO_BIP);
                                Produce::down(Emit::tree());
                                    Produce::inv_primitive(Emit::tree(), DIVIDE_BIP);
                                    Produce::down(Emit::tree());
                                        Produce::val_symbol(Emit::tree(), K_value, value_s);
                                        Produce::val(Emit::tree(), K_number, LITERAL_IVAL, (inter_ti) (lpe->element_multiplier));
                                    Produce::up(Emit::tree());
                                    Produce::val(Emit::tree(), K_number, LITERAL_IVAL, (inter_ti) (lpe->element_range));
                                Produce::up(Emit::tree());
                                Produce::val(Emit::tree(), K_number, LITERAL_IVAL, (inter_ti) (pow));
                            Produce::up(Emit::tree());
                            Produce::code(Emit::tree());
                            Produce::down(Emit::tree());
                                Produce::inv_primitive(Emit::tree(), PRINT_BIP);
                                Produce::down(Emit::tree());
                                    Produce::val_text(Emit::tree(), I"0");
                                Produce::up(Emit::tree());
                            Produce::up(Emit::tree());
                        Produce::up(Emit::tree());

                    }
            }
            Produce::inv_primitive(Emit::tree(), PRINTNUMBER_BIP);
            Produce::down(Emit::tree());
                Produce::inv_primitive(Emit::tree(), MODULO_BIP);
                Produce::down(Emit::tree());
                    Produce::inv_primitive(Emit::tree(), DIVIDE_BIP);
                    Produce::down(Emit::tree());
                        Produce::val_symbol(Emit::tree(), K_value, value_s);
                        Produce::val(Emit::tree(), K_number, LITERAL_IVAL, (inter_ti) (lpe->element_multiplier));
                    Produce::up(Emit::tree());
                    Produce::val(Emit::tree(), K_number, LITERAL_IVAL, (inter_ti) (lpe->element_range));
                Produce::up(Emit::tree());
            Produce::up(Emit::tree());
        }
    }
    ec++;

§2.3.4. Truncate the printed form here if subsequent numerical parts are zero2.3.4 =

    if (oc == ec) {
        if (ec == 0) {
            Produce::inv_primitive(Emit::tree(), IF_BIP);
            Produce::down(Emit::tree());
                Produce::inv_primitive(Emit::tree(), EQ_BIP);
                Produce::down(Emit::tree());
                    Produce::inv_primitive(Emit::tree(), DIVIDE_BIP);
                    Produce::down(Emit::tree());
                        Produce::val_symbol(Emit::tree(), K_value, value_s);
                        Produce::val(Emit::tree(), K_number, LITERAL_IVAL, (inter_ti) (lp->lp_elements[ec].element_multiplier));
                    Produce::up(Emit::tree());
                    Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 0);
                Produce::up(Emit::tree());
                Produce::code(Emit::tree());
                Produce::down(Emit::tree());
                    Produce::rtrue(Emit::tree());
                Produce::up(Emit::tree());
            Produce::up(Emit::tree());
        } else {
            Produce::inv_primitive(Emit::tree(), IF_BIP);
            Produce::down(Emit::tree());
                Produce::inv_primitive(Emit::tree(), EQ_BIP);
                Produce::down(Emit::tree());
                    Produce::inv_primitive(Emit::tree(), MODULO_BIP);
                    Produce::down(Emit::tree());
                        Produce::inv_primitive(Emit::tree(), DIVIDE_BIP);
                        Produce::down(Emit::tree());
                            Produce::val_symbol(Emit::tree(), K_value, value_s);
                            Produce::val(Emit::tree(), K_number, LITERAL_IVAL, (inter_ti) (lp->lp_elements[ec].element_multiplier));
                        Produce::up(Emit::tree());
                        Produce::val(Emit::tree(), K_number, LITERAL_IVAL, (inter_ti) (lp->lp_elements[ec].element_range));
                    Produce::up(Emit::tree());
                    Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 0);
                Produce::up(Emit::tree());
                Produce::code(Emit::tree());
                Produce::down(Emit::tree());
                    Produce::rtrue(Emit::tree());
                Produce::up(Emit::tree());
            Produce::up(Emit::tree());
        }
        oc = ec + 1;
    }

§3.

inter_symbol *RTLiteralPatterns::jump_label(literal_pattern *lp) {
    if (lp->jump_label == NULL) {
        TEMPORARY_TEXT(N)
        WRITE_TO(N, ".Use_LP_%d", lp->allocation_id);
        lp->jump_label = Produce::reserve_label(Emit::tree(), N);
        DISCARD_TEXT(N)
    }
    return lp->jump_label;
}

§4.

void RTLiteralPatterns::comment_use_of_lp(literal_pattern *lp) {
    TEMPORARY_TEXT(W)
    WRITE_TO(W, "%W, ", lp->prototype_text);
    Kinds::Scalings::describe(W, lp->scaling);
    Emit::code_comment(W);
    DISCARD_TEXT(W)
}

§5.

void RTLiteralPatterns::log_lp_debugging_data(literal_pattern *lp) {
    TEMPORARY_TEXT(W)
    WRITE_TO(W, "%s %s LP%d: primary %d, s/p: %d/%d\n",
        (lp->benchmark)?"***":"---",
        (lp->equivalent_unit)?"equiv":"new  ",
        lp->allocation_id, lp->primary_alternative,
        lp->singular_form_only, lp->plural_form_only);
    Emit::code_comment(W);
    DISCARD_TEXT(W)
    RTLiteralPatterns::comment_use_of_lp(lp);
}