-- internal declarations, part 1 TYPE __ghdl_size_type IS UNSIGNED (32); TYPE __ghdl_index_type IS UNSIGNED (32); TYPE __ghdl_i32 IS SIGNED (32); TYPE __ghdl_real IS FLOAT; TYPE __ghdl_i64 IS SIGNED (64); TYPE __ghdl_file_index IS UNSIGNED (32); TYPE __ghdl_file_index_ptr IS ACCESS __ghdl_file_index; TYPE __ghdl_char IS UNSIGNED (8); TYPE __ghdl_chararray IS ARRAY [__ghdl_index_type] OF __ghdl_char; TYPE __ghdl_char_ptr IS ACCESS __ghdl_chararray; TYPE __ghdl_char_ptr_array IS ARRAY [__ghdl_index_type] OF __ghdl_char_ptr; TYPE __ghdl_char_ptr_array_ptr IS ACCESS __ghdl_char_ptr_array; TYPE __ghdl_ptr IS ACCESS __ghdl_char; TYPE __ghdl_str_len IS RECORD len: __ghdl_index_type; str: __ghdl_char_ptr; END RECORD; TYPE __ghdl_str_len_array IS ARRAY [__ghdl_index_type] OF __ghdl_str_len; TYPE __ghdl_str_len_ptr IS ACCESS __ghdl_str_len; TYPE __ghdl_bool_type IS BOOLEAN {false, true}; TYPE __ghdl_bool_array_type IS ARRAY [__ghdl_index_type] OF __ghdl_bool_type; TYPE __ghdl_bool_array_ptr IS ACCESS __ghdl_bool_array_type; TYPE __ghdl_compare_type IS ENUM {lt, eq, gt}; TYPE __ghdl_location IS RECORD filename: __ghdl_char_ptr; line: __ghdl_i32; col: __ghdl_i32; END RECORD; TYPE __ghdl_location_ptr IS ACCESS __ghdl_location; TYPE __ghdl_dir_type IS ENUM {dir_to, dir_downto}; TYPE __ghdl_signal IS RECORD; TYPE __ghdl_signal_ptr IS ACCESS __ghdl_signal; EXTERNAL FUNCTION __ghdl_alloc ( size: __ghdl_size_type) RETURN __ghdl_ptr; EXTERNAL PROCEDURE __ghdl_program_error ( filename: __ghdl_char_ptr; line: __ghdl_i32; code: __ghdl_index_type); EXTERNAL PROCEDURE __ghdl_bound_check_failed_l1 ( filename: __ghdl_char_ptr; line: __ghdl_i32); EXTERNAL FUNCTION __ghdl_stack2_allocate ( size: __ghdl_index_type) RETURN __ghdl_ptr; EXTERNAL FUNCTION __ghdl_stack2_mark ( ) RETURN __ghdl_ptr; EXTERNAL PROCEDURE __ghdl_stack2_release ( mark: __ghdl_ptr); EXTERNAL PROCEDURE __ghdl_memcpy ( dest: __ghdl_ptr; src: __ghdl_ptr; length: __ghdl_index_type); EXTERNAL PROCEDURE __ghdl_deallocate ( OBJ: __ghdl_ptr); EXTERNAL FUNCTION __ghdl_malloc ( length: __ghdl_index_type) RETURN __ghdl_ptr; EXTERNAL FUNCTION __ghdl_malloc0 ( length: __ghdl_index_type) RETURN __ghdl_ptr; EXTERNAL FUNCTION __ghdl_text_file_elaborate ( ) RETURN __ghdl_file_index; EXTERNAL FUNCTION __ghdl_file_elaborate ( NAME: __ghdl_char_ptr) RETURN __ghdl_file_index; EXTERNAL PROCEDURE __ghdl_file_finalize ( file: __ghdl_file_index); EXTERNAL PROCEDURE __ghdl_text_file_finalize ( file: __ghdl_file_index); EXTERNAL PROCEDURE __ghdl_protected_enter ( OBJ: __ghdl_ptr); EXTERNAL PROCEDURE __ghdl_protected_leave ( OBJ: __ghdl_ptr); EXTERNAL PROCEDURE __ghdl_protected_init ( OBJ: __ghdl_ptr); EXTERNAL PROCEDURE __ghdl_protected_fini ( OBJ: __ghdl_ptr); TYPE __ghdl_rtik IS ENUM {__ghdl_rtik_top, __ghdl_rtik_library, __ghdl_rtik_package, __ghdl_rtik_package_body, __ghdl_rtik_entity, __ghdl_rtik_architecture, __ghdl_rtik_process, __ghdl_rtik_block, __ghdl_rtik_if_generate, __ghdl_rtik_case_generate, __ghdl_rtik_for_generate, __ghdl_rtik_generate_body, __ghdl_rtik_instance, __ghdl_rtik_constant, __ghdl_rtik_iterator, __ghdl_rtik_variable, __ghdl_rtik_signal, __ghdl_rtik_file, __ghdl_rtik_port, __ghdl_rtik_generic, __ghdl_rtik_alias, __ghdl_rtik_guard, __ghdl_rtik_component, __ghdl_rtik_attribute, __ghdl_rtik_type_b1, __ghdl_rtik_type_e8, __ghdl_rtik_type_e32, __ghdl_rtik_type_i32, __ghdl_rtik_type_i64, __ghdl_rtik_type_f64, __ghdl_rtik_type_p32, __ghdl_rtik_type_p64, __ghdl_rtik_type_access, __ghdl_rtik_type_array, __ghdl_rtik_type_record, __ghdl_rtik_type_file, __ghdl_rtik_subtype_scalar, __ghdl_rtik_subtype_array, __ghdl_rtik_subtype_unconstrained_array, __ghdl_rtik_subtype_record, __ghdl_rtik_subtype_access, __ghdl_rtik_type_protected, __ghdl_rtik_element, __ghdl_rtik_unit64, __ghdl_rtik_unitptr, __ghdl_rtik_attribute_transaction, __ghdl_rtik_attribute_quiet, __ghdl_rtik_attribute_stable, __ghdl_rtik_psl_assert, __ghdl_rtik_psl_cover, __ghdl_rtik_psl_endpoint, __ghdl_rtik_error}; TYPE __ghdl_rti_depth IS UNSIGNED (8); TYPE __ghdl_rti_u8 IS UNSIGNED (8); TYPE __ghdl_rti_common IS RECORD kind: __ghdl_rtik; depth: __ghdl_rti_depth; mode: __ghdl_rti_u8; max_depth: __ghdl_rti_depth; END RECORD; TYPE __ghdl_rti_access IS ACCESS __ghdl_rti_common; TYPE __ghdl_rti_array IS ARRAY [__ghdl_index_type] OF __ghdl_rti_access; TYPE __ghdl_rti_arr_acc IS ACCESS __ghdl_rti_array; TYPE __ghdl_component_link_type IS RECORD; TYPE __ghdl_component_link_acc IS ACCESS __ghdl_component_link_type; TYPE __ghdl_entity_link_type IS RECORD rti: __ghdl_rti_access; parent: __ghdl_component_link_acc; END RECORD; TYPE __ghdl_entity_link_acc IS ACCESS __ghdl_entity_link_type; TYPE __ghdl_component_link_type IS RECORD INSTANCE: __ghdl_entity_link_acc; stmt: __ghdl_rti_access; END RECORD; TYPE __ghdl_rtin_block IS RECORD common: __ghdl_rti_common; name: __ghdl_char_ptr; loc: __ghdl_ptr; linecol: __ghdl_index_type; parent: __ghdl_rti_access; nbr_child: __ghdl_index_type; children: __ghdl_rti_arr_acc; END RECORD; TYPE __ghdl_rtin_generate IS RECORD common: __ghdl_rti_common; name: __ghdl_char_ptr; loc: __ghdl_ptr; linecol: __ghdl_index_type; parent: __ghdl_rti_access; size: __ghdl_index_type; child: __ghdl_rti_access; END RECORD; TYPE __ghdl_rtin_block_file IS RECORD block: __ghdl_rtin_block; filename: __ghdl_char_ptr; END RECORD; TYPE __ghdl_rtin_type_scalar IS RECORD common: __ghdl_rti_common; name: __ghdl_char_ptr; END RECORD; TYPE __ghdl_rtin_type_enum IS RECORD common: __ghdl_rti_common; name: __ghdl_char_ptr; nbr: __ghdl_index_type; lits: __ghdl_char_ptr_array_ptr; END RECORD; TYPE __ghdl_rtin_subtype_scalar IS RECORD common: __ghdl_rti_common; name: __ghdl_char_ptr; base: __ghdl_rti_access; range: __ghdl_ptr; END RECORD; TYPE __ghdl_rtin_unit64 IS RECORD common: __ghdl_rti_common; name: __ghdl_char_ptr; val: __ghdl_i64; END RECORD; TYPE __ghdl_rtin_unitptr IS RECORD common: __ghdl_rti_common; name: __ghdl_char_ptr; addr: __ghdl_ptr; END RECORD; TYPE __ghdl_rtin_type_physical IS RECORD common: __ghdl_rti_common; name: __ghdl_char_ptr; nbr: __ghdl_index_type; units: __ghdl_rti_arr_acc; END RECORD; TYPE __ghdl_rtin_type_fileacc IS RECORD common: __ghdl_rti_common; name: __ghdl_char_ptr; base: __ghdl_rti_access; END RECORD; TYPE __ghdl_rtin_type_array IS RECORD common: __ghdl_rti_common; name: __ghdl_char_ptr; element: __ghdl_rti_access; nbr_dim: __ghdl_index_type; indexes: __ghdl_rti_arr_acc; END RECORD; TYPE __ghdl_rtin_subtype_array IS RECORD common: __ghdl_rti_common; name: __ghdl_char_ptr; basetype: __ghdl_rti_access; bounds: __ghdl_ptr; val_size: __ghdl_ptr; sig_size: __ghdl_ptr; END RECORD; TYPE __ghdl_rtin_type_record IS RECORD common: __ghdl_rti_common; name: __ghdl_char_ptr; nbrel: __ghdl_index_type; elements: __ghdl_rti_arr_acc; END RECORD; TYPE __ghdl_rtin_element IS RECORD common: __ghdl_rti_common; name: __ghdl_char_ptr; eltype: __ghdl_rti_access; val_off: __ghdl_index_type; sig_off: __ghdl_index_type; END RECORD; TYPE __ghdl_rtin_object IS RECORD common: __ghdl_rti_common; name: __ghdl_char_ptr; loc: __ghdl_ptr; obj_type: __ghdl_rti_access; linecol: __ghdl_index_type; END RECORD; TYPE __ghdl_rtin_instance IS RECORD common: __ghdl_rti_common; name: __ghdl_char_ptr; linecol: __ghdl_index_type; loc: __ghdl_ptr; parent: __ghdl_rti_access; instance: __ghdl_rti_access; END RECORD; TYPE __ghdl_rtin_compon
/**
Copyright (c) 2014 Alex Tsui

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
#include "ColumnFormatter.h"
#include <iomanip>
#include <iostream>
#include <list>
#include <string>
#include <sstream>
#include <fstream>
#include <vector>
#include <cstdlib>

bool ColumnFormatter::load(const std::string& fn)
{
    items.clear();
    std::ifstream ifs(fn.c_str());
    if (!ifs.is_open())
        return false;
    std::string str;
    while (!ifs.eof())
    {
        std::getline( ifs, str );
        if (!ifs.eof())
            items.push_back(str);
    }
    return true;
}

int ColumnFormatter::solve(int width)
{
    bool fits = true;
    int i = 1;
    while (fits)
    {
        ++i;
        std::vector<size_t> widths = divideItems(i);
        size_t columnWidth = width / i;
        for (size_t j = 0; j < widths.size(); ++j)
        {
            fits &= (widths[j] < columnWidth);
        }
        if (!fits)
        {
            --i;
        }
    }
    return i;
}

std::vector<size_t> ColumnFormatter::divideItems(int numColumns)
{
    columns.clear();
    for (int i = 0; i < numColumns; ++i)
    columns.push_back(std::list<std::string>());
    for (size_t i = 0; i < items.size(); ++i)
    {
        columns[i % numColumns].push_back(items[i]);
    }

    // count the fattest item in each column
    std::vector<size_t> res(numColumns);
    for (int i = 0; i < numColumns; ++i)
    {
        for (std::list<std::string>::const_iterator it =
            columns[i].begin(); it != columns[i].end(); ++it)
        {
            if (res[i] < it->size())
                res[i] = it->size();
        }
    }

    return res;
}

void ColumnFormatter::format(int width)
{
    m_formattedOutput.clear();
    int cols = solve(width);
    std::vector<int> colWidths(cols, width / cols);
    int rem = width % cols;
    for (int i = 0; i < rem; ++i)
    {
        colWidths[i]++;
    }
    divideItems(cols);
    std::vector< std::list<std::string>::const_iterator > its;
    std::vector< std::list<std::string>::const_iterator > it_ends;
    for (size_t i = 0; i < columns.size(); ++i)
    {
        its.push_back(columns[i].begin());
        it_ends.push_back(columns[i].end());
    }
    bool done = false;
    while (!done)
    {
        std::stringstream row_ss;
        for (size_t i = 0; i < columns.size(); ++i)
        {
            std::stringstream item_ss;
            std::string item;
            if (its[i] != it_ends[i])
            {
                item = *its[i];
                ++its[i];
            }
            item_ss << std::left << std::setw(colWidths[i]) << item;
            row_ss << item_ss.str();
        }
        m_formattedOutput.push_back(row_ss.str());

        done = true;
        for (size_t i = 0; i < columns.size(); ++i)
        {
            done &= (its[i] == it_ends[i]);
        }
    }
}

const std::list<std::string>& ColumnFormatter::formattedOutput() const
{
    return m_formattedOutput;
}
__ghdl_rti_access); EXTERNAL FUNCTION __ghdl_value_e32 ( val: std__standard__string__PTR; rti: __ghdl_rti_access) RETURN __ghdl_i32; EXTERNAL PROCEDURE __ghdl_image_i32 ( res: std__standard__string__PTR; val: __ghdl_i32); EXTERNAL FUNCTION __ghdl_value_i32 ( val: std__standard__string__PTR) RETURN __ghdl_i32; EXTERNAL PROCEDURE __ghdl_image_p32 ( res: std__standard__string__PTR; val: __ghdl_i32; RTI: __ghdl_rti_access); EXTERNAL FUNCTION __ghdl_value_p32 ( val: std__standard__string__PTR; rti: __ghdl_rti_access) RETURN __ghdl_i32; EXTERNAL PROCEDURE __ghdl_image_p64 ( res: std__standard__string__PTR; val: __ghdl_i64; RTI: __ghdl_rti_access); EXTERNAL FUNCTION __ghdl_value_p64 ( val: std__standard__string__PTR; rti: __ghdl_rti_access) RETURN __ghdl_i64; EXTERNAL PROCEDURE __ghdl_image_f64 ( res: std__standard__string__PTR; val: __ghdl_real); EXTERNAL FUNCTION __ghdl_value_f64 ( val: std__standard__string__PTR) RETURN __ghdl_real; EXTERNAL PROCEDURE __ghdl_text_file_open ( file: __ghdl_file_index; mode: __ghdl_i32; str: std__standard__string__PTR); EXTERNAL PROCEDURE __ghdl_file_open ( file: __ghdl_file_index; mode: __ghdl_i32; str: std__standard__string__PTR); EXTERNAL FUNCTION __ghdl_text_file_open_status ( file: __ghdl_file_index; mode: __ghdl_i32; str: std__standard__string__PTR) RETURN __ghdl_i32; EXTERNAL FUNCTION __ghdl_file_open_status ( file: __ghdl_file_index; mode: __ghdl_i32; str: std__standard__string__PTR) RETURN __ghdl_i32; EXTERNAL FUNCTION __ghdl_file_endfile ( file: __ghdl_file_index) RETURN std__standard__boolean; EXTERNAL PROCEDURE __ghdl_text_file_close ( file: __ghdl_file_index); EXTERNAL PROCEDURE __ghdl_file_close ( file: __ghdl_file_index); EXTERNAL PROCEDURE __ghdl_file_flush ( file: __ghdl_file_index); EXTERNAL PROCEDURE __ghdl_signal_create_resolution ( func: __ghdl_ptr; INSTANCE: __ghdl_ptr; sig: __ghdl_ptr; nbr_sig: __ghdl_index_type); TYPE __ghdl_scalar_bytes IS SUBARRAY __ghdl_chararray[8]; TYPE __ghdl_signal IS RECORD driving_value: __ghdl_scalar_bytes; last_value: __ghdl_scalar_bytes; last_event: std__standard__time__BT; last_active: std__standard__time__BT; value: __ghdl_ptr; event: std__standard__boolean; active: std__standard__boolean; has_active: __ghdl_bool_type; END RECORD; TYPE __ghdl_signal_ptr_ptr IS ACCESS __ghdl_signal_ptr; EXTERNAL PROCEDURE __ghdl_signal_merge_rti ( sig: __ghdl_signal_ptr; RTI: __ghdl_rti_access); EXTERNAL PROCEDURE __ghdl_signal_add_source ( targ: __ghdl_signal_ptr; src: __ghdl_signal_ptr); EXTERNAL PROCEDURE __ghdl_signal_effective_value ( targ: __ghdl_signal_ptr; src: __ghdl_signal_ptr); EXTERNAL PROCEDURE __ghdl_signal_set_disconnect ( sig: __ghdl_signal_ptr; time: std__standard__time__BT); EXTERNAL PROCEDURE __ghdl_signal_disconnect ( sig: __ghdl_signal_ptr); EXTERNAL FUNCTION __ghdl_signal_get_nbr_drivers ( sig: __ghdl_signal_ptr) RETURN __ghdl_index_type; EXTERNAL FUNCTION __ghdl_signal_get_nbr_ports ( sig: __ghdl_signal_ptr) RETURN __ghdl_index_type; EXTERNAL FUNCTION __ghdl_signal_read_driver ( sig: __ghdl_signal_ptr; num: __ghdl_index_type) RETURN __ghdl_ptr; EXTERNAL FUNCTION __ghdl_signal_read_port ( sig: __ghdl_signal_ptr; num: __ghdl_index_type) RETURN __ghdl_ptr; EXTERNAL FUNCTION __ghdl_signal_driving ( sig: __ghdl_signal_ptr) RETURN std__standard__boolean; EXTERNAL PROCEDURE __ghdl_signal_simple_assign_error ( sig: __ghdl_signal_ptr; filename: __ghdl_char_ptr; line: __ghdl_i32); EXTERNAL PROCEDURE __ghdl_signal_start_assign_error ( sig: __ghdl_signal_ptr; reject: std__standard__time__BT; after: std__standard__time__BT; filename: __ghdl_char_ptr; line: __ghdl_i32); EXTERNAL PROCEDURE __ghdl_signal_next_assign_error ( sig: __ghdl_signal_ptr; after: std__standard__time__BT; filename: __ghdl_char_ptr; line: __ghdl_i32); EXTERNAL PROCEDURE __ghdl_signal_start_assign_null ( sig: __ghdl_signal_ptr; reject: std__standard__time__BT; after: std__standard__time__BT); EXTERNAL PROCEDURE __ghdl_signal_next_assign_null ( sig: __ghdl_signal_ptr; after: std__standard__time__BT); EXTERNAL FUNCTION __ghdl_create_signal_e8 ( val_ptr: __ghdl_ptr; resolv_func: __ghdl_ptr; resolv_inst: __ghdl_ptr) RETURN __ghdl_signal_ptr; EXTERNAL PROCEDURE __ghdl_signal_init_e8 ( sig: __ghdl_signal_ptr; val: __ghdl_i32); EXTERNAL PROCEDURE __ghdl_signal_simple_assign_e8 ( sig: __ghdl_signal_ptr; val: __ghdl_i32); EXTERNAL PROCEDURE __ghdl_signal_start_assign_e8 ( sig: __ghdl_signal_ptr; reject: std__standard__time__BT; val: __ghdl_i32; after: std__standard__time__BT); EXTERNAL PROCEDURE __ghdl_signal_next_assign_e8 ( sig: __ghdl_signal_ptr; val: __ghdl_i32; after: std__standard__time__BT); EXTERNAL PROCEDURE __ghdl_signal_associate_e8 ( sig: __ghdl_signal_ptr; val: __ghdl_i32); EXTERNAL FUNCTION __ghdl_signal_driving_value_e8 ( sig: __ghdl_signal_ptr) RETURN __ghdl_i32; EXTERNAL FUNCTION __ghdl_create_signal_e32 ( val_ptr: __ghdl_ptr; resolv_func: __ghdl_ptr; resolv_inst: __ghdl_ptr) RETURN __ghdl_signal_ptr; EXTERNAL PROCEDURE __ghdl_signal_init_e32 ( sig: __ghdl_signal_ptr; val: __ghdl_i32); EXTERNAL PROCEDURE __ghdl_signal_simple_assign_e32 ( sig: __ghdl_signal_ptr; val: __ghdl_i32); EXTERNAL PROCEDURE __ghdl_signal_start_assign_e32 ( sig: __ghdl_signal_ptr; reject: std__standard__time__BT; val: __ghdl_i32; after: std__standard__time__BT); EXTERNAL PROCEDURE __ghdl_signal_next_assign_e32 ( sig: __ghdl_signal_ptr; val: __ghdl_i32; after: std__standard__time__BT); EXTERNAL PROCEDURE __ghdl_signal_associate_e32 ( sig: __ghdl_signal_ptr; val: __ghdl_i32); EXTERNAL FUNCTION __ghdl_signal_driving_value_e32 ( sig: __ghdl_signal_ptr) RETURN __ghdl_i32; EXTERNAL FUNCTION __ghdl_create_signal_b1 ( val_ptr: __ghdl_ptr; resolv_func: __ghdl_ptr; resolv_inst: __ghdl_ptr) RETURN __ghdl_signal_ptr; EXTERNAL PROCEDURE __ghdl_signal_init_b1 ( sig: __ghdl_signal_ptr; val: __ghdl_bool_type); EXTERNAL PROCEDURE __ghdl_signal_simple_assign_b1 ( sig: __ghdl_signal_ptr; val: __ghdl_bool_type); EXTERNAL PROCEDURE __ghdl_signal_start_assign_b1 ( sig: __ghdl_signal_ptr; reject: std__standard__time__BT; val: __ghdl_bool_type; after: std__standard__time__BT); EXTERNAL PROCEDURE __ghdl_signal_next_assign_b1 ( sig: __ghdl_signal_ptr; val: __ghdl_bool_type; after: std__standard__time__BT); EXTERNAL PROCEDURE __ghdl_signal_associate_b1 ( sig: __ghdl_signal_ptr; val: __ghdl_bool_type); EXTERNAL FUNCTION __ghdl_signal_driving_value_b1 ( sig: __ghdl_signal_ptr) RETURN __ghdl_bool_type; EXTERNAL FUNCTION __ghdl_create_signal_i32 ( val_ptr: __ghdl_ptr; resolv_func: __ghdl_ptr; resolv_inst: __ghdl_ptr) RETURN __ghdl_signal_ptr; EXTERNAL PROCEDURE __ghdl_signal_init_i32 ( sig: __ghdl_signal_ptr; val: __ghdl_i32); EXTERNAL PROCEDURE __ghdl_signal_simple_assign_i32 ( sig: __ghdl_signal_ptr; val: __ghdl_i32); EXTERNAL PROCEDURE __ghdl_signal_start_assign_i32 ( sig: __ghdl_signal_ptr; reject: std__standard__time__BT; val: __ghdl_i32; after: std__standard__time__BT); EXTERNAL PROCEDURE __ghdl_signal_next_assign_i32 ( sig: __ghdl_signal_ptr; val: __ghdl_i32; after: std__standard__time__BT); EXTERNAL PROCEDURE __ghdl_signal_associate_i32 ( sig: __ghdl_signal_ptr; val: __ghdl_i32); EXTERNAL FUNCTION __ghdl_signal_driving_value_i32 ( sig: __ghdl_signal_ptr) RETURN __ghdl_i32; EXTERNAL FUNCTION __ghdl_create_signal_f64 ( val_ptr: __ghdl_ptr; resolv_func: __ghdl_ptr; resolv_inst: __ghdl_ptr) RETURN __ghdl_signal_ptr; EXTERNAL PROCEDURE __ghdl_signal_init_f64 ( sig: __ghdl_signal_ptr; val: __ghdl_real); EXTERNAL PROCEDURE __ghdl_signal_simple_assign_f64 ( sig: __ghdl_signal_ptr; val: __ghdl_real); EXTERNAL PROCEDURE __ghdl_signal_start_assign_f64 ( sig: __ghdl_signal_ptr; reject: std__standard__time__BT; val: __ghdl_real; after: std__standard__time__BT); EXTERNAL PROCEDURE __ghdl_signal_next_assign_f64 ( sig: __ghdl_signal_ptr; val: __ghdl_real; after: std__standard__time__BT); EXTERNAL PROCEDURE __ghdl_signal_associate_f64 ( sig: __ghdl_signal_ptr; val: __ghdl_real); EXTERNAL FUNCTION __ghdl_signal_driving_value_f64 ( sig: __ghdl_signal_ptr) RETURN __ghdl_real; EXTERNAL FUNCTION __ghdl_create_signal_i64 ( val_ptr: __ghdl_ptr; resolv_func: __ghdl_ptr; resolv_inst: __ghdl_ptr) RETURN __ghdl_signal_ptr; EXTERNAL PROCEDURE __ghdl_signal_init_i64 ( sig: __ghdl_signal_ptr; val: __ghdl_i64); EXTERNAL PROCEDURE __ghdl_signal_simple_assign_i64 ( sig: __ghdl_signal_ptr; val: __ghdl_i64); EXTERNAL PROCEDURE __ghdl_signal_start_assign_i64 ( sig: __ghdl_signal_ptr; reject: std__standard__time__BT; val: __ghdl_i64; after: std__standard__time__BT); EXTERNAL PROCEDURE __ghdl_signal_next_assign_i64 ( sig: __ghdl_signal_ptr; val: __ghdl_i64; after: std__standard__time__BT); EXTERNAL PROCEDURE __ghdl_signal_associate_i64 ( sig: __ghdl_signal_ptr; val: __ghdl_i64); EXTERNAL FUNCTION __ghdl_signal_driving_value_i64 ( sig: __ghdl_signal_ptr) RETURN __ghdl_i64; EXTERNAL PROCEDURE __ghdl_process_add_sensitivity ( sig: __ghdl_signal_ptr); EXTERNAL PROCEDURE __ghdl_process_add_driver ( sig: __ghdl_signal_ptr); EXTERNAL PROCEDURE __ghdl_signal_add_direct_driver ( sig: __ghdl_signal_ptr; drv: __ghdl_ptr); EXTERNAL PROCEDURE __ghdl_signal_direct_assign ( sig: __ghdl_signal_ptr); EXTERNAL PROCEDURE __ghdl_signal_in_conversion ( func: __ghdl_ptr; INSTANCE: __ghdl_ptr; src: __ghdl_signal_ptr; src_len: __ghdl_index_type; dst: __ghdl_signal_ptr; dst_len: __ghdl_index_type); EXTERNAL PROCEDURE __ghdl_signal_out_conversion ( func: __ghdl_ptr; INSTANCE: __ghdl_ptr; src: __ghdl_signal_ptr; src_len: __ghdl_index_type; dst: __ghdl_signal_ptr; dst_len: __ghdl_index_type); EXTERNAL FUNCTION __ghdl_create_stable_signal ( val_ptr: __ghdl_ptr; val: std__standard__time__BT) RETURN __ghdl_signal_ptr; EXTERNAL FUNCTION __ghdl_create_quiet_signal ( val_ptr: __ghdl_ptr; val: std__standard__time__BT) RETURN __ghdl_signal_ptr; EXTERNAL FUNCTION __ghdl_create_transaction_signal ( val_ptr: __ghdl_ptr) RETURN __ghdl_signal_ptr; EXTERNAL PROCEDURE __ghdl_signal_attribute_register_prefix ( sig: __ghdl_signal_ptr); EXTERNAL FUNCTION __ghdl_create_delayed_signal ( sig: __ghdl_signal_ptr; val_ptr: __ghdl_ptr; val: std__standard__time__BT) RETURN __ghdl_signal_ptr; EXTERNAL FUNCTION __ghdl_signal_create_guard ( val_ptr: __ghdl_ptr; this: __ghdl_ptr; proc: __ghdl_ptr) RETURN __ghdl_signal_ptr; EXTERNAL PROCEDURE __ghdl_signal_guard_dependence ( sig: __ghdl_signal_ptr); EXTERNAL PROCEDURE __ghdl_process_wait_exit ( ); EXTERNAL PROCEDURE __ghdl_process_wait_timeout ( time: std__standard__time__BT); EXTERNAL PROCEDURE __ghdl_process_wait_set_timeout ( time: std__standard__time__BT); EXTERNAL PROCEDURE __ghdl_process_wait_add_sensitivity ( sig: __ghdl_signal_ptr); EXTERNAL PROCEDURE __ghdl_process_wait_suspend ( ); EXTERNAL FUNCTION __ghdl_process_wait_timed_out ( ) RETURN __ghdl_bool_type; EXTERNAL PROCEDURE __ghdl_process_wait_close ( ); EXTERNAL PROCEDURE __ghdl_get_path_name ( res: std__standard__string__PTR; ctxt: __ghdl_rti_access; addr: __ghdl_ptr; name: __ghdl_str_len_ptr); EXTERNAL PROCEDURE __ghdl_get_instance_name ( res: std__standard__string__PTR; ctxt: __ghdl_rti_access; addr: __ghdl_ptr; name: __ghdl_str_len_ptr); EXTERNAL PROCEDURE __ghdl_rti_add_package ( RTI: __ghdl_rti_access); EXTERNAL PROCEDURE __ghdl_rti_add_top ( max_pkgs: __ghdl_index_type; pkgs: __ghdl_rti_arr_acc; RTI: __ghdl_rti_access; INSTANCE: __ghdl_ptr); EXTERNAL PROCEDURE __ghdl_init_top_generics ( ); EXTERNAL FUNCTION __ghdl_std_ulogic_match_eq ( left: __ghdl_i32; right: __ghdl_i32) RETURN __ghdl_i32; EXTERNAL FUNCTION __ghdl_std_ulogic_match_ne ( left: __ghdl_i32; right: __ghdl_i32) RETURN __ghdl_i32; EXTERNAL FUNCTION __ghdl_std_ulogic_match_lt ( left: __ghdl_i32; right: __ghdl_i32) RETURN __ghdl_i32; EXTERNAL FUNCTION __ghdl_std_ulogic_match_le ( left: __ghdl_i32; right: __ghdl_i32) RETURN __ghdl_i32; EXTERNAL FUNCTION __ghdl_std_ulogic_array_match_eq ( left: __ghdl_ptr; l_len: __ghdl_index_type; right: __ghdl_ptr; r_len: __ghdl_index_type) RETURN __ghdl_i32; EXTERNAL FUNCTION __ghdl_std_ulogic_array_match_ne ( left: __ghdl_ptr; l_len: __ghdl_index_type; right: __ghdl_ptr; r_len: __ghdl_index_type) RETURN __ghdl_i32; EXTERNAL PROCEDURE __ghdl_to_string_i32 ( res: std__standard__string__PTR; val: __ghdl_i32); EXTERNAL PROCEDURE __ghdl_to_string_i64 ( res: std__standard__string__PTR; val: __ghdl_i64); EXTERNAL PROCEDURE __ghdl_to_string_f64 ( res: std__standard__string__PTR; val: __ghdl_real); EXTERNAL PROCEDURE __ghdl_to_string_f64_digits ( res: std__standard__string__PTR; val: __ghdl_real; nbr_digits: __ghdl_i32); EXTERNAL PROCEDURE __ghdl_to_string_f64_format ( res: std__standard__string__PTR; val: __ghdl_real; format: std__standard__string__PTR); EXTERNAL PROCEDURE __ghdl_bv_to_ostring ( res: std__standard__string__PTR; val: std__standard__bit_vector__BASEP; length: __ghdl_index_type); EXTERNAL PROCEDURE __ghdl_bv_to_hstring ( res: std__standard__string__PTR; val: std__standard__bit_vector__BASEP; length: __ghdl_index_type); EXTERNAL PROCEDURE __ghdl_to_string_b1 ( res: std__standard__string__PTR; val: __ghdl_bool_type; RTI: __ghdl_rti_access); EXTERNAL PROCEDURE __ghdl_to_string_e8 ( res: std__standard__string__PTR; val: __ghdl_i32; RTI: __ghdl_rti_access); EXTERNAL PROCEDURE __ghdl_to_string_char ( res: std__standard__string__PTR; val: std__standard__character); EXTERNAL PROCEDURE __ghdl_to_string_e32 ( res: std__standard__string__PTR; val: __ghdl_i32; RTI: __ghdl_rti_access); EXTERNAL PROCEDURE __ghdl_to_string_p32 ( res: std__standard__string__PTR; val: __ghdl_i32; RTI: __ghdl_rti_access); EXTERNAL PROCEDURE __ghdl_to_string_p64 ( res: std__standard__string__PTR; val: __ghdl_i64; RTI: __ghdl_rti_access); EXTERNAL PROCEDURE __ghdl_time_to_string_unit ( res: std__standard__string__PTR; val: std__standard__time__BT; unit: std__standard__time__BT; RTI: __ghdl_rti_access); EXTERNAL PROCEDURE __ghdl_array_char_to_string_b1 ( res: std__standard__string__PTR; val: __ghdl_ptr; length: __ghdl_index_type; RTI: __ghdl_rti_access); EXTERNAL PROCEDURE __ghdl_array_char_to_string_e8 ( res: std__standard__string__PTR; val: __ghdl_ptr; length: __ghdl_index_type; RTI: __ghdl_rti_access); EXTERNAL PROCEDURE __ghdl_array_char_to_string_e32 ( res: std__standard__string__PTR; val: __ghdl_ptr; length: __ghdl_index_type; RTI: __ghdl_rti_access); PRIVATE CONSTANT _UI00000000 : SUBARRAY __ghdl_chararray[9]; CONSTANT _UI00000000 := {116, 98, 51, 46, 118, 104, 100, 108, 0}; --F /Users/gingold/devel/ghdl/testsuite/gna/bug053/tb3.vhdl -- package declaration pkg2 PUBLIC CONSTANT work__pkg2__pkg1__c : std__standard__integer__BT; CONSTANT work__pkg2__pkg1__c := 5; PUBLIC FUNCTION work__pkg2__pkg1__f ( ) RETURN std__standard__integer__BT; PUBLIC VAR work__pkg2__ELABORATED : __ghdl_bool_type; PUBLIC PROCEDURE work__pkg2__ELAB_BODY ( ); PUBLIC PROCEDURE work__pkg2__ELAB_SPEC ( ); EXTERNAL CONSTANT work__RTI : __ghdl_rtin_type_scalar; PUBLIC CONSTANT work__pkg2__RTI : __ghdl_rtin_block_file; PUBLIC CONSTANT work__pkg2__pkg1__RTI : __ghdl_rtin_block; PUBLIC CONSTANT work__pkg2__pkg1__c__RTI : __ghdl_rtin_object; PRIVATE CONSTANT work__pkg2__pkg1__c__RTISTR : SUBARRAY __ghdl_chararray[2]; CONSTANT work__pkg2__pkg1__c__RTISTR := {99, 0}; CONSTANT work__pkg2__pkg1__c__RTI := {{__ghdl_rtik'[__ghdl_rtik_constant], 0, 0, 0}, __ghdl_char_ptr'unchecked_address (work__pkg2__pkg1__c__RTISTR), __ghdl_ptr'unchecked_address (work__pkg2__pkg1__c), __ghdl_rti_access'unchecked_address (std__standard__natural__RTI), 782}; PRIVATE CONSTANT work__pkg2__pkg1__RTISTR : SUBARRAY __ghdl_chararray[5]; CONSTANT work__pkg2__pkg1__RTISTR := {112, 107, 103, 49, 0}; PRIVATE CONSTANT work__pkg2__pkg1__RTIARRAY : SUBARRAY __ghdl_rti_array[2]; CONSTANT work__pkg2__pkg1__RTIARRAY := {__ghdl_rti_access'unchecked_address (work__pkg2__pkg1__c__RTI), __ghdl_rti_access'[NULL]}; CONSTANT work__pkg2__pkg1__RTI := {{__ghdl_rtik'[__ghdl_rtik_package], 2, 0, 0}, __ghdl_char_ptr'address (work__pkg2__pkg1__RTISTR), __ghdl_ptr'[NULL], 523, __ghdl_rti_access'unchecked_address (work__pkg2__RTI), 1, __ghdl_rti_arr_acc'address (work__pkg2__pkg1__RTIARRAY)}; PRIVATE CONSTANT work__pkg2__RTISTR : SUBARRAY __ghdl_chararray[5]; CONSTANT work__pkg2__RTISTR := {112, 107, 103, 50, 0}; PRIVATE CONSTANT work__pkg2__RTIARRAY : SUBARRAY __ghdl_rti_array[1]; CONSTANT work__pkg2__RTIARRAY := {__ghdl_rti_access'[NULL]}; CONSTANT work__pkg2__RTI := {{{__ghdl_rtik'[__ghdl_rtik_package], 1, 0, 0}, __ghdl_char_ptr'address (work__pkg2__RTISTR), __ghdl_ptr'[NULL], 265, __ghdl_rti_access'unchecked_address (work__RTI), 0, __ghdl_rti_arr_acc'address (work__pkg2__RTIARRAY)}, __ghdl_char_ptr'address (_UI00000000)}; PUBLIC PROCEDURE work__pkg2__ELAB_SPEC ( ) DECLARE BEGIN __ghdl_rti_add_package (__ghdl_rti_access'unchecked_address (work__pkg2__RTI) ); END; --F /Users/gingold/devel/ghdl/testsuite/gna/bug053/tb3.vhdl -- package body pkg2 PRIVATE CONSTANT work__pkg2__BODY__RTI : __ghdl_rtin_block; PRIVATE CONSTANT work__pkg2__BODY__RTISTR : SUBARRAY __ghdl_chararray[5]; CONSTANT work__pkg2__BODY__RTISTR := {112, 107, 103, 49, 0}; PRIVATE CONSTANT work__pkg2__BODY__RTIARRAY : SUBARRAY __ghdl_rti_array[1]; CONSTANT work__pkg2__BODY__RTIARRAY := {__ghdl_rti_access'[NULL]}; CONSTANT work__pkg2__BODY__RTI := {{__ghdl_rtik'[__ghdl_rtik_package_body], 1, 0, 0}, __ghdl_char_ptr'address (work__pkg2__BODY__RTISTR), __ghdl_ptr'[NULL], 2320, __ghdl_rti_access'unchecked_address (work__pkg2__pkg1__RTI), 0, __ghdl_rti_arr_acc'address (work__pkg2__BODY__RTIARRAY)}; PUBLIC FUNCTION work__pkg2__pkg1__f ( ) RETURN std__standard__integer__BT DECLARE BEGIN --# 12 DECLARE LOCAL VAR T1_0 : std__standard__integer__BT; BEGIN T1_0 := 3; RETURN T1_0; END; END; PRIVATE CONSTANT work__pkg2__BODY__RTI : __ghdl_rtin_block_file; PRIVATE CONSTANT work__pkg2__BODY__pkg1__BODY__RTI : __ghdl_rtin_block; PRIVATE CONSTANT work__pkg2__BODY__pkg1__BODY__RTISTR : SUBARRAY __ghdl_chararray[5]; CONSTANT work__pkg2__BODY__pkg1__BODY__RTISTR := {112, 107, 103, 49, 0}; PRIVATE CONSTANT work__pkg2__BODY__pkg1__BODY__RTIARRAY : SUBARRAY __ghdl_rti_array[1]; CONSTANT work__pkg2__BODY__pkg1__BODY__RTIARRAY := {__ghdl_rti_access'[NULL]}; CONSTANT work__pkg2__BODY__pkg1__BODY__RTI := { {__ghdl_rtik'[__ghdl_rtik_package_body], 2, 0, 0}, __ghdl_char_ptr'address (work__pkg2__BODY__pkg1__BODY__RTISTR), __ghdl_ptr'[NULL], 2320, __ghdl_rti_access'unchecked_address (work__pkg2__BODY__RTI), 0, __ghdl_rti_arr_acc'address (work__pkg2__BODY__pkg1__BODY__RTIARRAY)}; PRIVATE CONSTANT work__pkg2__BODY__RTISTR : SUBARRAY __ghdl_chararray[5]; CONSTANT work__pkg2__BODY__RTISTR := {112, 107, 103, 50, 0}; PRIVATE CONSTANT work__pkg2__BODY__RTIARRAY : SUBARRAY __ghdl_rti_array[1]; CONSTANT work__pkg2__BODY__RTIARRAY := {__ghdl_rti_access'[NULL]}; CONSTANT work__pkg2__BODY__RTI := {{{__ghdl_rtik'[__ghdl_rtik_package_body], 1, 0, 0}, __ghdl_char_ptr'address (work__pkg2__BODY__RTISTR), __ghdl_ptr'[NULL], 2062, __ghdl_rti_access'unchecked_address (work__pkg2__RTI), 0, __ghdl_rti_arr_acc'address (work__pkg2__BODY__RTIARRAY)}, __ghdl_char_ptr'address (_UI00000000)}; PUBLIC PROCEDURE work__pkg2__ELAB_BODY ( ) DECLARE BEGIN IF work__pkg2__ELABORATED THEN RETURN ; ELSE work__pkg2__ELABORATED := __ghdl_bool_type'[true]; END IF; work__pkg2__ELAB_SPEC (); IF NOT work__pkg2__ELABORATED THEN work__pkg2__ELAB_BODY (); END IF; END; --F /Users/gingold/devel/ghdl/testsuite/gna/bug053/tb3.vhdl -- entity tb3 TYPE work__tb3__INSTTYPE IS RECORD; TYPE work__tb3__INSTPTR IS ACCESS work__tb3__INSTTYPE; TYPE work__tb3__INSTTYPE IS RECORD RTI: __ghdl_entity_link_type; END RECORD; PUBLIC PROCEDURE work__tb3__DECL_ELAB ( INSTANCE: work__tb3__INSTPTR); PUBLIC PROCEDURE work__tb3__STMT_ELAB ( INSTANCE: work__tb3__INSTPTR); PUBLIC PROCEDURE work__tb3__PKG_ELAB ( ); PUBLIC CONSTANT work__tb3__RTI : __ghdl_rtin_block_file; PRIVATE CONSTANT work__tb3__RTISTR : SUBARRAY __ghdl_chararray[4]; CONSTANT work__tb3__RTISTR := {116, 98, 51, 0}; PRIVATE CONSTANT work__tb3__RTIARRAY : SUBARRAY __ghdl_rti_array[1]; CONSTANT work__tb3__RTIARRAY := {__ghdl_rti_access'[NULL]}; CONSTANT work__tb3__RTI := {{{__ghdl_rtik'[__ghdl_rtik_entity], 1, 0, 0}, __ghdl_char_ptr'address (work__tb3__RTISTR), __ghdl_ptr'[NULL], 4360, __ghdl_rti_access'unchecked_address (work__RTI), 0, __ghdl_rti_arr_acc'address (work__tb3__RTIARRAY)}, __ghdl_char_ptr'address (_UI00000000)}; PUBLIC PROCEDURE work__tb3__PKG_ELAB ( ) DECLARE BEGIN --# 17 END; PUBLIC PROCEDURE work__tb3__DECL_ELAB ( INSTANCE: work__tb3__INSTPTR) DECLARE BEGIN --# 17 --# 17 END; PUBLIC PROCEDURE work__tb3__STMT_ELAB ( INSTANCE: work__tb3__INSTPTR) DECLARE BEGIN --# 17 END; --F /Users/gingold/devel/ghdl/testsuite/gna/bug053/tb3.vhdl -- architecture behav TYPE work__tb3__ARCH__behav__INSTTYPE IS RECORD; TYPE work__tb3__ARCH__behav__INSTPTR IS ACCESS work__tb3__ARCH__behav__INSTTYPE ; TYPE work__tb3__ARCH__behav__P0__INSTTYPE IS RECORD END RECORD; TYPE work__tb3__ARCH__behav__P1__INSTTYPE IS RECORD END RECORD; TYPE work__tb3__ARCH__behav__P2__INSTTYPE IS RECORD END RECORD; TYPE work__tb3__ARCH__behav__P3__INSTTYPE IS RECORD END RECORD; TYPE work__tb3__ARCH__behav__INSTTYPE IS RECORD ENTITY: work__tb3__INSTTYPE; P0: work__tb3__ARCH__behav__P0__INSTTYPE; P1: work__tb3__ARCH__behav__P1__INSTTYPE; P2: work__tb3__ARCH__behav__P2__INSTTYPE; P3: work__tb3__ARCH__behav__P3__INSTTYPE; END RECORD; PUBLIC CONSTANT work__tb3__ARCH__behav__INSTSIZE : __ghdl_index_type; CONSTANT work__tb3__ARCH__behav__INSTSIZE := __ghdl_index_type'sizeof ( work__tb3__ARCH__behav__INSTTYPE); PUBLIC PROCEDURE work__tb3__ARCH__behav__DECL_ELAB ( INSTANCE: work__tb3__INSTPTR); PUBLIC PROCEDURE work__tb3__ARCH__behav__STMT_ELAB ( INSTANCE: work__tb3__INSTPTR); PUBLIC CONSTANT work__tb3__ARCH__behav__RTI : __ghdl_rtin_block_file; PUBLIC CONSTANT work__tb3__ARCH__behav__P0__RTI : __ghdl_rtin_block; PRIVATE CONSTANT work__tb3__ARCH__behav__P0__RTISTR : SUBARRAY __ghdl_chararray [3]; CONSTANT work__tb3__ARCH__behav__P0__RTISTR := {80, 48, 0}; PRIVATE CONSTANT work__tb3__ARCH__behav__P0__RTIARRAY : SUBARRAY __ghdl_rti_array[1]; CONSTANT work__tb3__ARCH__behav__P0__RTIARRAY := {__ghdl_rti_access'[NULL]}; CONSTANT work__tb3__ARCH__behav__P0__RTI := { {__ghdl_rtik'[__ghdl_rtik_process], 2, 0, 0}, __ghdl_char_ptr'address (work__tb3__ARCH__behav__P0__RTISTR), __ghdl_ptr'offsetof (work__tb3__ARCH__behav__INSTTYPE.P0), 6147, __ghdl_rti_access'unchecked_address (work__tb3__ARCH__behav__RTI), 0, __ghdl_rti_arr_acc'address (work__tb3__ARCH__behav__P0__RTIARRAY)}; PUBLIC CONSTANT work__tb3__ARCH__behav__P1__RTI : __ghdl_rtin_block; PRIVATE CONSTANT work__tb3__ARCH__behav__P1__RTISTR : SUBARRAY __ghdl_chararray [3]; CONSTANT work__tb3__ARCH__behav__P1__RTISTR := {80, 49, 0}; PRIVATE CONSTANT work__tb3__ARCH__behav__P1__RTIARRAY : SUBARRAY __ghdl_rti_array[1]; CONSTANT work__tb3__ARCH__behav__P1__RTIARRAY := {__ghdl_rti_access'[NULL]}; CONSTANT work__tb3__ARCH__behav__P1__RTI := { {__ghdl_rtik'[__ghdl_rtik_process], 2, 0, 0}, __ghdl_char_ptr'address (work__tb3__ARCH__behav__P1__RTISTR), __ghdl_ptr'offsetof (work__tb3__ARCH__behav__INSTTYPE.P1), 6403, __ghdl_rti_access'unchecked_address (work__tb3__ARCH__behav__RTI), 0, __ghdl_rti_arr_acc'address (work__tb3__ARCH__behav__P1__RTIARRAY)}; PUBLIC CONSTANT work__tb3__ARCH__behav__P2__RTI : __ghdl_rtin_block; PRIVATE CONSTANT work__tb3__ARCH__behav__P2__RTISTR : SUBARRAY __ghdl_chararray [3]; CONSTANT work__tb3__ARCH__behav__P2__RTISTR := {80, 50, 0}; PRIVATE CONSTANT work__tb3__ARCH__behav__P2__RTIARRAY : SUBARRAY __ghdl_rti_array[1]; CONSTANT work__tb3__ARCH__behav__P2__RTIARRAY := {__ghdl_rti_access'[NULL]}; CONSTANT work__tb3__ARCH__behav__P2__RTI := { {__ghdl_rtik'[__ghdl_rtik_process], 2, 0, 0}, __ghdl_char_ptr'address (work__tb3__ARCH__behav__P2__RTISTR), __ghdl_ptr'offsetof (work__tb3__ARCH__behav__INSTTYPE.P2), 6659, __ghdl_rti_access'unchecked_address (work__tb3__ARCH__behav__RTI), 0, __ghdl_rti_arr_acc'address (work__tb3__ARCH__behav__P2__RTIARRAY)}; PUBLIC CONSTANT work__tb3__ARCH__behav__P3__RTI : __ghdl_rtin_block; PRIVATE CONSTANT work__tb3__ARCH__behav__P3__RTISTR : SUBARRAY __ghdl_chararray [3]; CONSTANT work__tb3__ARCH__behav__P3__RTISTR := {80, 51, 0}; PRIVATE CONSTANT work__tb3__ARCH__behav__P3__RTIARRAY : SUBARRAY __ghdl_rti_array[1]; CONSTANT work__tb3__ARCH__behav__P3__RTIARRAY := {__ghdl_rti_access'[NULL]}; CONSTANT work__tb3__ARCH__behav__P3__RTI := { {__ghdl_rtik'[__ghdl_rtik_process], 2, 0, 0}, __ghdl_char_ptr'address (work__tb3__ARCH__behav__P3__RTISTR), __ghdl_ptr'offsetof (work__tb3__ARCH__behav__INSTTYPE.P3), 6915, __ghdl_rti_access'unchecked_address (work__tb3__ARCH__behav__RTI), 0, __ghdl_rti_arr_acc'address (work__tb3__ARCH__behav__P3__RTIARRAY)}; PRIVATE CONSTANT work__tb3__ARCH__behav__RTISTR : SUBARRAY __ghdl_chararray[6]; CONSTANT work__tb3__ARCH__behav__RTISTR := {98, 101, 104, 97, 118, 0}; PRIVATE CONSTANT work__tb3__ARCH__behav__RTIARRAY : SUBARRAY __ghdl_rti_array[5 ]; CONSTANT work__tb3__ARCH__behav__RTIARRAY := {__ghdl_rti_access'unchecked_address (work__tb3__ARCH__behav__P0__RTI), __ghdl_rti_access'unchecked_address (work__tb3__ARCH__behav__P1__RTI), __ghdl_rti_access'unchecked_address (work__tb3__ARCH__behav__P2__RTI), __ghdl_rti_access'unchecked_address (work__tb3__ARCH__behav__P3__RTI), __ghdl_rti_access'[NULL]}; CONSTANT work__tb3__ARCH__behav__RTI := {{ {__ghdl_rtik'[__ghdl_rtik_architecture], 1, 0, 0}, __ghdl_char_ptr'address (work__tb3__ARCH__behav__RTISTR), __ghdl_ptr'offsetof (work__tb3__ARCH__behav__INSTTYPE.ENTITY), 5646, __ghdl_rti_access'unchecked_address (work__tb3__RTI), 4, __ghdl_rti_arr_acc'address (work__tb3__ARCH__behav__RTIARRAY)}, __ghdl_char_ptr'address (_UI00000000)}; PRIVATE PROCEDURE work__tb3__ARCH__behav__P0__PROC ( INSTANCE: work__tb3__ARCH__behav__INSTPTR) DECLARE BEGIN --# 24 END; PRIVATE PROCEDURE work__tb3__ARCH__behav__P1__PROC ( INSTANCE: work__tb3__ARCH__behav__INSTPTR) DECLARE PRIVATE CONSTANT _UI00000001 : __ghdl_location; CONSTANT _UI00000001 := {__ghdl_char_ptr'address (_UI00000000), 25, 3}; TYPE work__tb3__ARCH__behav__P1__U0 IS SUBARRAY std__standard__string__BASE[ 16]; PRIVATE CONSTANT work__tb3__ARCH__behav__P1__U0__STB : std__standard__string__BOUND; CONSTANT work__tb3__ARCH__behav__P1__U0__STB := {{1, 16, __ghdl_dir_type'[dir_to], 16}}; PRIVATE CONSTANT _UI00000002 : work__tb3__ARCH__behav__P1__U0; CONSTANT _UI00000002 := {std__standard__character'[C_v], std__standard__character'[C_a], std__standard__character'[C_l], std__standard__character'[C_u], std__standard__character'[C_e], std__standard__character'[C20], std__standard__character'[C_i], std__standard__character'[C_s], std__standard__character'[C20], std__standard__character'[C_c], std__standard__character'[C_o], std__standard__character'[C_r], std__standard__character'[C_r], std__standard__character'[C_e], std__standard__character'[C_c], std__standard__character'[C_t]}; PRIVATE CONSTANT _UI00000003 : std__standard__string; CONSTANT _UI00000003 := {std__standard__string__BASEP'address (_UI00000002), std__standard__string__BOUNDP'address (work__tb3__ARCH__behav__P1__U0__STB )}; BEGIN --# 25 __ghdl_assert_failed (std__standard__string__PTR'address (_UI00000003), std__standard__severity_level'[note], __ghdl_location_ptr'address ( _UI00000001)); END; PRIVATE PROCEDURE work__tb3__ARCH__behav__P2__PROC ( INSTANCE: work__tb3__ARCH__behav__INSTPTR) DECLARE PRIVATE CONSTANT _UI00000004 : __ghdl_location; CONSTANT _UI00000004 := {__ghdl_char_ptr'address (_UI00000000), 26, 3}; BEGIN --# 26 IF NOT std__standard__boolean'(work__pkg2__pkg1__f () = 3) THEN __ghdl_assert_failed (std__standard__string__PTR'[NULL], std__standard__severity_level'[failure], __ghdl_location_ptr'address ( _UI00000004)); END IF; END; PRIVATE PROCEDURE work__tb3__ARCH__behav__P3__PROC ( INSTANCE: work__tb3__ARCH__behav__INSTPTR) DECLARE PRIVATE CONSTANT _UI00000005 : __ghdl_location; CONSTANT _UI00000005 := {__ghdl_char_ptr'address (_UI00000000), 27, 3}; TYPE work__tb3__ARCH__behav__P3__U0 IS SUBARRAY std__standard__string__BASE[ 16]; PRIVATE CONSTANT work__tb3__ARCH__behav__P3__U0__STB : std__standard__string__BOUND; CONSTANT work__tb3__ARCH__behav__P3__U0__STB := {{1, 16, __ghdl_dir_type'[dir_to], 16}}; PRIVATE CONSTANT _UI00000006 : work__tb3__ARCH__behav__P3__U0; CONSTANT _UI00000006 := {std__standard__character'[C_v], std__standard__character'[C_a], std__standard__character'[C_l], std__standard__character'[C_u], std__standard__character'[C_e], std__standard__character'[C20], std__standard__character'[C_i], std__standard__character'[C_s], std__standard__character'[C20], std__standard__character'[C_c], std__standard__character'[C_o], std__standard__character'[C_r], std__standard__character'[C_r], std__standard__character'[C_e], std__standard__character'[C_c], std__standard__character'[C_t]}; PRIVATE CONSTANT _UI00000007 : std__standard__string; CONSTANT _UI00000007 := {std__standard__string__BASEP'address (_UI00000006), std__standard__string__BOUNDP'address (work__tb3__ARCH__behav__P3__U0__STB )}; BEGIN --# 27 IF NOT std__standard__boolean'(work__pkg2__pkg1__f () /= 3) THEN __ghdl_assert_failed (std__standard__string__PTR'address (_UI00000007), std__standard__severity_level'[note], __ghdl_location_ptr'address ( _UI00000005)); END IF; END; PUBLIC PROCEDURE work__tb3__ARCH__behav__DECL_ELAB ( INSTANCE: work__tb3__INSTPTR) DECLARE LOCAL VAR ARCH_INSTANCE : work__tb3__ARCH__behav__INSTPTR; BEGIN ARCH_INSTANCE := work__tb3__ARCH__behav__INSTPTR'conv (INSTANCE); INSTANCE.ALL.RTI.rti := __ghdl_rti_access'unchecked_address ( work__tb3__ARCH__behav__RTI); work__tb3__DECL_ELAB (INSTANCE); --# 22 IF NOT work__pkg2__ELABORATED THEN work__pkg2__ELAB_BODY (); END IF; --# 22 END; PUBLIC PROCEDURE work__tb3__ARCH__behav__STMT_ELAB ( INSTANCE: work__tb3__INSTPTR) DECLARE LOCAL VAR ARCH_INSTANCE : work__tb3__ARCH__behav__INSTPTR; BEGIN ARCH_INSTANCE := work__tb3__ARCH__behav__INSTPTR'conv (INSTANCE); work__tb3__STMT_ELAB (INSTANCE); --# 22 --# 24 __ghdl_sensitized_process_register (__ghdl_ptr'unchecked_address ( ARCH_INSTANCE.ALL), __ghdl_ptr'subprg_addr ( work__tb3__ARCH__behav__P0__PROC), __ghdl_rti_access'unchecked_address ( work__tb3__ARCH__behav__P0__RTI), __ghdl_ptr'unchecked_address ( ARCH_INSTANCE.ALL.P0)); --# 25 __ghdl_sensitized_process_register (__ghdl_ptr'unchecked_address ( ARCH_INSTANCE.ALL), __ghdl_ptr'subprg_addr ( work__tb3__ARCH__behav__P1__PROC), __ghdl_rti_access'unchecked_address ( work__tb3__ARCH__behav__P1__RTI), __ghdl_ptr'unchecked_address ( ARCH_INSTANCE.ALL.P1)); --# 26 __ghdl_sensitized_process_register (__ghdl_ptr'unchecked_address ( ARCH_INSTANCE.ALL), __ghdl_ptr'subprg_addr ( work__tb3__ARCH__behav__P2__PROC), __ghdl_rti_access'unchecked_address ( work__tb3__ARCH__behav__P2__RTI), __ghdl_ptr'unchecked_address ( ARCH_INSTANCE.ALL.P2)); --# 27 __ghdl_sensitized_process_register (__ghdl_ptr'unchecked_address ( ARCH_INSTANCE.ALL), __ghdl_ptr'subprg_addr ( work__tb3__ARCH__behav__P3__PROC), __ghdl_rti_access'unchecked_address ( work__tb3__ARCH__behav__P3__RTI), __ghdl_ptr'unchecked_address ( ARCH_INSTANCE.ALL.P3)); END;