
{Deck: CYDDSYM

{This deck contains the type definition for the symbol table
{ interface to CID180.

{*callc cydentr
{*callc cydimdp
{*callc cydglph
{*callc cydkind
{*callc lldobmd

{ Symbols for a procedure or module appear sequentially in an array. The
{ last symbol for a procedure or module is indicated by the field
{ 'end_of_chain' set to TRUE.

  TYPE
    cyt$debug_symbol_table_item = record
      symbol_name: pmt$program_name,
      end_of_chain: boolean, {End of symbols for procedure or module = TRUE}
      symtab_no: symbol_no,
      case symbol_type: entry_kinds of
      = int_kind, bool_kind, char_kind, real_kind, longreal_kind, cell_kind =
        ,
      = var_kind =
        var_type: symbol_no,
        var_length: ost$segment_length, {length in bytes}
        base: base_type,
        var_section_ordinal: llt$section_ordinal, {only for base=static_base}
        var_offset: ost$segment_length,
        indirectly_referenced: boolean,
        var_is_parameter: boolean,
      = cons_kind =
        cons_type: symbol_no,
        cons_length_type: (short_constant_type, long_constant_type),
        cons_value: integer_range, {legitimate value only for
              { short_constant_type}
      = label_kind =
        line_no: line_number_range,
      = ordinal_kind = {Immediately followed by cons_kind entries}
        last_const: symbol_no,
        upper_bound: 0 .. 4095,
      = subrange_kind =
        subtype: symbol_no,
        low_value_type: len_kinds,
        high_value_type: len_kinds,
        low_value: integer_range,
        high_value: integer_range,
      = proc_kind =
        lexical_level: 0 .. 255,
        symbol_list: symbol_no, {points to parameters + local declarations}
        proc_section_ordinal: llt$section_ordinal,
        proc_offset: ost$segment_length,
        proc_length: ost$segment_length,
        parent_proc: symbol_no,
        return_type: symbol_no,
      = pointer_kind =
        ptr_type: symbol_no,
        ptr_object_length: ost$segment_length, {length in bytes}
      = set_kind =
        set_element_type: symbol_no,
        set_len: 0 .. 7fff(16),
      = string_kind =
        len_type: len_kinds,
        string_len: strlenrange,
      = array_kind =
        array_binding: bindkinds,
        array_packing: packattrs,
        length_is_bits: boolean,
        index_type: symbol_no,
        array_element_type: symbol_no,
        element_length: ost$segment_length,
      = record_kind =
        record_binding: bindkinds,
        record_packing: packattrs,
        variation_flag: boolean,
        first_field: symbol_no,
        record_length: ost$segment_length,
        selector: symbol_no,
      = field_kind =
        field_offset: machine_addr_in_bits_type,
        field_length: machine_addr_in_bits_type,
        unit_addressed: boolean, {bytes if true, bits if false}
        field_type: symbol_no,
        next_field: symbol_no,
      = selector_kind =
        variation: symbol_no,
        next_selector: symbol_no,
        low_selector: integer_range,
        high_selector: integer_range,
      = heap_kind =
        ,
      = seq_kind =
        ,
      = bound_vrec_kind =
        bound_type: symbol_no,
      = rel_ptr_kind =
        parent_type: symbol_no,
        object_type: symbol_no,
        rel_ptr_object_length: ost$segment_length, {length in bytes}
      casend
    recend,

    cyt$debug_symbol_table = record
      original_name: pmt$program_name,
      language: llt$module_generator,
      optimization_level: 0 .. 255,
      version: string (4), { = cyc$debug_table_version }
      module_symbol_list: symbol_no, {points to module level symbols}
      number_of_symbols: symbol_no,
      item: array [0 .. * ] of cyt$debug_symbol_table_item,
    recend;

  CONST
    cyc$debug_table_version = 'V0.1';

?? SKIP := 5 ??
*copyc cyd$symbol_table_entry_kinds
*copyc cyd$machine_definitions
*copyc cyd$global_phase_definitions
*copyc cyd$binding_kind_definitions
*copyc llt$object_module
