-- Compiler.model
-- last edited by Satterthwaite, August 15, 1983 12:48 pm

LET @OSBasics.modelBcd IN
LET [
    Feedback: TYPE~@Feedback.bcd[],
    IO: TYPE~@IO.bcd[],
    KernelFile: TYPE~@KernelFile.bcd[],
    ProcessorFace: TYPE~@ProcessorFace.bcd[],
    TemporarySpecialExecOps: TYPE~@TemporarySpecialExecOps.bcd[]
    ] IN
  LAMBDA [
	DirectoryImpl: Directory,
        ExecImpl: Exec,
        FileImpl: File,
        FileStreamImpl: FileStream,
        HeapImpl: Heap,
        InlineImpl: Inline,
        IOImpl: IO,
        KernelFileImpl: KernelFile,
        LongStringImpl: LongString,
        ProcessorFaceImpl: ProcessorFace,
        RuntimeImpl: Runtime,
        SpaceImpl: Space,
        StreamImpl: Stream,
        StringImpl: String,
        TimeImpl: Time,
        TTYImpl: TTY,
        VolumeImpl: Volume
        ] => [] IN
    REC [
    
      &options: STRING~"j-b-n-cs";

      Strings: TYPE~@LongStrings.mesa!2579451954*[]*[];
      StringsImpl: Strings~NIL;
      Table: TYPE~@Table.mesa!2577115106*[]*[];
      BcdDefs: TYPE~@BcdDefs.mesa!2565550795*[]*[];
      BcdOps: TYPE~@BcdOps.mesa!2563405009*[]*[];

      FileSegment: TYPE~@FileSegment.mesa!2550689766*[]*[];
      Symbols: TYPE~@Symbols.mesa!2591895789*[]*[];
      Literals: TYPE~@Literals.mesa!2591823743*[]*[];
      Tree: TYPE~@Tree.mesa!2591824100*[]*[];
      SymbolSegment: TYPE~@SymbolSegment.mesa!2591823663*[]*[];
      PackageSymbols: TYPE~@PackageSymbols.mesa!2513695236*[]*[];
      Alloc: TYPE~@Alloc.mesa!2585849506*[]*[];
      SymbolOps: TYPE~@SymbolOps.mesa!2591827562*[]*[];
      RCMap: TYPE~@RCMap.mesa!2542132963*[]*[];
      RTBcd: TYPE~@RTBcd.mesa!2562263325*[]*[];
      LiteralOps: TYPE~@LiteralOps.mesa!2591889369*[]*[];
      TreeOps: TYPE~@ProtoTreeOps.mesa!2588520733*[]*[];
      SymLiteralOps: TYPE~@SymLiteralOps.mesa!2596729968*[]*[];
      OSMiscOps: TYPE~@OSMiscOps.mesa!2585846758*[]*[];
      OSMiscOpsImpl: OSMiscOps~@OSMiscOpsImpl.mesa!2585847230*[]*[];
      CharIO: TYPE~@CharIO.mesa!2585844909*[]*[];
      CharIOImpl: CharIO~@CharIOImpl.mesa!2585845746*[]*[];
      Real: TYPE~@IeeeFloat.mesa!2569172539*[]*[];
      RealImpl: Real~@IeeePack.mesa!2569172695*[]*[];
      AllocImpl: Alloc~@AllocImpl.mesa!2585851003*[]*[];

      [SymbolPack: TYPE, SymbolPackImplA: SymbolPack, SymbolOpsImpl1: SymbolOps]~
	@SymbolPack.mesa!2591827548*[]*[];
      SymbolTable: TYPE~@SymbolTable.mesa!2568557625*[]*[];
      SymbolOpsImpl: SymbolOps~
        SymbolOpsImpl1 + @SymbolPackExt.mesa!2591828083*[]*[own~SymbolPackImplA];
      SymbolTableImpl: SymbolTable~REC [
        [SymbolPack: TYPE, SymbolPackImplB: SymbolPack]~@SymbolPack.mesa!2591827548*[]*[];
        SymbolTableImpl: SymbolTable~@SymbolCache.mesa!2591914617*[]*[
          initial~SymbolPackImplB]
        ].SymbolTableImpl;

      TreeOpsImpl: TreeOps~@TreePack.mesa!2588521035*[]*[];
      LiteralOpsImpl: LiteralOps~@LiteralPack.mesa!2591892424*[]*[];

      Types: TYPE~@Types.mesa!2557178921*[]*[];
      TypesImpl: Types~@TypePack.mesa!2591830311*[]*[];
      FileParms: TYPE~@FileParms.mesa!2563230620*[]*[];
      Copier: TYPE~@Copier.mesa!2591889584*[]*[];
      CopierImpl: Copier~
	@SymbolCopier.mesa!2599061757*[]*[ownSymbols~SymbolPackImplA] +
	@FilePack.mesa!2591892428*[]*[own~SymbolPackImplA];
      [ComData: TYPE, dataPtr: ComData]~@ComData.mesa!2601305731*[]*[];
      SymLiteralOpsImpl: SymLiteralOps~@SymLiteralPack.mesa!2596742933*[]*[];
      CompilerOps: TYPE~@CompilerOps.mesa!2601306490*[]*[];
      CompilerUtil: TYPE~@CompilerUtil.mesa!2588518198*[]*[];
      Log: TYPE~@Log.mesa!2591889518*[]*[];
      ErrorTable: TYPE~@ErrorTable.mesa!2550173109*[]*[];
      LogImpl: Log~@LogPack.mesa!2591831374*[]*[];

      Pass1: CompilerUtil ~ REC [
	ParseTable: TYPE~@ParseTable.mesa!2598192502*[]*[];
	P1: TYPE~@P1.mesa!2591887183*[]*[];
	[Control: CompilerUtil, Driver: P1]~@Pass1.mesa!2591887280*[]*[];
	Scanner: P1~@Scanner.mesa!2598807614*[]*[];
	Parser: P1~@ProtoParser.mesa!2588287864*[]*[];
	TreeBuilder: P1~@Pass1T.mesa!2598192460*[]*[];
	P1Impl: P1~Driver+Scanner+Parser+TreeBuilder].Control;

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

      Pass3: CompilerUtil ~ REC [
	A3: TYPE~@A3.mesa!2594674509*[]*[];
	P3: TYPE~@P3.mesa!2585847379*[]*[];
	P3S: TYPE~@P3S.mesa!2585847462*[]*[];
	A3Impl: A3~
	 @Attr3a.mesa!2594675060*[]*[] + @Attr3b.mesa!2588522281*[]*[];
	[Pass3: TYPE, passPtr: Pass3, Control: CompilerUtil]~@Pass3.mesa!2596730423*[]*[];
	Pass3B: P3~@Pass3B.mesa!2591830809*[]*[];
	Pass3D: P3~@Pass3D.mesa!2598538635*[]*[];
	Pass3I: P3~@Pass3I.mesa!2603838022*[]*[];
	Pass3M: P3~@Pass3M.mesa!2598884473*[]*[];
	[Pass3S: P3,P3SImpl1: P3S]~@Pass3S.mesa!2590691423*[]*[];
	Pass3V: P3~@Pass3V.mesa!2593552472*[]*[];
	[Pass3Xa: P3,P3SImpl2: P3S]~@Pass3Xa.mesa!2594674364*[]*[];
	[Pass3Xb: P3,P3SImpl3: P3S]~@Pass3Xb.mesa!2593552410*[]*[];
	Pass3Xc: P3~@Pass3Xc.mesa!2585778528*[]*[];
	P3Impl: P3~Pass3B+Pass3D+Pass3I+Pass3M+Pass3S+Pass3V+Pass3Xa+Pass3Xb+Pass3Xc;
	P3SImpl: P3S~P3SImpl1+P3SImpl2+P3SImpl3].Control;

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

      Pass4: CompilerUtil ~ REC [
	P4: TYPE~@P4.mesa!2603999609*[]*[];
	[Pass4: TYPE, passPtr: Pass4, Control: CompilerUtil]~@Pass4.mesa!2582484186*[]*[];
	P4Impl: P4~
	 @Pass4B.mesa!2601306169*[]*[] +
	 @Pass4D.mesa!2601495131*[]*[] +
	 @Pass4L.mesa!2592259771*[]*[] +
	 @Pass4S.mesa!2598561226*[]*[] +
	 @Pass4Ops.mesa!2598561397*[]*[] +
	 @Pass4Xa.mesa!2603999452*[]*[] +
	 @Pass4Xb.mesa!2603999678*[]*[] +
	 @Pass4Xc.mesa!2600959998*[]*[];
	ReplOps: TYPE~@ReplOps.mesa!2582486178*[]*[];
	ReplOpsImpl: ReplOps~@ReplPack.mesa!2591830934*[]*[]
	].Control;

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

       -- architecture definitions
	Mopcodes: TYPE~@Mopcodes.bcd!636766e29fc3[];
	MiscAlpha: TYPE~@MiscAlpha.bcd!6365802eaa5f[];
	SDDefs: TYPE~@SDDefs.bcd!63643b269e9f[];
	RTSD: TYPE~@RTSD.mesa!2569873867*[]*[];

	CodeDefs: TYPE~@CodeDefs.mesa!2584297921*[]*[];
	P5: TYPE~@P5.mesa!2584400782*[]*[];
	P5L: TYPE~@P5L.mesa!2569781625*[]*[];
	P5S: TYPE~@P5S.mesa!2556124833*[]*[];
	P5U: TYPE~@P5U.mesa!2584298094*[]*[];
	Stack: TYPE~@Stack.mesa!2582582028*[]*[];
	Counting: TYPE~@Counting.mesa!2590511737*[]*[];
	FOpCodes: TYPE~@FOpCodes.mesa!2569173585*[]*[];
	OpCodeParams: TYPE~@OpCodeParams.mesa!2533681227*[]*[];
	OpTableDefs: TYPE~@OpTableDefs.mesa!2582580330*[]*[];
	[Code: TYPE, CPtr: Code, Control: CompilerUtil]~@Code.mesa!2582580523*[]*[];
	P5UImpl: P5U~@CgenUtil.mesa!2588523021*[]*[];
	[CodeDefsImpl2: CodeDefs, P5Impl1: P5]~@Temp.mesa!2582583348*[]*[];
	[VarUtils: P5L, CodeDefsImpl3: CodeDefs]~@VarUtils.mesa!2582581665*[]*[];
	[VarBasics: P5L, CodeDefsImpl4: CodeDefs]~@VarBasics.mesa!2588523156*[]*[];
	[VarMove: P5L, CodeDefsImpl5: CodeDefs]~@VarMove.mesa!2582583377*[]*[];
	P5LImpl: P5L~VarBasics+VarMove+VarUtils;
	[P5Impl2: P5, P5SImpl1: P5S]~@Driver.mesa!2582581951*[]*[];
	OpTableDefsImpl: OpTableDefs~@OpTable.mesa!2598476783*[]*[];
	P5Impl3: P5~@FOpTable.mesa!2582582203*[]*[];
	[CodeDefsImpl7: CodeDefs, P5SImpl2: P5S]~@Address.mesa!2584481069*[]*[];
	StackImpl: Stack~@StackImpl.mesa!2591648263*[]*[LCPtr~CPtr];
	[CodeDefsImpl9: CodeDefs, P5Impl4: P5, P5SImpl3: P5S]~@Flow.mesa!2588523288*[]*[];
	[CodeDefsImpl10: CodeDefs, P5Impl5: P5, P5SImpl4: P5S]~@Calls.mesa!2594568816*[]*[];
	[CodeDefsImpl11: CodeDefs, P5Impl6: P5, P5SImpl5: P5S]~@Store.mesa!2584401424*[]*[];
	[CountingImpl: Counting,CodeDefsImpl12: CodeDefs]~@CountingImpl.mesa!2597694608*
	  []*[];
	[CodeDefsImpl13: CodeDefs,P5Impl7: P5]~@Constructor.mesa!2598459180*[]*[];
	[CodeDefsImpl14: CodeDefs,P5Impl8: P5]~@Expression.mesa!2603054489*[]*[];
	[CodeDefsImpl15: CodeDefs,P5Impl9: P5]~@FlowExpression.mesa!2582582187*[]*[];
	[CodeDefsImpl16: CodeDefs,P5Impl10: P5]~@Statement.mesa!2588523795*[]*[];
	[CodeDefsImpl17: CodeDefs,P5Impl11: P5]~@Selection.mesa!2588266494*[]*[];
	[CodeDefsImpl18: CodeDefs,P5Impl12: P5]~@OutCode.mesa!2588525533*[]*[];
	Final ~ REC [
	  P5F: TYPE~@P5F.mesa!2581270869*[]*[];
	  PeepholeDefs: TYPE~@PeepholeDefs.mesa!2581273018*[]*[];
	  Peephole ~ REC [
	    [CodeDefsImplP: CodeDefs,P5ImplQ: P5, PeepholeQ: PeepholeDefs]~
	      @PeepholeQ.mesa!2582582246*[]*[];
	    [P5ImplU: P5, PeepholeU: PeepholeDefs]~@PeepholeU.mesa!2582585920*[]*[];
	    PeepholeZ: PeepholeDefs~@PeepholeZ.mesa!2582586072*[]*[];
	    PeepholeDefsImpl: PeepholeDefs~PeepholeQ+PeepholeU+PeepholeZ;
	    P5ImplP: P5~P5ImplQ+P5ImplU];
	  PeepholeDefsImpl: PeepholeDefs~Peephole.PeepholeDefsImpl;
	  [CodeDefsImplF0: CodeDefs, DJumps: P5F]~@DJumps.mesa!2582581938*[]*[];
	  [CodeDefsImplF1: CodeDefs, CrossJump: P5F]~@CrossJump.mesa!2582580643*[]*[];
	  [CodeDefsImplF2: CodeDefs,P5Impl13: P5, Final: P5F]~@Final.mesa!2582581988*[]*[];
	  P5FImpl: P5F~DJumps+CrossJump+Final;
	  CodeDefsImplF: CodeDefs~
	    Peephole.CodeDefsImplP+CodeDefsImplF0+CodeDefsImplF1+CodeDefsImplF2;
	  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~@TypeStrings.mesa!2598552508*[]*[];
	TypeStringsImpl: TypeStrings~@TypeStringsImpl.mesa!2598552680*[]*[];
	RCMapOps: TYPE~@RCMapOps.mesa!2591914765*[]*[];
	RCMapOpsImpl: RCMapOps~@RCMapBuilderImpl.mesa!2594744304*[]*[];
	ObjectOut: CompilerUtil~@ObjectOut.mesa!2600962053*[]*[]
	].ObjectOut;

      --CBinary: TYPE~@CBinary.mesa!2465269358*[]*[];
      CBinary: TYPE~@CBinary.bcd[];
      CBinaryImpl: CBinary ~ @MesaTab.bcd[]+@ErrorTab.bcd[]+ @DebugTab.bcd[];
      CommandUtil: TYPE~@CommandUtil.mesa!2585845958*[]*[];
      CommandUtilImpl: CommandUtil~@CommandPack.mesa!2585846832*[]*[];
      FileParmOps: TYPE~@FileParmOps.mesa!2571775962*[]*[];
      FileParmOpsImpl: FileParmOps~@FileParmPack.mesa!2585852895*[]*[];
      [CompilerOpsImpl: CompilerOps, Sequencer: CompilerUtil]~
        @Sequencer.mesa!2601415671*[]*[ownSymbols~SymbolPackImplA];
      DebugTable: TYPE~@DebugTable.mesa!2550173137*[]*[];
      Debug: CompilerUtil~@Debug.mesa!2594743918*[]*[];
      CompilerUtilImpl: CompilerUtil~
        Sequencer+Pass1+Pass2+Pass3+Pass3P+Pass4+Pass5+BcdOutput+Debug;

      [ExecOpsImpl: ExecOps, TemporarySpecialExecOpsImpl: TemporarySpecialExecOps]~
	@Interface.mesa!2599085762*[]*[];
      TestC: CONTROL~@TestCompilerImpl.mesa!2582044959*[]*[]
      ]