-- ThreeC4PrimImplDefs.mesa: October 18, 1985 10:24:58 am PDT -- Sturgis, November 4, 1985 5:24:35 pm PST -- Shoup, June 23, 1986 10:07:04 am PDT DIRECTORY ThreeC4BaseDecl1Def USING[FileSeqNode, IdentifierNode, IntegerNode, MesaCodeNode, NameNode, NameListNode, TypeNode, TypeListNode], ThreeC4BaseDecl2Def USING[ContextNode, FcnDefGraphNode], ThreeC4BasicAbTypesDef USING[WholeFileNode], IO USING[STREAM], Rope USING[ROPE]; ThreeC4PrimImplDefs: CEDAR DEFINITIONS = BEGIN OPEN ThreeC4BaseDecl1Def, ThreeC4BaseDecl2Def, ThreeC4BasicAbTypesDef; -- these first items are for non functional users, e.g. the driver -- the following items are for intercommunication between the different prim impl files -- first some from ThreeC4PrimImpl1 GetIntegerData: PUBLIC PROC[IntegerNode] RETURNS[INT]; GetNameCodeText: PROC[NameNode] RETURNS[Rope.ROPE]; GenNames: PROC[NameListNode, PROC[NameNode]]; GenTypeList: PROC[TypeListNode, PROC[TypeNode]]; GenNameTypePairs: PROC[NameListNode, TypeListNode, PROC[NameNode, TypeNode]]; GetNameIds: PROC[NameNode] RETURNS[id1, id2: IdentifierNode]; BuildType: PROC[REF ANY] RETURNS[TypeNode]; GetTypeInfo: PROC[TypeNode] RETURNS[REF ANY]; CopyTypeList: PROC[TypeListNode] RETURNS[TypeListNode]; EqualNames: PROC[NameNode, NameNode] RETURNS[BOOLEAN]; GetNameInfo: PROC[NameNode] RETURNS[text: Rope.ROPE, key: INT]; ShowName: PROC[name: NameNode, on: IO.STREAM]; ShowNameList: PROC[nameList: NameListNode, on: IO.STREAM]; ShowNamePosition: PROC[name: NameNode, on: IO.STREAM]; PutNameR: PROC[name: NameNode] RETURNS[Rope.ROPE]; PrintError: PROC[m1, m2, m3, m4, m5: Rope.ROPE _ NIL]; PrintBadName: PUBLIC PROC[name: NameNode, m1, m2, m3, m4, m5: Rope.ROPE _ NIL]; UnrecoveredError: ERROR; BuildErrorName: PROC RETURNS [NameNode]; IsErrorName: PROC [NameNode] RETURNS [BOOLEAN]; BuildErrorNameList: PROC RETURNS [NameListNode]; IsErrorNameList: PROC [NameListNode] RETURNS [BOOLEAN]; BuildErrorTypeList: PROC RETURNS [TypeListNode]; IsErrorTypeList: PROC [TypeListNode] RETURNS [BOOLEAN]; GetGlobalEnv: PROC RETURNS [GlobalEnvHandle]; -- then some from ThreeC4PrimImpl2 RopeFromCode: PROC[MesaCodeNode] RETURNS[Rope.ROPE]; ShowCode: PROC[code: MesaCodeNode, on: IO.STREAM]; WriteFiles: PROC[FileSeqNode, Rope.ROPE, IO.STREAM]; -- then some from ThreeC4PrimImpl3 GetTypeCodeName: PROC[TypeNode] RETURNS[MesaCodeNode]; RecordParseTree: PROC[ContextNode, NameNode, WholeFileNode] RETURNS[ContextNode]; BuildErrorInfo: PROC RETURNS [REF ANY]; BuildErrorType: PROC RETURNS [TypeNode]; IsErrorType: PROC [TypeNode] RETURNS [BOOLEAN]; EqualTypes: PROC[TypeNode, TypeNode] RETURNS[BOOLEAN]; -- then some from ThreeC4PrimImpl4 HashTable: TYPE = REF HashTableBody; HashTableBody: TYPE; CreateHashTable: PROC[CARDINAL] RETURNS[HashTable]; MakeEntry: PROC[HashTable, NameNode, REF ANY]; FindExistingEntry: PROC[table: HashTable, name: NameNode] RETURNS[REF ANY]; FindEntry: PROC[table: HashTable, name: NameNode] RETURNS[REF ANY]; EnumerateHashTable: PROC[table: HashTable, for: PROC[info: REF ANY, name: NameNode]]; -- finally from ThreeC4PrimImpl5 SetMode: PROC[targetFilesNamePrefix: Rope.ROPE, sourceFilesNameSuffix: Rope.ROPE]; ReadModeInfo: PROC RETURNS[ targetFilesNamePrefix: Rope.ROPE, sourceFilesNameSuffix: Rope.ROPE]; ClearMode: PROC; ReportError: PROC[msg: Rope.ROPE]; -- from ThreeC4FlowAnalImpl TearDownFcnDefGraphNode: PROC [FcnDefGraphNode] RETURNS [FcnDefGraphNode]; -- we use a global state for error recovery GlobalEnvHandle: TYPE = REF GlobalEnvRec; GlobalEnvRec: TYPE = RECORD[ errorCount: INTEGER _ 0, errorMark: INTEGER _ 0]; END.. Ê#˜J˜=J˜+J˜'J˜J˜ J˜‚Jšœ8˜8J˜,J˜J˜J˜˜)J˜LJ˜J˜CJ˜J˜J˜W˜J˜#J˜JšÏbœ(˜6Jšœ$˜3Jšœ%˜-Jš œ%˜0Jšœ=˜MJš œ3˜=Jš œ"˜+Jš œ"˜-Jš œ+˜7Jš œ,˜6Jš œ4˜?Jšœ&˜.Jš œ.˜:Jšœ&˜6Jšœ*˜2J˜J˜J˜7J˜OJ˜J˜J˜(J˜/J˜J˜0J˜7J˜J˜0J˜7J˜J˜-J˜J˜J˜"J˜Jš œ(˜4Jšœ*˜2Jš œ*˜4J˜J˜"J˜Jšœ'˜6JšœB˜QJ˜'J˜J˜(J˜/J˜J˜8J˜J˜"J˜Jš œ˜$J˜Jšœ$˜3Jš œ%˜.Jšœ:˜KJš œ:˜CJšœC˜UJ˜J˜ J˜JšœK˜Rš œ˜Jšœ'˜'Jšœ(˜(—Jš œ˜J˜Jš œ˜"J˜J˜J˜J˜JJ˜J˜J˜+J˜J˜)˜J˜J˜J˜J˜—J˜J˜J˜—J˜——…—&O