<> <> <> <<>> <> DIRECTORY IO: TYPE USING [STREAM], Rope: TYPE USING [ROPE], SMCommentTableOps: TYPE USING [CommentM], SMLDriver: TYPE USING [LS], SMTree: TYPE Tree USING [Info, Link], SMTreeOps: TYPE TreeOps USING [TM]; SMOps: CEDAR DEFINITIONS ~ { OPEN Tree~~SMTree, TreeOps~~SMTreeOps; <> <> <> <<>> <> <<>> <> <> <> <> <> MS: TYPE~REF ModelState; ModelState: TYPE~RECORD[ in: IO.STREAM_NIL, -- input stream for typeScript out: IO.STREAM_NIL, -- output stream for typeScript msgOut: IO.STREAM_NIL, -- output stream for compiler progress messages <<>> z: ZONE_NIL, -- use this zone to allocate all REFs wDir: Rope.ROPE_NIL, -- working directory for files <<>> loc: Tree.Info, -- location in source errors: BOOL_FALSE, -- cumulative error flag debugFlag: BOOL_FALSE, <<>> tree: Tree.Link_NIL, -- the root of the (source) parse tree val: Tree.Link_NIL, -- the root of the evaluated tree patches: PatchList_NIL, -- patches to leaf nodes (for file updates) <> tm: TreeOps.TM_NIL, <> comments: SMCommentTableOps.CommentM_NIL, <> ls: SMLDriver.LS_NIL ]; PatchItem: TYPE~RECORD[old, new: Tree.Link]; PatchList: TYPE~LIST OF PatchItem; <> NewModel: PROC[in, out, msgout: IO.STREAM] RETURNS[m: MS]; }.