-- file A3.mesa
-- last modified by Satterthwaite, March 22, 1983 2:55 pm

DIRECTORY
  Alloc: TYPE USING [Notifier],
  Symbols: TYPE USING [SEIndex, 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 [CSEIndex] RETURNS [LhsMode];
  AssignableType: PROC [type: CSEIndex, safe: BOOL] RETURNS [BOOL];
  Bundling: PROC [CSEIndex] RETURNS [CARDINAL];
  CanonicalType: PROC [CSEIndex] RETURNS [CSEIndex];
  Default: PROC [SEIndex] RETURNS [DefaultForm];
  DefaultInit: PROC [SEIndex] RETURNS [Tree.Link];
  IdentifiedType: PROC [CSEIndex] RETURNS [BOOL];
  IndexType: PROC [SEIndex] RETURNS [BOOL];
  MarkedType: PROC [CSEIndex] RETURNS [CSEIndex];
  NewableType: PROC [SEIndex] RETURNS [BOOL];
  NullableType: PROC [SEIndex] RETURNS [BOOL];
  OrderedType: PROC [SEIndex] RETURNS [BOOL];
  PermanentType: PROC [SEIndex] RETURNS [BOOL];
  TargetType: PROC [CSEIndex] RETURNS [CSEIndex];
  Unbundle: PROC [RecordSEIndex] RETURNS [CSEIndex];
  VarType: PROC [type: SEIndex] RETURNS [BOOL];
  Voidable: PROC [SEIndex] RETURNS [BOOL];

-- 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 [SEIndex];
  VoidItem: PROC [Tree.Link] RETURNS [BOOL];

  }.