INTERFACEM3Unit ; IMPORT IntRefTbl, M3ID, M3Loc, M3Path, Mx; TYPE Kind = M3Path.Kind; TYPE T = REF RECORD next : T := NIL; next_synonym : T := NIL; (* synonyms in the map *) name : M3ID.T := M3ID.NoID; loc : M3Loc.T := NIL; library : T := NIL; (* containing library unit *) object : TEXT := NIL; link_info : Mx.Unit := NIL; exporters : Exporter:= NIL; kind : Kind := Kind.Unknown; hidden : BOOLEAN := FALSE; imported : BOOLEAN := FALSE; compiling : BOOLEAN := FALSE; stale_src : BOOLEAN := FALSE; missing_info : BOOLEAN := FALSE; shared : BOOLEAN := FALSE; debug : BOOLEAN := FALSE; optimize : BOOLEAN := FALSE; (* for determining the compilation order *) low_link : INTEGER := 0; class : INTEGER := 0; END; TYPE Exporter = REF RECORD next : Exporter := NIL; name : M3ID.T := M3ID.NoID; unit : T := NIL; used : BOOLEAN := FALSE; verified : BOOLEAN := FALSE; END; TYPE TList = REF RECORD head : T; tail : TList; END; TYPE Set = RECORD map : IntRefTbl.T := NIL; head : T := NIL; tail : T := NIL; END; PROCEDURE New (nm: M3ID.T; k: Kind; loc: M3Loc.T; hidden, imported: BOOLEAN): T; PROCEDURE InitSet (VAR x: Set); PROCEDURE Add (VAR x: Set; t: T); PROCEDURE AddNew (VAR x: Set; nm: M3ID.T; k: Kind; loc: M3Loc.T; hidden, imported: BOOLEAN);
== Add (x, New (nm, k, loc, hidden, imported))
PROCEDURE Get (READONLY x: Set; nm: M3ID.T; k: Kind): T;
Returns the unit inx
with matching name and kind. Otherwise,NIL
.
PROCEDURE FileName (t: T): TEXT;
Returns t.name
with its proper host prefix and extension attached
PROCEDURE FullPath (t: T): TEXT;
Returns a full path to t
on the host.
END M3Unit.