diff options
author | Alexandre Petit-Bianco <apbianco@cygnus.com> | 1998-10-14 15:11:04 +0000 |
---|---|---|
committer | Alexandre Petit-Bianco <apbianco@gcc.gnu.org> | 1998-10-14 08:11:04 -0700 |
commit | b9f7e36ca11532cc83c391bf6fdca7071d8618ce (patch) | |
tree | abdec231f9282d5f9096a1af817d6c94aeaa30b5 /gcc/java/java-tree.h | |
parent | 8e30605ec7cb35fe97378ce25dec6ef99920c6a7 (diff) | |
download | gcc-b9f7e36ca11532cc83c391bf6fdca7071d8618ce.zip gcc-b9f7e36ca11532cc83c391bf6fdca7071d8618ce.tar.gz gcc-b9f7e36ca11532cc83c391bf6fdca7071d8618ce.tar.bz2 |
decl.c (runtime_exception_type_node, [...]): New global variables.
Tue Oct 13 03:50:28 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
* decl.c (runtime_exception_type_node, error_exception_type_node):
New global variables.
(init_decl_processing): Initialized.
* expr.c (java_lang_expand_expr): Set caught exception type to
null if catch handler argument doesn't exit.
* java-tree.def (SYNCHRONIZED_EXPR, THROW_EXPR): New Java specific
tree codes.
* java-tree.h (runtime_exception_type_node,
error_exception_type_node): Global variables declared.
(DECL_FUNCTION_THROWS): New macro.
(DECL_FUNCTION_BODY): Modified comment.
(DECL_SPECIFIC_COUNT): Likewise.
(struct lang_decl): New field throws_list.
(IS_UNCHECKED_EXPRESSION_P): New macro.
* lex.c (java_lex): Generate location information for THROW_TK.
* parse.h (PUSH_EXCEPTIONS, POP_EXCEPTIONS, IN_TRY_BLOCK_P,
EXCEPTIONS_P): New macros.
(enum jdep_code): New value JDEP_EXCEPTION.
(BUILD_MONITOR_ENTER, BUILD_MONITOR_EXIT,
BUILD_ASSIGN_EXCEPTION_INFO, BUILD_THROW, SET_WFL_OPERATOR,
PATCH_METHOD_RETURN_ERROR): New macros.
(patch_method_invocation_stmt): Added new argument to prototype.
(patch_synchronized_statement, patch_throw_statement,
check_thrown_exceptions, check_thrown_exceptions_do,
purge_unchecked_exceptions, check_throws_clauses): New function
prototypes.
* parse.y Fixed typo in keyword section.
(throw:): Rule tagged <node>.
(THROW_TK): Keyword tagged <operator>.
(method_header:): Last argument to call to method_header passed
from throws: rule.
(throws:, class_type_list:, throw_statement:,
synchronized_statement:, synchronized:): Defined actions.
(method_header): New local variable current. Register exceptions
from throws clause.
(java_complete_tree): Complete and verify exceptions from throws
clause.
(complete_class_report_errors): Error message on exceptions not
found
(java_check_regular_methods): Fixed typo. Shortcut on private
overriding methods. Changed error message on method
redefinition. Check for throws clause compatibility.
(check_throws_clauses): New function.
(java_check_abstract_methods): Use DECL_NAME for wfl or current
method. Changed error message on method redefinition.
(currently_caught_type_list): New static variable.
(java_complete_expand_methods): Purge unchecked exceptions from
throws clause list. Call PUSH_EXCEPTIONS before walk and
POP_EXCEPTIONS after.
(resolve_qualified_expression_name): Pass new argument as NULL to
patch_method_invocation_stmt.
(patch_method_invocation_stmt): New argument ref_decl. Invoke
PATCH_METHOD_RETURN_ERROR when returning with error. Reverse
argument list when appropriate. Use new argument if non null to
store selected method decl.
(patch_invoke): Convert if necessary args of builtin types before
forming CALL_EXPR. Argument list no longer reversed here.
(invocation_mode): Treat final methods as static methods.
(java_complete_tree): New cases for THROW_EXPR: and
SYNCHRONIZED_EXPR:. Check thrown exceptions when completing
function call.
(complete_function_arguments): No more RECORD_TYPE
conversion. Function parameter nodes no longer saved.
(valid_ref_assignconv_cast_p): Avoid handling null type.
(patch_binop): Fixed null constant reference handling.
(build_try_statement): Use BUILD_ASSIGN_EXCEPTION_INFO and
BUILD_THROW macros.
(patch_try_statement): Fixed comments. Record caught types in
list, push the list, expand try block and pop the list.
(patch_synchronized_statement, patch_throw_statement,
check_thrown_exceptions, check_thrown_exceptions_do,
purge_unchecked_exceptions): New functions.
* typeck.c (lookup_argument_method): Allow WFL in place of method
DECL_NAME during method definition check
Implements the `synchronized' statement, the `throw' statements and
the `throws' clause. Fixes method invocation bugs.
From-SVN: r23087
Diffstat (limited to 'gcc/java/java-tree.h')
-rw-r--r-- | gcc/java/java-tree.h | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/gcc/java/java-tree.h b/gcc/java/java-tree.h index 1cc5f46..926d7e3 100644 --- a/gcc/java/java-tree.h +++ b/gcc/java/java-tree.h @@ -175,6 +175,8 @@ extern tree object_type_node; extern tree object_ptr_type_node; extern tree string_type_node; extern tree throwable_type_node; +extern tree runtime_exception_type_node; +extern tree error_exception_type_node; extern tree byte_array_type_node; extern tree short_array_type_node; @@ -317,8 +319,14 @@ struct lang_identifier #define DECL_MAX_STACK(DECL) (DECL_LANG_SPECIFIC(DECL)->max_stack) /* Number of local variable slots needed for the arguments of this function. */ #define DECL_ARG_SLOT_COUNT(DECL) (DECL_LANG_SPECIFIC(DECL)->arg_slot_count) -/* Pointer to the function's COMPOUND_EXPR tree */ +/* List of checked thrown exceptions, as specified with the `throws' + keyword */ +#define DECL_FUNCTION_THROWS(DECL) (DECL_LANG_SPECIFIC(DECL)->throws_list) +/* Pointer to the function's current's COMPOUND_EXPR tree (while + completing its body) or the function's block */ #define DECL_FUNCTION_BODY(DECL) (DECL_LANG_SPECIFIC(DECL)->function_decl_body) +/* How specific the function is (for method selection - Java source + code front-end */ #define DECL_SPECIFIC_COUNT(DECL) DECL_ARG_SLOT_COUNT(DECL) /* In a LABEL_DECL, a TREE_VEC that saves the type_map at that point. */ @@ -391,6 +399,7 @@ struct lang_decl long localvariables_offset; int arg_slots; int max_locals, max_stack, arg_slot_count; + tree throws_list; /* Exception specified by `throws' */ tree function_decl_body; /* Hold all function's statements */ }; @@ -726,3 +735,8 @@ extern tree *type_map; /* Using a CATCH_EXPR node */ #define CATCH_EXPR_GET_EXPR(NODE, V) (V ? LABELED_BLOCK_BODY (NODE) : (NODE)) + +/* Non zero if TYPE is an unchecked expression */ +#define IS_UNCHECKED_EXPRESSION_P(TYPE) \ + (inherits_from_p ((TYPE), runtime_exception_type_node) \ + || inherits_from_p ((TYPE), error_exception_type_node)) |