8f17b5c5cb
* splay-tree.c (splay_tree_predecessor): Fix typo in comment. Convert the C front-end to use function-at-a-time mode. * c-common.h: Include splay-tree.h. (C_DECLARED_LABEL_FLAG): New macro. (struct language_function): Add x_scope_stmt_stack and x_function_name_declared_p. (RECHAIN_STMTS): Move definition. (lang_statment_code_p): Likewise. (lang_expand_stmt): Likewise. (lang_expand_decl_stmt): New variable. (lang_expand_function_end): Likewise. (current_scope_stmt_stack): New function. (add_decl_stmt): Likewise. (add_scope_stmt): Likewise. (mark_stmt_tree): Likewise. (struct c_lang_decl): New structure. (DECL_SAVED_TREE): Define. (c_mark_lang_decl): New function. (c_expand_start_cond): Change prototype. (c_finish_then): New function. (c_finish_else): Likewise. (current_function_name_declared): Remove. (set_current_function_name_declared): Likewise. (mark_c_language_function): Declare. (case_compare): Likewise. (c_add_case_label): Likewise. (c_expand_expr): Likewise. (c_safe_from_p): Likewise. * c-common.c (lang_expand_function_end): New variable. (struct if_elt): Add if_stmt. (c_expand_start_cond): Add the if-statement to the statement-tree, rather than generating RTL. (c_finish_then): New function. (c_expand_start_else): Don't generate RTL. (c_finish_else): New function. (c_expand_expr_stmt): Don't generate RTL. (statement_code_p): Add SCOPE_STMT. (case_compare): New function. (c_add_case_label): Likewise. (mark_stmt_tree): Likewise. (c_mark_lang_decl): Likewise. (mark_c_language_function): Likewise. (c_expand_expr): Likewise. (c_safe_from_p): Likewise. * c-decl.c (c_stmt_tree): New variable (c_scope_stmt_stack): Likewise. (c_function_name_declared_p): Likewise. (lang_expand_expr_stmt): Remove. (poplevel): Don't call output_inline_function for nested functions. (pushdecl): Don't set DECL_CONTEXT for a local declaration of an `extern' function. (redeclaration_error_message): Change means of computing whether or not a function is nested. (lookup_label): Don't call label_rtx. (init_decl_processing): Add more GC roots. (start_decl): Add DECL_STMTs to the statement-tree, rather than calling rest_of_decl_compilation. (finish_decl): Don't call expand_decl. (store_parm_decls): Begin the statement-tree, but don't generate RTL. (finish_function): Tie off the statement-tree. Call c_expand_body if appropriate. (c_expand_body): New function. (push_c_function_context): Save more information. (pop_c_function_contxt): Likewise. (copy_lang_decl): Now that we use DECL_LANG_SPECIFIC, copy it. (lang_mark_tree): Mark it. (current_stmt_tree): Adjust. (current_scope_stmt_stack): New function. (do_case): Remove. (set_current_name_declared): Likewise. (c_begin_compound_stmt): Define. (c_expand_decl_stmt): Likewise. * c-lang.c: Include rtl.h and expr.h. (lang_init): Set more language-specific hooks. * c-lex.c: Include expr.h. * c-parse.in: Changes throughout to add statements to the statement-tree, rather than generating RTL after every statement. * c-semantics.c (lang_expand_decl_stmt): Define. (add_decl_stmt): New function. (add_scope_stmt): Likewise. (finish_stmt_tree): Tweak. (genrtl_expr_stmt): Likewise. (genrtl_decl_stmt): Handle local labels, and call lang_expand_decl_stmt if required. (genrtl_for_stmt): Fix line-number handling. (genrtl_case_label): Handle cleanups. (genrtl_asm_stmt): Don't call combine_strings. (genrtl_compound_stmt): Simplify. (expand_stmt): Handle SCOPE_STMTs. * c-tree.h (struct lang_decl): New structure. (C_DECLARED_LABEL_FLAG): Remove. (c_begin_compound_stmt): Declare. (c_expand_decl_stmt): Likewise. (c_expand_start_case): Rename to c_start_case. (c_finish_case): New function. * c-typeck.c (start_init): Tweak setting of constructor_incremental. (c_expand_asm_operands): Tweak error-handling. Add to the statement-tree. (c_expand_return): Add to the statement-tree. (c_expand_start_case): Rename to ... (c_start_case): ... this. (struct c_switch): New type. (switch_stack): New variable. (do_case): Simplify. (c_finish_case): New function. * dependence.c: Include expr.h. (enum dependence_type): Change spelling of enumerals. (check_node_dependence): Adjust. * expr.h (lang_safe_from_p): Declare. (safe_from_p): Likewise. * expr.c (lang_safe_from_p): New variable. (safe_from_p): Give it external linkage. Use lang_safe_from_p. * stmt.c (expand_expr_stmt): Avoid clobberring of last_expr_type. * toplev.c (rest_of_decl_compilation): Robustify. * tree.c (contains_placeholder_p): Likewise. * Makefile.in: Update dependencies. * objc/objc-act.h: Adjust calculation of value for dummy_tree_code. * objc/objc-act.c: Include rtl.h, expr.h, and c-common.h. (objc_expand_function_end): New function. (finish_method_def): Use it. (init_objc): Initialize more language-specific hooks. * objc/Make-lang.in: Update dependencies. * cp-tree.h (struct cp_language_function): Remove x_scope_stmt_stack and name_declared. (current_scope_stmt_stack): Remove. (function_name_declared_p): New macro. (struct lang_decl_flags): Use c_lang_decl as a base class. (context): Remove. (struct lang_decl): Replace saved_tree with context. (DECL_FRIEND_CONTEXT): Adjust accordingly. (SET_DECL_FRIEND_CONTEXT): Likewise. (DECL_VIRTUAL_CONTEXT): Likewise. (DECL_SAVED_TREE): Remove. (C_DECLARED_LABEL_FLAG): Likewise. (cplus_expand_expr_stmt): Don't declare. (add_decl_stmt): Likewise. (add_scope_stmt): Likewise. * decl.c (mark_stmt_tree): Remove. (case_compare): Likewise. (finish_case_label): Use c_add_case_label. (init_decl_processing): Set more language-specific hooks. (build_enumerator): Fix typo in comment. (cplus_expand_expr_stmt): Remove. (mark_lang_function): Use mark_c_language_function. (lang_mark_tree): Use c_mark_lang_decl. * decl2.c: Change order of inclusion. * except.c: Likewise. * expr.c (cplus_expand_expr): Remove handling of STMT_EXPR. Fall back on c_expand_expr. * friend.c: Include expr.h. * init.c: Change order of inclusion. * Makefile.in: Update dependencies. * lex.h (free_lang_decl_chain): Remove. * optimize.c (maybe_clone_body): Use function_name_declared_p. * pt.c (build_template_decl): Don't copy DECL_VIRTUAL_CONTEXT if it doesn't exist. (instantiate_decl): Use function_name_declared_p. * semantics.c (lang_expand_expr_stmt): Remove. (set_current_function_name_declared): Likewise. (current_function_name_declared): Likewise. (begin_compound_stmt): Use function_name_declared_p. (add_decl_stmt): Remove. (setup_vtbl_ptr): Use function_name_declared_p. (add_scope_stmt): Remove. (current_scope_stmt_stack): New function. (cp_expand_stmt): Don't handle SCOPE_STMTs. (expand_body): Use function_name_declared_p. * tree.c (cp_statement_code_p): Don't include SCOPE_STMT. * typeck.c: Change order of includes. (convert_sequence): Remove. From-SVN: r36464
119 lines
4.4 KiB
C
119 lines
4.4 KiB
C
/* Declarations for objc-act.c.
|
|
Copyright (C) 1990, 2000 Free Software Foundation, Inc.
|
|
|
|
This file is part of GNU CC.
|
|
|
|
GNU CC is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 2, or (at your option)
|
|
any later version.
|
|
|
|
GNU CC is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with GNU CC; see the file COPYING. If not, write to
|
|
the Free Software Foundation, 59 Temple Place - Suite 330,
|
|
Boston, MA 02111-1307, USA. */
|
|
|
|
|
|
/*** Public Interface (procedures) ***/
|
|
|
|
/* used by yyparse */
|
|
|
|
void finish_file PARAMS ((void));
|
|
tree start_class PARAMS ((enum tree_code, tree, tree, tree));
|
|
tree continue_class PARAMS ((tree));
|
|
void finish_class PARAMS ((tree));
|
|
void start_method_def PARAMS ((tree));
|
|
void continue_method_def PARAMS ((void));
|
|
void finish_method_def PARAMS ((void));
|
|
tree start_protocol PARAMS ((enum tree_code, tree, tree));
|
|
void finish_protocol PARAMS ((tree));
|
|
void add_objc_decls PARAMS ((void));
|
|
|
|
tree is_ivar PARAMS ((tree, tree));
|
|
int is_private PARAMS ((tree));
|
|
int is_public PARAMS ((tree, tree));
|
|
tree add_instance_variable PARAMS ((tree, int, tree, tree, tree));
|
|
tree add_class_method PARAMS ((tree, tree));
|
|
tree add_instance_method PARAMS ((tree, tree));
|
|
tree get_super_receiver PARAMS ((void));
|
|
tree get_class_ivars PARAMS ((tree));
|
|
tree get_class_reference PARAMS ((tree));
|
|
tree get_static_reference PARAMS ((tree, tree));
|
|
tree get_object_reference PARAMS ((tree));
|
|
tree build_message_expr PARAMS ((tree));
|
|
tree build_selector_expr PARAMS ((tree));
|
|
tree build_ivar_reference PARAMS ((tree));
|
|
tree build_keyword_decl PARAMS ((tree, tree, tree));
|
|
tree build_method_decl PARAMS ((enum tree_code, tree, tree, tree));
|
|
tree build_protocol_expr PARAMS ((tree));
|
|
tree build_objc_string_object PARAMS ((tree));
|
|
|
|
extern tree objc_ivar_chain;
|
|
extern tree objc_method_context;
|
|
extern tree objc_ellipsis_node;
|
|
|
|
void objc_declare_alias PARAMS ((tree, tree));
|
|
void objc_declare_class PARAMS ((tree));
|
|
|
|
extern int objc_receiver_context;
|
|
|
|
/* the following routines are used to implement statically typed objects */
|
|
|
|
int objc_comptypes PARAMS ((tree, tree, int));
|
|
void objc_check_decl PARAMS ((tree));
|
|
|
|
/* NeXT extensions */
|
|
|
|
tree build_encode_expr PARAMS ((tree));
|
|
|
|
/* Objective-C structures */
|
|
|
|
/* KEYWORD_DECL */
|
|
#define KEYWORD_KEY_NAME(DECL) ((DECL)->decl.name)
|
|
#define KEYWORD_ARG_NAME(DECL) ((DECL)->decl.arguments)
|
|
|
|
/* INSTANCE_METHOD_DECL, CLASS_METHOD_DECL */
|
|
#define METHOD_SEL_NAME(DECL) ((DECL)->decl.name)
|
|
#define METHOD_SEL_ARGS(DECL) ((DECL)->decl.arguments)
|
|
#define METHOD_ADD_ARGS(DECL) ((DECL)->decl.result)
|
|
#define METHOD_DEFINITION(DECL) ((DECL)->decl.initial)
|
|
#define METHOD_ENCODING(DECL) ((DECL)->decl.context)
|
|
|
|
/* CLASS_INTERFACE_TYPE, CLASS_IMPLEMENTATION_TYPE,
|
|
CATEGORY_INTERFACE_TYPE, CATEGORY_IMPLEMENTATION_TYPE,
|
|
PROTOCOL_INTERFACE_TYPE */
|
|
#define CLASS_NAME(CLASS) ((CLASS)->type.name)
|
|
#define CLASS_SUPER_NAME(CLASS) ((CLASS)->type.context)
|
|
#define CLASS_IVARS(CLASS) TREE_VEC_ELT (TYPE_BINFO (CLASS), 0)
|
|
#define CLASS_RAW_IVARS(CLASS) TREE_VEC_ELT (TYPE_BINFO (CLASS), 1)
|
|
#define CLASS_NST_METHODS(CLASS) ((CLASS)->type.minval)
|
|
#define CLASS_CLS_METHODS(CLASS) ((CLASS)->type.maxval)
|
|
#define CLASS_STATIC_TEMPLATE(CLASS) TREE_VEC_ELT (TYPE_BINFO (CLASS), 2)
|
|
#define CLASS_CATEGORY_LIST(CLASS) TREE_VEC_ELT (TYPE_BINFO (CLASS), 3)
|
|
#define CLASS_PROTOCOL_LIST(CLASS) TREE_VEC_ELT (TYPE_BINFO (CLASS), 4)
|
|
#define PROTOCOL_NAME(CLASS) ((CLASS)->type.name)
|
|
#define PROTOCOL_LIST(CLASS) TREE_VEC_ELT (TYPE_BINFO (CLASS), 0)
|
|
#define PROTOCOL_NST_METHODS(CLASS) ((CLASS)->type.minval)
|
|
#define PROTOCOL_CLS_METHODS(CLASS) ((CLASS)->type.maxval)
|
|
#define PROTOCOL_FORWARD_DECL(CLASS) TREE_VEC_ELT (TYPE_BINFO (CLASS), 1)
|
|
#define TYPE_PROTOCOL_LIST(TYPE) ((TYPE)->type.context)
|
|
|
|
/* Define the Objective-C or Objective-C++ language-specific tree codes. */
|
|
|
|
#define DEFTREECODE(SYM, NAME, TYPE, LENGTH) SYM,
|
|
enum objc_tree_code {
|
|
#ifdef OBJCPLUS
|
|
dummy_tree_code = LAST_CPLUS_TREE_CODE,
|
|
#else
|
|
dummy_tree_code = LAST_C_TREE_CODE,
|
|
#endif
|
|
#include "objc-tree.def"
|
|
LAST_OBJC_TREE_CODE
|
|
};
|
|
#undef DEFTREECODE
|