-- file A3.mesa
-- last modified by Satterthwaite, March 24, 1983 1:03 pm

DIRECTORY
  Alloc: TYPE USING [Notifier],
  Symbols: TYPE USING [Type, CSEIndex, RecordSEIndex, CBTIndex],
  Tree: TYPE USING [Link];

A3: DEFINITIONS = {
  OPEN Symbols;

-- types

  DefaultForm: TYPE = {none, void, nonVoid};
  LhsMode: TYPE = {none, uncounted, counted};
  LifeTime: TYPE = {global, local, unknown};
  
-- notifiers

  TreeNotify, TypeNotify: Alloc.Notifier;

-- type attributes

  AccessMode: PUBLIC PROC [Type] RETURNS [LhsMode];
  AssignableType: PROC [type: Type, safe: BOOL] RETURNS [BOOL];
  CanonicalType: PROC [Type] RETURNS [CSEIndex];
  Default: PROC [Type] RETURNS [DefaultForm];
  DefaultInit: PROC [Type] RETURNS [Tree.Link];
  IdentifiedType: PROC [Type] RETURNS [BOOL];
  IndexType: PROC [Type] RETURNS [BOOL];
  MarkedType: PROC [Type] RETURNS [CSEIndex];
  NewableType: PROC [Type] RETURNS [BOOL];
  NullableType: PROC [Type] RETURNS [BOOL];
  OrderedType: PROC [Type] RETURNS [BOOL];
  PermanentType: PROC [Type] RETURNS [BOOL];
  TargetType: PROC [Type] RETURNS [CSEIndex];
  Unwrap: PROC [RecordSEIndex] RETURNS [Type];
  VarType: PROC [Type] RETURNS [BOOL];
  Voidable: PROC [Type] RETURNS [BOOL];
  Wrappings: PROC [Type] RETURNS [NAT];

-- tree attributes
 
  BodyForTree: PROC [Tree.Link] RETURNS [CBTIndex];
  LongPath: PROC [Tree.Link] RETURNS [BOOL];
  OperandInline: PROC [Tree.Link] RETURNS [BOOL];
  OperandInternal: PROC [Tree.Link] RETURNS [BOOL];
  OperandLevel: PROC [Tree.Link] RETURNS [LifeTime];
  OperandLhs: PROC [Tree.Link] RETURNS [LhsMode];
  OperandType: PROC [Tree.Link] RETURNS [CSEIndex];
  TypeForTree: PROC [Tree.Link] RETURNS [Type];
  VoidItem: PROC [Tree.Link] RETURNS [BOOL];

  }.