示例#1
0
char fortran_equivalent_tk_types(type_t* t1, type_t* t2)
{
    type_t* r1 = t1;
    if (is_function_type(r1))
    {
        r1 = function_type_get_return_type(r1);
    }
    r1 = fortran_get_rank0_type_internal(r1, /* ignore pointer */ 1);

    type_t* r2 = t2;
    if (is_function_type(r2))
    {
        r2 = function_type_get_return_type(r2);
    }
    r2 = fortran_get_rank0_type_internal(r2, /* ignore pointer */ 1);

    // Preprocess for character types
    if (fortran_is_character_type(r1))
    {
        r1 = get_unqualified_type(array_type_get_element_type(r1));
    }
    if (fortran_is_character_type(r2))
    {
        r2 = get_unqualified_type(array_type_get_element_type(r2));
    }

    return equivalent_types(get_unqualified_type(r1), get_unqualified_type(r2));
}
示例#2
0
char fortran_basic_type_is_implicit_none(type_t* t)
{
    if (t == NULL)
    {
        return 0;
    }
    else if (is_implicit_none_type(t))
    {
        return 1;
    }
    else if (is_array_type(t))
    {
        return fortran_basic_type_is_implicit_none(array_type_get_element_type(t));
    }
    else if (is_function_type(t))
    {
        return fortran_basic_type_is_implicit_none(function_type_get_return_type(t));
    }
    else if (is_lvalue_reference_type(t))
    {
        return fortran_basic_type_is_implicit_none(reference_type_get_referenced_type(t));
    }
    else if (is_pointer_type(t))
    {
        return fortran_basic_type_is_implicit_none(pointer_type_get_pointee_type(t));
    }
    else
        return 0;
}
 Type Type::returns() const
 {
     return function_type_get_return_type(_type_info);
 }