-- file [Indigo]<Cedar>BCD>TypeStrings.mesa
-- Last Modified By: John Maxwell on  11-Aug-81 10:59:55
-- Last Modified By: Paul Rovner on  13-Aug-81  8:50:54
-- Edited by Satterthwaite, May 6, 1983 1:08 pm

DIRECTORY
	Symbols: TYPE USING [SEIndex],
	SymbolTable: TYPE USING [Base];

TypeStrings: DEFINITIONS = {

  Code: TYPE = MACHINE DEPENDENT {
    definition(200b), name, 
    record, structure, union, array, sequence, enumerated, subrange, opaque,
    countedZone, uncountedZone,
    list, relativeRef, ref, refAny, pointer, longPointer, descriptor, longDescriptor, --address--
    port, process, program, 
    type,
    nil,
    any,
    boolean,
    unspecified,
    globalFrame, localFrame,
    procedure, signal, error, --transfer-- 
    cardinal, integer, character, longInteger, longCardinal, --basic --
    string, stringBody, text, atomRec,
    mds, ordered, packed, readOnly, -- options
    real,
    paint,
    leftParen, rightParen,
  -- additons by EHS
    safeProc,
    safe,
    var,
    longUnspecified
    };        -- not yet:  code, base
  -- Code starts at 200b so that a typestring can be parsed rapidly
  -- a character in [000c..'Z] is a string name or length
  -- a character in [200b..377b] is a code
  -- the only exception is paint(8 chars), which is always proceeded by an opaque or paint code

  TypeString: TYPE = LONG STRING;

  Create: PROC[base:SymbolTable.Base, sei:Symbols.SEIndex, z:UNCOUNTED ZONE] 
    RETURNS[TypeString];
  -- will complain if all of the necessary information isn't in base
  -- ASSERTION: TypePack.Equivalent[[base1,sei1],[base2,sei2]]  
  -- IFF (Create[base1,sei1]=Create[base2,sei2])  

  }.