
<<SMVal.mesa>>
<<Copyright  1985 by Xerox Corporation.  All rights reserved.>>
<<last edit by Satterthwaite, May 12, 1986 11:56:34 am PDT>>

DIRECTORY
SMOps: TYPE USING [MS],
SMTree: TYPE Tree USING [Handle, Id, Link, Name, SonId],
SMTreeOps: TYPE TreeOps USING [TM];

SMVal: CEDAR DEFINITIONS~{
OPEN Tree~~SMTree, TreeOps~~SMTreeOps;

<<operations on model value trees (fully 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[id: 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];

}.

