[ivy]<Satterthwaite>Mimosa>ProtoTreeOps.mesa!2

ProtoTreeOps.mesa
Copyright © 1985 by Xerox Corporation. All rights reserved.
Satterthwaite, June 6, 1986 1:18:22 pm PDT
Paul Rovner, September 7, 1983 12:14 am
Russ Atkinson (RRA) March 6, 1985 10:06:59 pm PST
DIRECTORY
Alloc: TYPE USING [Handle],
Literals: TYPE USING [LTIndex, STIndex],
SourceMap: TYPE USING [Loc],
Symbols: TYPE USING [HTIndex, ISEIndex],
Tree: TYPE USING [
AttrId, Finger, Id, Index, Info, Link, LinkRep, LinkTag, Map, NodeName, Scan, Test];
TreeOps: DEFINITIONS = {
tree construction interface
Initialize: PROC[Alloc.Handle];
Reset, Finalize: PROC;
PushTree: PROC[v: Tree.Link];
PopTree: PROC RETURNS[Tree.Link];
InsertTree: PROC[Tree.Link, CARDINAL];
ExtractTree: PROC[CARDINAL] RETURNS[Tree.Link];
MakeNode: PROC[name: Tree.NodeName, count: INTEGER] RETURNS[Tree.Link];
MakeList: PROC[size: INTEGER] RETURNS[Tree.Link];
PushNode: PROC[name: Tree.NodeName, count: INTEGER];
PushList, PushProperList: PROC[size: INTEGER];
PushHash: PROC[hti: Symbols.HTIndex];
PushSe: PROC[sei: Symbols.ISEIndex];
PushLit: PROC[lti: Literals.LTIndex];
PushString: PROC[lti: Literals.STIndex];
SetAttr: PROC[attr: Tree.AttrId, value: BOOL];
SetInfo: PROC[info: Tree.Info];
tree deallocation
FreeNode: PROC[node: Tree.Index];
FreeTree: PROC[t: Tree.Link] RETURNS[Tree.Link];
tree attributes
GetTag: PROC[t: Tree.Link] RETURNS[Tree.LinkTag] = INLINE {
RETURN[VAL[LOOPHOLE[t, Tree.LinkRep].tag]]};
GetHash: PROC[t: Tree.Link] RETURNS[Symbols.HTIndex];
GetNode: PROC[t: Tree.Link] RETURNS[Tree.Index];
GetSe: PROC[t: Tree.Link] RETURNS[Symbols.ISEIndex];
GetLit: PROC[t: Tree.Link] RETURNS[Literals.LTIndex];
GetStr: PROC[t: Tree.Link] RETURNS[Literals.STIndex];
NthSon: PROC[t: Tree.Link, n: CARDINAL] RETURNS[Tree.Link];
OpName: PROC[t: Tree.Link] RETURNS[Tree.NodeName];
GetAttr: PROC[t: Tree.Link, attr: Tree.AttrId] RETURNS[BOOL];
PutAttr: PROC[t: Tree.Link, attr: Tree.AttrId, value: BOOL];
GetInfo: PROC[t: Tree.Link] RETURNS[Tree.Info];
PutInfo: PROC[t: Tree.Link, value: Tree.Info];
ToCard: PROC[card: Tree.Info] RETURNS[CARD] = INLINE {
RETURN[LOOPHOLE[card, CARD]]};
ToLoc: PROC[loc: Tree.Info] RETURNS[SourceMap.Loc] = INLINE {
RETURN[LOOPHOLE[loc, SourceMap.Loc]]};
FromCard: PROC[card: CARD] RETURNS[Tree.Info] = INLINE {
RETURN[LOOPHOLE[card, Tree.Info]]};
FromLoc: PROC[loc: SourceMap.Loc] RETURNS[Tree.Info] = INLINE {
RETURN[LOOPHOLE[loc, Tree.Info]]};
Shared: PROC[t: Tree.Link] RETURNS[BOOL];
MarkShared: PROC[t: Tree.Link, shared: BOOL];
tree manipulation
ScanSons: PROC[root: Tree.Link, action: Tree.Scan];
UpdateLeaves: PROC[root: Tree.Link, map: Tree.Map] RETURNS[v: Tree.Link];
list testing
ListLength: PROC[t: Tree.Link] RETURNS[CARDINAL];
ListHead: PROC[t: Tree.Link] RETURNS[Tree.Link];
ListTail: PROC[t: Tree.Link] RETURNS[Tree.Link];
list manipulation
ScanList: PROC[root: Tree.Link, action: Tree.Scan];
SearchList: PROC[root: Tree.Link, test: Tree.Test];
ReverseScanList: PROC[root: Tree.Link, action: Tree.Scan];
UpdateList: PROC[root: Tree.Link, map: Tree.Map] RETURNS[Tree.Link];
ReverseUpdateList: PROC[root: Tree.Link, map: Tree.Map] RETURNS[Tree.Link];
cross-table tree copying
CopyTree: PROC[root: Tree.Id, map: Tree.Map] RETURNS[v: Tree.Link];
IdentityMap: Tree.Map;
NodeSize: PROC[baseP: Tree.Finger, node: Tree.Index] RETURNS[CARDINAL];
}.