Ejemplo n.º 1
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;
}
Ejemplo n.º 2
0
type_t* fortran_update_basic_type_with_type(type_t* type_info, type_t* basic_type)
{
    if (is_error_type(basic_type))
        return basic_type;

    // Many functions drop the reference type, so chek it the first
    if (is_lvalue_reference_type(type_info))
    {
        return get_lvalue_reference_type(
                fortran_update_basic_type_with_type(reference_type_get_referenced_type(type_info), basic_type));
    }
    else if (is_pointer_type(type_info))
    {
        return get_pointer_type(
                fortran_update_basic_type_with_type(pointer_type_get_pointee_type(type_info), basic_type)
                );
    }
    else if (fortran_is_array_type(type_info))
    {
        return get_array_type_bounds(
                fortran_update_basic_type_with_type(array_type_get_element_type(type_info), basic_type),
                array_type_get_array_lower_bound(type_info),
                array_type_get_array_upper_bound(type_info),
                array_type_get_array_size_expr_context(type_info));

    }
    else if (is_function_type(type_info))
    {
        return fortran_replace_return_type_of_function_type(type_info, basic_type);
    }
    else
    {
        return basic_type;
    }
}
Ejemplo n.º 3
0
char fortran_is_scalar_type(type_t* t)
{
    return (!is_pointer_type(t)
            && !is_pointer_to_member_type(t)
            && !is_array_type(t)
            && !is_lvalue_reference_type(t)
            && !is_rvalue_reference_type(t)
            && !is_function_type(t)
            && !is_vector_type(t));
}
char is_sound_type(type_t* t, decl_context_t decl_context)
{
    ERROR_CONDITION(t == NULL, "Invalid NULL here", 0);

    if (is_array_type(t))
    {
        type_t* element_type = array_type_get_element_type(t);
        if (is_void_type(element_type)
                || is_lvalue_reference_type(element_type)
                || is_function_type(element_type))
        {
            DEBUG_CODE()
            {
                fprintf(stderr, "TYPEORDER: Deduced type is not sound because it is an array of void/references/functions\n");
            }
            return 0;
        }
 bool Type::is_lvalue_reference() const
 {
     return (is_lvalue_reference_type(_type_info));
 }
 bool Type::is_any_reference() const
 {
     return (is_lvalue_reference_type(_type_info)
             || is_rvalue_reference_type(_type_info)
             || is_rebindable_reference());
 }