-- BcdSymbols.Mesa
-- last edited by Satterthwaite on January 10, 1983 12:36 pm

DIRECTORY
  BcdDefs: TYPE USING [CTIndex, EXPIndex, FTIndex, IMPIndex, MTIndex],
  HashTypes: TYPE USING [HTIndex, htNull],
  Table: TYPE USING [Base, Index, Limit];

Symbols, Literals: DEFINITIONS={

  Base: TYPE~Table.Base;
  Limit: CARDINAL~Table.Limit;
    
 -- Symbols:

  -- hash table

  HTIndex: TYPE~HashTypes.HTIndex;
  htNull: HTIndex~HashTypes.htNull;

  -- semantic table

  STRecord: TYPE~RECORD [
    filename, assigned: BOOL,
    hti: HTIndex,
    imported, exported: BOOL,
    link: STIndex,
    impi: BcdDefs.IMPIndex,
    impgfi: CARDINAL,
    body: SELECT type: * FROM
      unknown => [],
      local => [
	map: STMap,
	info: Table.Index, -- Tree.Index,
	context: CXIndex],
      external => [
	map: STMap,
	pointer: SELECT ptype: * FROM
	  instance => [sti: STIndex],
	  file => [fti: BcdDefs.FTIndex],
	  ENDCASE]
      ENDCASE];

  STIndex: TYPE~Base RELATIVE POINTER[0..Limit) TO STRecord;
  stNull: STIndex~STIndex.LAST;

  -- to share proto- modules
  ISEIndex, SEIndex: TYPE~STIndex;

  STMap: TYPE~RECORD [
    SELECT type: * FROM
      unknown => [],
      config => [cti: BcdDefs.CTIndex],
      module => [mti: BcdDefs.MTIndex],
      interface => [expi: BcdDefs.EXPIndex]
      ENDCASE];

  -- Context Table

  CXRecord: TYPE~RECORD [link: STIndex];

  CXIndex: TYPE~Base RELATIVE POINTER[0..Limit) TO CXRecord;
  cxNull: CXIndex~CXIndex.LAST;

 -- Literals: (to share proto- modules)
  
  LitIndex: TYPE~HashTypes.HTIndex;
  
  }.