File [ivy]<Satterthwaite>Models>Compiler.model!1

    -- Compiler.model
    -- Copyright (c) 1985 by Xerox Corporation.  All rights reserved.
    -- last edit by Satterthwaite, June 2, 1986 4:22:27 pm PDT

    LET @///SML/OSBasics.modelBcd!581021414 IN
    LET @///SML/CedarBasics.modelBcd!581021540 IN
    LET [
        ComputeServerServer: TYPE~
          @/Cedar/Cedar6.1/ComputeServerUser/ComputeServerServer.bcd!548206815,
        ConvertUnsafe: TYPE~@/Cedar/Cedar6.1/Rope/ConvertUnsafe.bcd!541570785,
        Loader: TYPE Loader~@/Cedar/Cedar6.1/Loader/Loader.bcd!541582731,
        ProcessorFace: TYPE~@/Cedar/Cedar6.1/Heads/ProcessorFace.bcd!541571125,
        RuntimeError: TYPE~@/Cedar/Cedar6.1/MesaRuntime/RuntimeError.bcd!541570482,
        TimeStamp: TYPE~@/Cedar/Cedar6.1/BasicLoadState/TimeStamp.bcd!541573143,
        UnsafeStorage: TYPE~
          @/Cedar/Cedar6.1/SafeStorage/UnsafeStorage.bcd!541573222] IN

    LAMBDA [
        AsciiImpl: Ascii,
        BasicsImpl: Basics,
        BasicTimeImpl: BasicTime,
        CommanderImpl: Commander,
        ComputeServerServerImpl: ComputeServerServer,
        ConvertUnsafeImpl: ConvertUnsafe,
        FileNamesImpl: FileNames,
        FSImpl: FS,
        IOImpl: IO,
        LoaderImpl: Loader,
        PrincOpsUtilsImpl: PrincOpsUtils,
        ProcessImpl: Process,
        ProcessorFaceImpl: ProcessorFace,
        ProcessImpl: Process,
        RefTextImpl: RefText,
        RopeImpl: Rope,
        RuntimeErrorImpl: RuntimeError,
        UnsafeStorageImpl: UnsafeStorage,
        VMImpl: VM] IN

      LET REC [

          &options: STRING~"j-b-ns-w";

          -- these come from BasicLoadState.df
          Table: TYPE~@InternalTable.mesa!577304764*["s-z"];
          BcdDefs: TYPE~@InternalBcdDefs.mesa!564432582*["s-z"];
          Bcd:~@InternalBcdStuff.modelBcd!581022104;
          SymbolCache:~@InternalSymbolCache.mesa!577305580;

          -- this comes from AMTypes.df

          FileSegment: TYPE~Bcd.FileSegment*["s-z"];
          Symbols: TYPE~Bcd.Symbols*["s-z"];
          Literals: TYPE~Bcd.Literals*["s-z"];
          XTree: TYPE Tree~Bcd.Tree*["s-z"];
          Tree: TYPE~@InternalTree.mesa!579136501*[XTree:~XTree, &options:~"s-z"];
          XSymbolSegment: TYPE SymbolSegment~
            Bcd.SymbolSegment*[Tree:~XTree, &options:~"s-z"];
          SymbolSegment: TYPE~Bcd.SymbolSegment*[Tree:~Tree, &options:~"s-z"];
          PackageSymbols: TYPE~Bcd.PackageSymbols*["s-z"];
          Alloc: TYPE~Bcd.Alloc*["s-z"];
          SymbolOps: TYPE~Bcd.SymbolOps*["s-z"];
          RCMap: TYPE~Bcd.RCMap*["s-z"];
          RTBcd: TYPE~Bcd.RTBcd*["s-z"];

          [
          SymbolPack: TYPE, SymbolPackImplA: SymbolPack, SymbolOpsImpl1: SymbolOps]~
            Bcd.SymbolPack*[]*[];
          SymbolTable: TYPE~Bcd.SymbolTable*["s-z"];
          SymbolOpsImpl: SymbolOps~
            SymbolOpsImpl1 + Bcd.SymbolPackExt*[]*[own:~SymbolPackImplA];
          SymbolTableImpl: SymbolTable~
            REC [
              [SymbolPack: TYPE, SymbolPackImplB: SymbolPack]~Bcd.SymbolPack*[]*[];
              SymbolTableImpl: SymbolTable~
                SymbolCache*[]*[initial:~SymbolPackImplB]].SymbolTableImpl;

          TreeOps: TYPE~@ProtoTreeOps.mesa!561064916*[];
          TreeOpsImpl: TreeOps~@TreePack.mesa!577228352*[]*[];

          LiteralOps: TYPE~@LiteralOps.mesa!542181991*[];
          LiteralOpsImpl: LiteralOps~@LiteralPack.mesa!581365296*[]*[];

          Types: TYPE~Bcd.Types*["s-z"];
          TypesImpl: Types~Bcd.TypePack*[]*[];

          XTreeOps: TYPE~@XTreeOps.mesa!560890077*[];
          XTreeOpsImpl: XTreeOps~@XTreePack.mesa!560891031*[]*[];

          SourceMap: TYPE~@SourceMap.mesa!560990724*[];

          FileParms: TYPE~@FileParms.mesa!542182141*["j-b-ns-z"];
          Copier: TYPE~@Copier.mesa!542182175*[];
          CopierImpl: Copier~
            @SymbolCopier.mesa!579138115*[]*[ownSymbols:~SymbolPackImplA]
              + @FilePack.mesa!576616474*[]*[own:~SymbolPackImplA];

          [ComData: TYPE, dataPtr: ComData]~@ComData.mesa!577236175*[]*[];

          SymLiteralOps: TYPE~@SymLiteralOps.mesa!542182048*[];
          SymLiteralOpsImpl: SymLiteralOps~@SymLiteralPack.mesa!580755973*[]*[];

          Real: TYPE~@IeeeFloat.mesa!577235028*[];
          RealImpl: Real~@IeeePack.mesa!577235448*[]*[];

          CompilerOps: TYPE~@CompilerOps.mesa!542182211*["j-b-ns-z"];
          CompilerUtil: TYPE~@CompilerUtil.mesa!542182242*[];

          Log: TYPE~@Log.mesa!576616016*[];
          ErrorTable: TYPE~@ErrorTable.mesa!567375969*[];
          [LogImpl: Log, SourceMapImpl: SourceMap]~@LogPack.mesa!583173858*[]*[];

          Pass1: CompilerUtil~
            REC [
              ParseTable: TYPE~@ParseTable.mesa!580778425*[];
              P1: TYPE~@P1.mesa!569890987*[];
              [Control: CompilerUtil, Driver: P1]~@Pass1.mesa!581294997*[]*[];
              P1Impl: P1~
                Driver + @Scanner.mesa!580154837*[]*[]
                  + @ProtoParser.mesa!580755205*[]*[]
                  + @Pass1T.mesa!580778384*[]*[]].Control;

          Pass2: CompilerUtil~@Pass2.mesa!565053259*[]*[];

          Pass3: CompilerUtil~
            REC [
              A3: TYPE~@A3.mesa!577058476*[];
              P3: TYPE~@P3.mesa!576526077*[];
              P3S: TYPE~@P3S.mesa!576177918*[];
              A3Impl: A3~
                @Attr3a.mesa!577058465*[]*[] + @Attr3b.mesa!576450068*[]*[];
              [Pass3: TYPE, passPtr: Pass3, Control: CompilerUtil]~
                @Pass3.mesa!577235532*[]*[];
              Pass3B: P3~@Pass3B.mesa!576177528*[]*[];
              Pass3D: P3~@Pass3D.mesa!576534935*[]*[];
              Pass3I: P3~@Pass3I.mesa!578508453*[]*[];
              Pass3M: P3~@Pass3M.mesa!581639447*[]*[];
              [Pass3S: P3, P3SImpl1: P3S]~@Pass3S.mesa!580769538*[]*[];
              Pass3V: P3~@Pass3V.mesa!576639703*[]*[];
              [Pass3Xa: P3, P3SImpl2: P3S]~@Pass3Xa.mesa!577672678*[]*[];
              [Pass3Xb: P3, P3SImpl3: P3S]~@Pass3Xb.mesa!583183948*[]*[];
              Pass3Xc: P3~@Pass3Xc.mesa!577058433*[]*[];
              P3Impl: P3~
                Pass3B + Pass3D + Pass3I + Pass3M + Pass3S + Pass3V + Pass3Xa
                  + Pass3Xb + Pass3Xc;
              P3SImpl: P3S~P3SImpl1 + P3SImpl2 + P3SImpl3].Control;

          Pass3P: CompilerUtil~@Pass3P.mesa!577218281*[]*[];

          Pass4: CompilerUtil~
            REC [
              P4: TYPE~@P4.mesa!576785507*[];
              [Pass4: TYPE, passPtr: Pass4, Control: CompilerUtil]~
                @Pass4.mesa!576713723*[]*[];
              P4Impl: P4~
                @Pass4B.mesa!580773923*[]*[] + @Pass4D.mesa!576783102*[]*[]
                  + @Pass4L.mesa!578513444*[]*[] + @Pass4S.mesa!576794244*[]*[]
                  + @Pass4Ops.mesa!581710170*[]*[] + @Pass4Xa.mesa!581710384*[]*[]
                  + @Pass4Xb.mesa!576785934*[]*[] + @Pass4Xc.mesa!576786302*[]*[]].Control;

          Pass5: CompilerUtil~
            REC [
              MPtr: ComData~dataPtr;

              -- architecture definitions
              RTSD: TYPE~Bcd.RTSD*[];

              CodeDefs: TYPE~@CodeDefs.mesa!580770865*[];
              P5: TYPE~@P5.mesa!565046992*[];
              P5L: TYPE~@P5L.mesa!542185580*[];
              P5S: TYPE~@P5S.mesa!542185615*[];
              P5U: TYPE~@P5U.mesa!577059242*[];
              Stack: TYPE~@Stack.mesa!542185707*[];
              Counting: TYPE~@Counting.mesa!565046095*[];

              FOpCodes: TYPE~@FOpCodes.mesa!542185412*[];
              OpCodeParams: TYPE~@OpCodeParams.mesa!542185453*[];
              OpTableDefs: TYPE~@OpTableDefs.mesa!542185486*[];

              [Code: TYPE, CPtr: Code, Control: CompilerUtil]~
                @Code.mesa!577307149*[]*[];
              P5UImpl: P5U~@CgenUtil.mesa!576540474*[]*[];
              [CodeDefsImpl2: CodeDefs, P5Impl1: P5]~@VarTemp.mesa!577237982*[]*[];
              [VarUtils: P5L, CodeDefsImpl3: CodeDefs]~
                @VarUtils.mesa!577308708*[]*[];
              [VarBasics: P5L, CodeDefsImpl4: CodeDefs]~
                @VarBasics.mesa!577308787*[]*[];
              [VarMove: P5L, CodeDefsImpl5: CodeDefs]~@VarMove.mesa!577308889*[]*[];
              P5LImpl: P5L~VarUtils + VarBasics + VarMove;
              [P5Impl2: P5, P5SImpl1: P5S]~@Driver.mesa!580771230*[]*[];
              OpTableDefsImpl: OpTableDefs~@OpTable.mesa!542186487*[]*[];
              P5Impl3: P5~@FOpTable.mesa!542186453*[]*[];
              [CodeDefsImpl7: CodeDefs, P5SImpl2: P5S]~
                @Address.mesa!577237730*[]*[];
              StackImpl: Stack~@StackImpl.mesa!577672908*[]*[LCPtr:~CPtr];
              [CodeDefsImpl9: CodeDefs, P5Impl4: P5, P5SImpl3: P5S]~
                @Flow.mesa!577308564*[]*[];
              [CodeDefsImpl10: CodeDefs, P5Impl5: P5, P5SImpl4: P5S]~
                @Calls.mesa!575487067*[]*[];
              [CodeDefsImpl11: CodeDefs, P5Impl6: P5, P5SImpl5: P5S]~
                @Store.mesa!560985109*[]*[];
              [CountingImpl: Counting, CodeDefsImpl12: CodeDefs]~
                @CountingImpl.mesa!577235601*[]*[];
              [CodeDefsImpl13: CodeDefs, P5Impl7: P5]~
                @Constructor.mesa!582077422*[]*[];
              [CodeDefsImpl14: CodeDefs, P5Impl8: P5]~
                @Expression.mesa!580757361*[]*[];
              [CodeDefsImpl15: CodeDefs, P5Impl9: P5]~
                @FlowExpression.mesa!577308600*[]*[];
              [CodeDefsImpl16: CodeDefs, P5Impl10: P5]~
                @Statement.mesa!577237792*[]*[];
              [CodeDefsImpl17: CodeDefs, P5Impl11: P5]~
                @Selection.mesa!578876207*[]*[];
              [CodeDefsImpl18: CodeDefs, P5Impl12: P5]~
                @OutCode.mesa!577237857*[]*[];

              Final:~
                REC [
                  P5F: TYPE~@P5F.mesa!580770888*[];
                  PeepholeDefs: TYPE~@PeepholeDefs.mesa!542185675*[];

                  Peephole:~
                    REC [
                      [
                      CodeDefsImplP: CodeDefs, P5ImplQ: P5, PeepholeQ: PeepholeDefs]~
                        @PeepholeQ.mesa!542186569*[]*[];
                      [P5ImplU: P5, PeepholeU: PeepholeDefs]~
                        @PeepholeU.mesa!577309267*[]*[];
                      PeepholeZ: PeepholeDefs~@PeepholeZ.mesa!560985079*[]*[];
                      PeepholeDefsImpl: PeepholeDefs~
                        PeepholeQ + PeepholeU + PeepholeZ;
                      P5ImplP: P5~P5ImplQ + P5ImplU];

                  PeepholeDefsImpl: PeepholeDefs~Peephole.PeepholeDefsImpl;
                  [CodeDefsImplF0: CodeDefs, CrossJump: P5F]~
                    @CrossJump.mesa!577673142*[]*[];
                  [CodeDefsImplF1: CodeDefs, P5Impl13: P5, Final: P5F]~
                    @Final.mesa!580774258*[]*[];
                  P5FImpl: P5F~CrossJump + Final;
                  CodeDefsImplF: CodeDefs~
                    Peephole.CodeDefsImplP + CodeDefsImplF0 + CodeDefsImplF1;
                  P5ImplF: P5~Peephole.P5ImplP + P5Impl13];

              CodeDefsImpl: CodeDefs~
                CodeDefsImpl2 + CodeDefsImpl3 + CodeDefsImpl4 + CodeDefsImpl5
                  + CodeDefsImpl7 + CodeDefsImpl9 + CodeDefsImpl10 + CodeDefsImpl11
                  + CodeDefsImpl12 + CodeDefsImpl13 + CodeDefsImpl14
                  + CodeDefsImpl15 + CodeDefsImpl16 + CodeDefsImpl17
                  + CodeDefsImpl18 + Final.CodeDefsImplF;
              P5Impl: P5~
                P5Impl1 + P5Impl2 + P5Impl3 + P5Impl4 + P5Impl5 + P5Impl6 + P5Impl7
                  + P5Impl8 + P5Impl9 + P5Impl10 + P5Impl11 + P5Impl12
                  + Final.P5ImplF;
              P5SImpl: P5S~P5SImpl1 + P5SImpl2 + P5SImpl3 + P5SImpl4 + P5SImpl5].Control;

          BcdOutput: CompilerUtil~
            REC [
              TypeStrings: TYPE~Bcd.TypeStrings*["s-z"];
              TypeStringsImpl: TypeStrings~Bcd.TypeStringsImpl*[]*[];
              RCMapOps: TYPE~Bcd.RCMapOps*["s-z"];
              RCMapOpsImpl: RCMapOps~Bcd.RCMapBuilderImpl*[]*[];
              ObjectOut: CompilerUtil~@ObjectOut.mesa!579138113*[]*[]].ObjectOut;

          AllocImpl: Alloc~Bcd.AllocImpl*[]*[];
          CBinary: TYPE~Bcd.CBinary*[&options:~"s-z"];
          CBinaryImpl: CBinary~
            @MesaTab.bcd!580778423*[] + @ErrorTab.bcd!580778428*[]
              + @DebugTab.bcd!580778430*[];
          CommandUtil: TYPE~@CommandUtil.mesa!542181810*[];
          CommandUtilImpl: CommandUtil~@CommandPack.mesa!542204761*[]*[];
          FileParmOps: TYPE~@FileParmOps.mesa!542182616*[];
          FileParmOpsImpl: FileParmOps~@FileParmPack.mesa!575338491*[]*[];
          DebugTable: TYPE~@DebugTable.mesa!542182360*[];
          Debug: CompilerUtil~@Debug.mesa!570472893*[]*[];

          OSMiscOps: TYPE~@OSMiscOps.mesa!563132423*[];
          OSMiscOpsImpl: OSMiscOps~@OSMiscOpsImpl.mesa!577672349*[]*[];

          [CompilerOpsImpl: CompilerOps, Sequencer: CompilerUtil]~
            @CompilerSequencer.mesa!575502346*[]*[ownSymbols:~SymbolPackImplA];

          CompilerUtilImpl: CompilerUtil~
            Pass1 + Pass2 + Pass3 + Pass3P + Pass4 + Pass5 + BcdOutput + Debug
              + Sequencer;

          --Compiler: CONTROL~@CompilerServerCommandImpl.mesa!561682218*[]*[]].CompilerOpsImpl
          Compiler: CONTROL~@TestInterface.mesa!577675259*[]*[]] IN []