-- 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 []