-- coreSchemeCode.mesa
-- Tidbit compiler output for core.scheme

DIRECTORY Scheme, SchemePrivate;

coreSchemeCode: CEDAR PROGRAM
IMPORTS Scheme, SchemePrivate
~ BEGIN
    OPEN Scheme, SchemePrivate;
    
    Code0: PROC [a: Activation] ~ {
        g: PairSeq ~ a.code.globalBindings;
        env: Environment ~ a.env;
        c: SimpleVector ~ a.code.literals;
        s: Stack ~ a.s;
        temp: Any ← NIL;
        pc: INTEGER ← a.pc;
        bottom: INTEGER ← 0;
        n: INTEGER ← 2;
        
        DO
            a.pc ← pc;
            pc ← pc + 1;
            SELECT a.pc FROM
                1 => {
                    s[0] ← unspecified;
                    GOTO returnExit;
                    };
                0 => {
                    s[0] ← g[0].cdr;
                    s[1] ← c[0];
                    };
                ENDCASE => ERROR;
            a.pc ← pc;
            a.n ← n;
            a.bottom ← bottom;
            RETURN;
            
            REPEAT
                returnExit => { a.pc ← -1; a.n ← 0; };
            ENDLOOP;
        };
    
    Register: PROC [env: Environment] ~ {
        startProc: TidbitProcedure;
        literals: SimpleVector ~ ReadRopeVector["#\001\022\001\021\012coreMXCode"];
        
        
        {
            startProc ← NEW[TidbitProcedureRep ← [env: NIL, code:
                MakeTidbitCode[
                    "\"core\" () (reinstall)",
                    env, 0, Code0,
                    SV1[
                        literals[0]
                        ],
                    0, "No documentation", NIL]
                ]];
            };
        [] ← Apply[startProc, NIL];
        };
    
    RegisterInit[Register];
END.