-- SMVal.mesa
-- last edit by Satterthwaite, August 15, 1983 11:02 am
DIRECTORY
SMLoad: TYPE USING [LoadInfo],
SMOps: TYPE USING [MS],
SMProj: TYPE USING [Proj],
SMTree: TYPE Tree USING [Handle, Id, Link, Name, SonId],
SMTreeOps: TYPE --TreeOps-- USING [TM];
SMVal: CEDAR DEFINITIONS~{
OPEN Tree~~SMTree, TreeOps~~SMTreeOps;
-- types
-- LoadMod
-- stored in Ext of Apply nodes
-- where first son is an apply, describes bcd files that have been loaded
-- there is one of these per parse tree node
LoadMod: TYPE~REF LoadModRecord;
LoadModRecord: TYPE~RECORD[
proj: SMProj.Proj←NIL,
loadInfo: SMLoad.LoadInfo←NIL,
mustReplace: BOOL←FALSE]; -- => this module must be replaced in the load state
-- operations on model value trees (full evaluated only)
Binding: PROC[t: Tree.Link] RETURNS[BOOL];
BtoD: PROC[binding: Tree.Link] RETURNS[decl: Tree.Handle];
BtoG: PROC[binding: Tree.Link] RETURNS[group: Tree.Handle];
IdName: PROC[id: Tree.Id] RETURNS[Tree.Name];
IdType: PROC[t: Tree.Id] RETURNS[Tree.Link];
IdValue: PROC[id: Tree.Id] RETURNS[Tree.Link];
Select: PROC[binding: Tree.Link, index: Tree.Name] RETURNS[Tree.Link];
ValOf: PROC[t: Tree.Link] RETURNS[Tree.Link]; -- iterates IdValue for Id's
ValOfNthSon: PROC[t: Tree.Link, n: Tree.SonId] RETURNS[Tree.Link];
-- enumeration of operator nodes (evaluates Id's, suppresses multiple visits)
VisitNodes: PROC[tm: TreeOps.TM, root: Tree.Link, proc: PROC[node, parent: Tree.Link]];
ResetVisits: PROC[ms: SMOps.MS];
-- lambda decomposition
OuterBody: PROC[t: Tree.Link] RETURNS[formals, body: Tree.Link];
-- indirection through value tree to get/set ext from parse tree
GetExtFromParse: PROC[link: Tree.Link] RETURNS[Tree.Link];
PutExtInParse: PROC[link: Tree.Link, ext: Tree.Link];
}.