
  TYPE
    llt$debug_symbol_table = record
      original_module_name: pmt$program_name,
      language: llt$module_generator,
      optimization_level: llt$optimization_level,
      version: llt$symbol_table_version,
      first_symbol_for_module: llt$symbol_number,
      number_of_items: llt$symbol_number,
      attributes: llt$symbol_table_attributes,
      item: array [1 .. * ] of llt$symbol_table_item,
    recend,

    llt$symbol_table_item = record
      symbol_name: pmt$program_name,
      symbol_number: llt$symbol_number,
      end_of_chain: boolean,
      case symbol_kind: llt$entry_kind of
      = llc$integer_kind, llc$boolean_kind, llc$char_kind, llc$real_kind,
        llc$longreal_kind, llc$cell_kind, llc$complex_kind,
          llc$ftn_logical_kind, llc$ftn_boolean_kind,
          llc$shortreal_kind, llc$ftn_subprogram_name, llc$ftn_character_kind,
          llc$typeless_kind, llc$filename_kind, llc$bdp_pdu, llc$bdp_pdulsd,
          llc$bdp_pds, llc$bdp_pdslsd, llc$bdp_udu, llc$bdp_udtsch,
          llc$bdp_udtss, llc$bdp_bu, llc$bdp_tpds, llc$bdp_tpdslsd,
          llc$bdp_tbu, llc$bdp_tbs, llc$bdp_a, llc$cobol_justified,
          llc$cobol_index_data_item, llc$cobol_index_name, llc$bdp_udlsch,
          llc$bdp_udlss, llc$cobol_numeric_edited, llc$cobol_a_edited,
          llc$unsigned_integer_kind =
        ,
      = llc$bit_kind =
        bit_offset: llt$bit_offset,
      = llc$var_kind =
        var_type: llt$symbol_number,
        var_length: llt$section_length,
        var_base: llt$base_type,
        var_section_ordinal: llt$section_ordinal,
        var_offset: llt$section_address_range,
        var_attributes: llt$var_attributes,
        var_containing_symbol: llt$symbol_number,
        var_point_location: llt$point_location,
      = llc$cobol_array_kind =
        cobol_array_element_type: llt$entry_kind,
        cobol_subscript_count: llt$subscript_range,
        max_cobol_subscript_value: llt$max_cobol_subscript_value,
        occurrence_length: llt$section_length,
      = llc$constant_kind =
        constant_type: llt$symbol_number,
        constant_length: llt$section_length,
        case constant_kind: llt$constant_kind of
        = llc$short_constant =
          short_constant_value: llt$short_constant_value,
        = llc$medium_constant =
          medium_constant_value: llt$medium_constant_value,
        = llc$long_constant =
          constant_section_ordinal: llt$section_ordinal,
          constant_offset: llt$section_offset,
        casend,
      = llc$label_kind =
        label_attributes: llt$label_attributes,
        label_section_ordinal: llt$section_ordinal,
        label_offset: llt$section_address_range,
        label_scope: llt$section_length,
        label_containing_symbol: llt$symbol_number,
      = llc$ordinal_kind =
        last_constant: llt$symbol_number,
        ordinal_upper_bound: llt$ordinal_upper_bound,
      = llc$subrange_kind =
        subtype: llt$symbol_number,
        low_value_type: llt$length_kind,
        high_value_type: llt$length_kind,
        low_value: integer,
        high_value: integer,
      = llc$proc_kind =
        proc_lexical_level: llt$lexical_level,
        first_symbol_for_proc: llt$symbol_number,
        proc_section_ordinal: llt$section_ordinal,
        proc_offset: llt$section_offset,
        proc_length: llt$section_length,
        proc_parent: llt$symbol_number,
        proc_attributes: llt$proc_attributes,
        proc_return_type: llt$symbol_number,
        proc_return_length: llt$string_length_range,
      = llc$pointer_kind =
        ptr_type: llt$symbol_number,
        ptr_object_length: llt$section_length,
      = llc$set_kind =
        set_element_type: llt$symbol_number,
        set_length: llt$set_length,
      = llc$string_kind =
        string_length_type: llt$length_kind,
        string_length: llt$string_length_range,
      = llc$cybil_array_kind =
        cybil_array_binding: llt$binding_kind,
        cybil_array_packing: llt$packing_attribute,
        cybil_array_attributes: llt$cybil_array_attributes,
        cybil_index_type: llt$symbol_number,
        cybil_array_element_type: llt$symbol_number,
        cybil_array_element_length: llt$section_length_in_bits,
      = llc$record_kind =
        record_binding: llt$binding_kind,
        record_packing: llt$packing_attribute,
        record_attributes: llt$record_attributes,
        record_first_field: llt$symbol_number,
        record_length: llt$section_length_in_bits,
        record_selector: llt$symbol_number,
      = llc$field_kind =
        field_offset: llt$section_length_in_bits,
        field_length: llt$section_length_in_bits,
        field_attributes: llt$field_attributes,
        field_type: llt$symbol_number,
        next_field: llt$symbol_number,
      = llc$selector_kind =
        variation: llt$symbol_number,
        next_selector: llt$symbol_number,
        low_selector: integer,
        high_selector: integer,
      = llc$heap_kind =
        ,
      = llc$seq_kind =
        ,
      = llc$bound_vrec_kind =
        bound_type: llt$symbol_number,
      = llc$rel_ptr_kind =
        parent_type: llt$symbol_number,
        object_type: llt$symbol_number,
        rel_ptr_object_length: llt$section_length,
      = llc$ftn_array_kind =
        ftn_array_element_type: llt$symbol_number,
        ftn_array_element_length: llt$string_length_range,
        ftn_array_base: llt$base_type,
        ftn_array_section_ordinal: llt$section_ordinal,
        ftn_array_offset: llt$section_offset,
        ftn_array_attributes: llt$ftn_array_attributes,
        dimension_info_section_ordinal: llt$section_ordinal,
        dimension_info_offset: llt$section_offset,
      = llc$namelist_group_kind =
        namelist_info_section_ordinal: llt$section_ordinal,
        namelist_info_offset: llt$section_offset,
        namelist_attributes: llt$ftn_namelist_attributes,
      = llc$equated_label =
        first_equated_symbol: llt$symbol_number,
      = llc$external_equate =
        operation: llt$external_arithmetic_oper,
        operand: integer,
      = llc$basic_array_kind =
        basic_array_element_type: llt$symbol_number,
      = llc$pascal_conf_array_kind =
        conf_array_packing: llt$packing_attribute,
        conf_array_attributes: llt$cybil_array_attributes,
        conf_array_lower_bound: llt$symbol_number,
        conf_array_upper_bound: llt$symbol_number,
        conf_array_element_kind: llt$symbol_number,
        conf_array_element_length: llt$section_length_in_bits,
      = llc$pascal_file_kind =
        buffer_type: llt$symbol_number,
      = llc$pascal_with_kind =
        with_first_symbol: llt$symbol_number,
        with_section_ordinal: llt$section_ordinal,
        with_offset: llt$section_offset,
        with_length: llt$section_length,
        with_parent: llt$symbol_number,
      casend
    recend,

    llt$entry_kind = (llc$integer_kind, llc$boolean_kind, llc$char_kind,
      llc$real_kind, llc$longreal_kind, llc$cell_kind, llc$complex_kind,
      llc$ftn_logical_kind, llc$ftn_boolean_kind, llc$bit_kind,
      llc$shortreal_kind, llc$ftn_subprogram_name, llc$ftn_character_kind,
      llc$typeless_kind, llc$filename_kind, llc$var_kind, llc$cobol_array_kind,
      llc$constant_kind, llc$label_kind, llc$ordinal_kind, llc$subrange_kind,
      llc$proc_kind, llc$pointer_kind, llc$set_kind, llc$string_kind,
      llc$cybil_array_kind, llc$record_kind, llc$field_kind, llc$selector_kind,
      llc$heap_kind, llc$seq_kind, llc$bound_vrec_kind, llc$rel_ptr_kind,
      llc$ftn_array_kind, llc$namelist_group_kind, llc$bdp_pdu, llc$bdp_pdulsd,
      llc$bdp_pds, llc$bdp_pdslsd, llc$bdp_udu, llc$bdp_udtsch, llc$bdp_udtss,
      llc$bdp_bu, llc$bdp_tpds, llc$bdp_tpdslsd, llc$bdp_tbu, llc$bdp_tbs,
      llc$bdp_a, llc$cobol_justified, llc$cobol_index_data_item,
      llc$cobol_index_name, llc$bdp_udlsch, llc$bdp_udlss,
      llc$cobol_numeric_edited, llc$cobol_a_edited, llc$equated_label,
      llc$external_equate, llc$basic_array_kind,
      llc$pascal_conf_array_kind, llc$pascal_file_kind, llc$pascal_with_kind,
      llc$unsigned_integer_kind),

    llt$base_type = (llc$null_base, llc$static_base, llc$constant_base,
      llc$stack_frame_base, llc$parm_list_base, llc$xref_base,
      llc$register_base),

    llt$lexical_level = 0 .. llc$max_lexical_level,

    llt$point_location = packed record
      value: - 18 .. 18,
    recend,

    llt$subscript_range = 0 .. 48,

    llt$ordinal_upper_bound = 0 .. llc$max_ordinal,

    llt$var_attribute = (llc$var_qualifier_needed,
      llc$var_indirectly_referenced, llc$var_is_dummy_argument,
      llc$non_source_variable, llc$var_attribute_spare5,
      llc$var_attribute_spare6, llc$var_attribute_spare7,
      llc$var_attribute_spare8),

    llt$var_attributes = set of llt$var_attribute,

    llt$label_attribute = (llc$label_qualifier_needed, llc$cobol_section_name,
      llc$cobol_paragraph_name, llc$no_object_code_for_label,
      llc$non_source_label, llc$label_attribute_spare6,
      llc$label_attribute_spare7, llc$label_attribute_spare8),

    llt$label_attributes = set of llt$label_attribute,

    llt$symbol_number = 0 .. llc$max_symbol_number,


    llt$length_kind = (llc$short_length, llc$long_length,
      llc$variable_length, llc$adaptable_length, llc$dynamic_length,
      llc$indefinite_length, llc$null_terminator_length),

    llt$packing_attribute = (llc$packed, llc$unpacked, llc$not_packed),

    llt$binding_kind = (llc$fixed_binding, llc$variable_spare_binding,
      llc$adaptable_binding, llc$variant_binding),

    llt$string_length_range = 0 .. llc$max_string_length,

    llt$set_length = 0 .. llc$max_set_length,

    llt$symbol_table_version = string (4),

    llt$proc_attribute = (llc$multiple_entry_points,
      llc$proc_uses_outer_level_stack,
      llc$proc_attribute_spare3, llc$proc_attribute_spare4,
      llc$proc_attribute_spare5, llc$proc_attribute_spare6,
      llc$proc_attribute_spare7, llc$proc_attribute_spare8),

    llt$cybil_array_attribute = (llc$cybil_array_is_bits,
      llc$cyb_array_attribute_spare2, llc$cyb_array_attribute_spare3,
      llc$cyb_array_attribute_spare4, llc$cyb_array_attribute_spare5,
      llc$cyb_array_attribute_spare6, llc$cyb_array_attribute_spare7,
      llc$cyb_array_attribute_spare8),

    llt$cybil_array_attributes = set of llt$cybil_array_attribute,

    llt$record_attribute = (llc$record_variation, llc$record_attribute_spare2,
      llc$record_attribute_spare3, llc$record_attribute_spare4,
      llc$record_attribute_spare5, llc$record_attribute_spare6,
      llc$record_attribute_spare7, llc$record_attribute_spare8),

    llt$record_attributes = set of llt$record_attribute,

    llt$field_attribute = (llc$field_is_byte_addressable,
      llc$field_attribute_spare2, llc$field_attribute_spare3,
      llc$field_attribute_spare4, llc$field_attribute_spare5,
      llc$field_attribute_spare6, llc$field_attribute_spare7,
      llc$field_attribute_spare8),

    llt$field_attributes = set of llt$field_attribute,

    llt$ftn_array_attribute = (llc$ftn_array_is_parameter,
      llc$ftn_storage_is_columnwise, llc$ftn_array_adjustable,
      llc$ftn_array_assumed_size, llc$ftn_array_assumed_shape,
      llc$ftn_array_indirect_accessed, llc$cdc_ftn_dimension_desc,
      llc$ftn_array_attribute_spare8),

    llt$ftn_array_attributes = set of llt$ftn_array_attribute,
    llt$proc_attributes = set of llt$proc_attribute,

    llt$constant_kind = (llc$short_constant, llc$medium_constant,
      llc$long_constant),
    llt$short_constant_value = record
      case kind: llt$entry_kind of
      = llc$boolean_kind, llc$ftn_logical_kind =
        boolean_value: boolean,
      = llc$char_kind =
        char_value: char,
      = llc$bit_kind =
        bit_value: 0 .. 1,
      = llc$integer_kind =
        integer_value: - 8000(16) .. 7fff(16),
      casend,
    recend,

    llt$medium_constant_value = record
      case kind: llt$entry_kind of
      = llc$integer_kind, llc$ftn_boolean_kind =
        integer_value: integer,
      = llc$real_kind =
        real_value: real,
      = llc$shortreal_kind =
        shortreal_value: - 7fffffff(16) .. 7fffffff(16),
      casend,
    recend,

    llt$symbol_table_attribute = (llc$symbol_number_is_index,
      llc$language_is_case_sensitive, llc$sym_table_attribute_spare3,
      llc$sym_table_attribute_spare4, llc$sym_table_attribute_spare5,
      llc$sym_table_attribute_spare6, llc$sym_table_attribute_spare7,
      llc$sym_table_attribute_spare8),

    llt$symbol_table_attributes = set of llt$symbol_table_attribute,

    llt$max_cobol_subscript_value = 0 .. llc$max_section_offset,

    llt$external_arithmetic_oper = (llc$external_no_operation,
      llc$external_addition, llc$external_subtraction,
      llc$external_multiplication, llc$external_division),

    llt$bit_offset = 0 .. llc$max_bit_offset,

    llt$ftn_namelist_attribute = (llc$cdc_ftn_namelist_descriptor,
      llc$namelist_descriptor_spare2, llc$namelist_descriptor_spare3,
      llc$namelist_descriptor_spare4, llc$namelist_descriptor_spare5,
      llc$namelist_descriptor_spare6, llc$namelist_descriptor_spare7,
      llc$namelist_descriptor_spare8),

    llt$ftn_namelist_attributes = set of llt$ftn_namelist_attribute;

  CONST
    llc$symbol_table_version = 'V1.1',
    llc$max_lexical_level = 255,
    llc$max_ordinal = 65535,
    llc$max_symbol_number = 65535,
    llc$max_string_length = 65535,
    llc$max_set_length = 65535,
    llc$max_bit_offset = 7;

*copyc PMT$PROGRAM_NAME
*copyc llt$section_address
*copyc LLT$MODULE_GENERATOR
*copyc llt$optimization_level
