void declare_function_name () { tree decl, init; char *name, *printable_name; if (current_function_decl == NULL) { name = ""; printable_name = "top level"; } else { char *kind = "function"; if (TREE_CODE (TREE_TYPE (current_function_decl)) == METHOD_TYPE) kind = "method"; /* Allow functions to be nameless (such as artificial ones). */ if (DECL_NAME (current_function_decl)) name = IDENTIFIER_POINTER (DECL_NAME (current_function_decl)); else name = ""; printable_name = (*decl_printable_name) (current_function_decl, &kind); } push_obstacks_nochange (); decl = build_decl (VAR_DECL, get_identifier ("__FUNCTION__"), char_array_type_node); TREE_STATIC (decl) = 1; TREE_READONLY (decl) = 1; DECL_SOURCE_LINE (decl) = 0; DECL_IN_SYSTEM_HEADER (decl) = 1; DECL_IGNORED_P (decl) = 1; init = build_string (strlen (name) + 1, name); TREE_TYPE (init) = char_array_type_node; DECL_INITIAL (decl) = init; finish_decl (pushdecl (decl), init, NULL_TREE); push_obstacks_nochange (); decl = build_decl (VAR_DECL, get_identifier ("__PRETTY_FUNCTION__"), char_array_type_node); TREE_STATIC (decl) = 1; TREE_READONLY (decl) = 1; DECL_SOURCE_LINE (decl) = 0; DECL_IN_SYSTEM_HEADER (decl) = 1; DECL_IGNORED_P (decl) = 1; init = build_string (strlen (printable_name) + 1, printable_name); TREE_TYPE (init) = char_array_type_node; DECL_INITIAL (decl) = init; finish_decl (pushdecl (decl), init, NULL_TREE); }
static tree start_handler_array () { tree handler_array_type, decl; push_obstacks_nochange (); end_temporary_allocation (); handler_array_type = build_array_type (handler_element_type, NULL_TREE); decl = build_lang_decl (VAR_DECL, get_unique_identifier ("handler_table"), handler_array_type); /* TREE_TYPE (decl) = handler_array_type;*/ TREE_READONLY (decl) = 1; TREE_STATIC (decl) = 1; DECL_INITIAL (decl) = error_mark_node; pushdecl (decl); make_decl_rtl (decl, NULL_PTR, 0); current_handler->handler_array_decl = decl; return decl; }
void declare_function_name () { tree decl, type, init; char *name, *printable_name; int len; if (current_function_decl == NULL) { name = ""; printable_name = "top level"; } else { char *kind = "function"; if (TREE_CODE (TREE_TYPE (current_function_decl)) == METHOD_TYPE) kind = "method"; /* Allow functions to be nameless (such as artificial ones). */ if (DECL_NAME (current_function_decl)) name = IDENTIFIER_POINTER (DECL_NAME (current_function_decl)); else name = ""; printable_name = (*decl_printable_name) (current_function_decl, &kind); } /* If the default size of char arrays isn't big enough for the name, make a bigger one. */ len = strlen (name) + 1; type = char_array_type_node; if (TREE_INT_CST_LOW (TYPE_MAX_VALUE (TREE_TYPE (char_array_type_node))) < len) type = build_array_type (char_type_node, build_index_type (build_int_2 (len, 0))); push_obstacks_nochange (); decl = build_decl (VAR_DECL, get_identifier ("__FUNCTION__"), type); TREE_STATIC (decl) = 1; TREE_READONLY (decl) = 1; DECL_SOURCE_LINE (decl) = 0; DECL_IN_SYSTEM_HEADER (decl) = 1; DECL_IGNORED_P (decl) = 1; init = build_string (len, name); TREE_TYPE (init) = type; DECL_INITIAL (decl) = init; finish_decl (pushdecl (decl), init, NULL_TREE); len = strlen (printable_name) + 1; type = char_array_type_node; if (TREE_INT_CST_LOW (TYPE_MAX_VALUE (TREE_TYPE (char_array_type_node))) < len) type = build_array_type (char_type_node, build_index_type (build_int_2 (len, 0))); push_obstacks_nochange (); decl = build_decl (VAR_DECL, get_identifier ("__PRETTY_FUNCTION__"), type); TREE_STATIC (decl) = 1; TREE_READONLY (decl) = 1; DECL_SOURCE_LINE (decl) = 0; DECL_IN_SYSTEM_HEADER (decl) = 1; DECL_IGNORED_P (decl) = 1; init = build_string (len, printable_name); TREE_TYPE (init) = type; DECL_INITIAL (decl) = init; finish_decl (pushdecl (decl), init, NULL_TREE); }