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)); }
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); }