Commit c877974e by Alexandre Petit-Bianco Committed by Alexandre Petit-Bianco

class.c (unmangle_classname): Set QUALIFIED_P when appropriate.

Wed Nov 18 23:54:53 1998  Alexandre Petit-Bianco  <apbianco@cygnus.com>
	* class.c (unmangle_classname): Set QUALIFIED_P when appropriate.
	(layout_class): Cope with methods featuring WFL in decl names.
	* decl.c (unqualified_object_id_node): New global variable,
 	initialized.
	(build_decl_no_layout): Removed.
	* expr.c (build_primtype_type_ref): Handle Double.
	(java_lang_expand_expr): Fixed indentations.
	* java-tree.h (CLASS_METHOD_CHECKED_P): Flag deleted.
	(flag_wall, flag_redundant, flag_not_overriding,
 	flag_static_local_jdk1_1, unqualified_object_id_node): Global
 	variable declarations.
	(build_decl_no_layout): Removed prototype.
	(java_get_real_method_name): Added prototype.
	(IS_UNCHECKED_EXPRESSION_P): Renamed IS_UNCHECKED_EXCEPTION_P.
	(java_parse_abort_on_error): Macro now just returns.
	* jcf-parse.c (jcf_parse_source): Check fclose returned
 	value. Call emit_register_classes if java_report_errors returns
 	zero.
	* lanc.c (flag_wall, flag_redundant, flag_not_overriding,
 	flag_static_local_jdk1_1): New integer flags.
	(lang_decode_option): New flags set here.
	* parse.h (GET_REAL_TYPE, GET_METHOD_NAME): New macros.
	(OBSOLETE_MODIFIER_WARNING): Issue error message conditionally to
 	the flag_redundant variable.
	(SET_TYPE_FOR_RESOLUTION): Consider Object being java.lang.Object
 	when parsing java.lang.Object class.
	(BUILD_MONITOR_ENTER, BUILD_MONITOR_EXIT): Added terminal
 	NULL_TREE to build.
	(resolve_qualified_expression_name): Fixed indentation.
	(patch_array_ref): Changed prototype.
	(not_initialized_as_it_should_p): Prototype removed.
	(java_report_errors): Added function prototype.
	* parse.y (formal_parameter:): Changed error message for not yet
 	supported final parameters.
	(class_type_list:): Set both PURPOSE and VALUE of created
 	TREE_LIST to be class_type.
	(primary_no_new_array:): Handle class literals on primitive types.
	(parse_warning_context): Reinstalled correct force_error and
 	do_warning flags setups.
	(java_report_errors): Changed prototype. Return java_error_count
 	value.
	(variable_redefinition_error): Consider treating variable type as
 	a fake pointer.
	(create_interface): Warn about redundant abstract modifier if
 	flag_redundant is set. Changed error message.
	(lookup_field_wrapper): Save/restore globals before/after looking
 	up field.
	(duplicate_declaration_error_p): Consider treating declaration
 	type as a fake pointer.
	(register_fields): Extract real type from dependency node. Check
 	for duplicate field declaration after type adjustment. Use
 	DECL_INITIAL to store static final initialized values.
	(method_header): Extract real function type from dependency node.
	(check_abstract_method_header): Use GET_METHOD_NAME.
	(obtain_incomplete_type): Layout fake pointer type.
	(safe_layout_class): Don't try to check for methods before layout.
	(java_complete_class): Don't check for correct throws clause
 	elements inheritance here.
	(resolve_and_layout): Broadened name parameter meaning.
	(reset_method_name): Use GET_METHOD_NAME.
	(java_get_real_method_name): New function.
	(java_check_regular_methods): Don't check methods in
 	java.lang.Object.  Verify lineage of throws clause elements. Use
 	flag_no_overriding in warning report.
	(check_throws_clauses): Don't check if class was from
 	bytecode. Use IS_UNCHECKED_EXCEPTION_P macro.
	(java_check_methods): Don't set CLASS_METHOD_CHECKED_P flag.
	(declare_local_variables): Use flag_static_local_jdk1_1 to report
 	warning on unsupported final local variables. Use build_decl
 	instead of build_decl_no_layout. Get real local variable type from
 	dependency node.
	(source_start_java_method): Get real parameter type from
 	dependency node. Call build_decl instead of build_decl_no_layout.
	(java_layout_classes): Reverse tree and layout type and class as
 	required. Mark class as loaded when done.
	(resolve_field_access): Fixed indentation. Restricted condition
 	leading to static field access code generation. Set field_type
 	decl's TREE_TYPE if QUAL_DECL_TYPE not available.
	(resolve_qualified_expression_name): Initialize type_found to
 	null. Handle static field resolved during qualification. Fixed
 	layout on non primitive field decl types.
	(not_accessible_p): Fixed typo in comment.
	(patch_method_invocation): Resolve and layout class to search from
 	type.
	(lookup_method_invoke): Keep integer constant 0 as is. Resolve and
 	layout non primitive type, if necessary. Make method node only to
 	report errors.
	(find_applicable_accessible_methods_list): Consider WFL'ed method
 	decl names. Fixed indentation.
	(argument_types_convertible): Resolve and layout target type if
 	necessary.
	(java_complete_tree): Fixed indentation problems. Rewrote
 	CALL_EXPR thrown exceptions check. Re-installed further processing
 	of the assignment in certain cases.
	(patch_assignment): Call maybe_build_primttype_type_ref to perform
 	inlining on class literals.
	(valid_builtin_assignconv_identity_widening_p): Cope with constant
 	0 literal.
	(valid_method_invocation_conversion_p): Likewise.
	(patch_string): Temporary disable forbidden use of `this' in
 	explicit constructor invocations when doing string concatenation
 	within their scope.
	(patch_unaryop): Added comment. Reinstalled code to disable
 	further check on assignment operation with cast expression RHS.
	(patch_switch_statement): Fixed indentation.
	(build_try_statement): Call build_decl instead of
 	build_decl_no_layout.
	(patch_synchronized_statement): Likewise.
	(patch_throw_statement): Use IS_UNCHECKED_EXCEPTION_P instead of
 	IS_UNCHECKED_EXPRESSION_P.
	(check_thrown_exceptions_do): Changed leading comment. Resolve and
 	layout argument exception type.
	(purge_unchecked_exceptions): Use IS_UNCHECKED_EXCEPTION_P instead
 	of IS_UNCHECKED_EXPRESSION_P.
Fixed problems found when compiling a mixture of .class and .java
files in the same package. Some support for the compilation of libjava.

From-SVN: r23704
parent 42316565
Wed Nov 18 23:54:53 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
* class.c (unmangle_classname): Set QUALIFIED_P when appropriate.
(layout_class): Cope with methods featuring WFL in decl names.
* decl.c (unqualified_object_id_node): New global variable,
initialized.
(build_decl_no_layout): Removed.
* expr.c (build_primtype_type_ref): Handle Double.
(java_lang_expand_expr): Fixed indentations.
* java-tree.h (CLASS_METHOD_CHECKED_P): Flag deleted.
(flag_wall, flag_redundant, flag_not_overriding,
flag_static_local_jdk1_1, unqualified_object_id_node): Global
variable declarations.
(build_decl_no_layout): Removed prototype.
(java_get_real_method_name): Added prototype.
(IS_UNCHECKED_EXPRESSION_P): Renamed IS_UNCHECKED_EXCEPTION_P.
(java_parse_abort_on_error): Macro now just returns.
* jcf-parse.c (jcf_parse_source): Check fclose returned
value. Call emit_register_classes if java_report_errors returns
zero.
* lanc.c (flag_wall, flag_redundant, flag_not_overriding,
flag_static_local_jdk1_1): New integer flags.
(lang_decode_option): New flags set here.
* parse.h (GET_REAL_TYPE, GET_METHOD_NAME): New macros.
(OBSOLETE_MODIFIER_WARNING): Issue error message conditionally to
the flag_redundant variable.
(SET_TYPE_FOR_RESOLUTION): Consider Object being java.lang.Object
when parsing java.lang.Object class.
(BUILD_MONITOR_ENTER, BUILD_MONITOR_EXIT): Added terminal
NULL_TREE to build.
(resolve_qualified_expression_name): Fixed indentation.
(patch_array_ref): Changed prototype.
(not_initialized_as_it_should_p): Prototype removed.
(java_report_errors): Added function prototype.
* parse.y (formal_parameter:): Changed error message for not yet
supported final parameters.
(class_type_list:): Set both PURPOSE and VALUE of created
TREE_LIST to be class_type.
(primary_no_new_array:): Handle class literals on primitive types.
(parse_warning_context): Reinstalled correct force_error and
do_warning flags setups.
(java_report_errors): Changed prototype. Return java_error_count
value.
(variable_redefinition_error): Consider treating variable type as
a fake pointer.
(create_interface): Warn about redundant abstract modifier if
flag_redundant is set. Changed error message.
(lookup_field_wrapper): Save/restore globals before/after looking
up field.
(duplicate_declaration_error_p): Consider treating declaration
type as a fake pointer.
(register_fields): Extract real type from dependency node. Check
for duplicate field declaration after type adjustment. Use
DECL_INITIAL to store static final initialized values.
(method_header): Extract real function type from dependency node.
(check_abstract_method_header): Use GET_METHOD_NAME.
(obtain_incomplete_type): Layout fake pointer type.
(safe_layout_class): Don't try to check for methods before layout.
(java_complete_class): Don't check for correct throws clause
elements inheritance here.
(resolve_and_layout): Broadened name parameter meaning.
(reset_method_name): Use GET_METHOD_NAME.
(java_get_real_method_name): New function.
(java_check_regular_methods): Don't check methods in
java.lang.Object. Verify lineage of throws clause elements. Use
flag_no_overriding in warning report.
(check_throws_clauses): Don't check if class was from
bytecode. Use IS_UNCHECKED_EXCEPTION_P macro.
(java_check_methods): Don't set CLASS_METHOD_CHECKED_P flag.
(declare_local_variables): Use flag_static_local_jdk1_1 to report
warning on unsupported final local variables. Use build_decl
instead of build_decl_no_layout. Get real local variable type from
dependency node.
(source_start_java_method): Get real parameter type from
dependency node. Call build_decl instead of build_decl_no_layout.
(java_layout_classes): Reverse tree and layout type and class as
required. Mark class as loaded when done.
(resolve_field_access): Fixed indentation. Restricted condition
leading to static field access code generation. Set field_type
decl's TREE_TYPE if QUAL_DECL_TYPE not available.
(resolve_qualified_expression_name): Initialize type_found to
null. Handle static field resolved during qualification. Fixed
layout on non primitive field decl types.
(not_accessible_p): Fixed typo in comment.
(patch_method_invocation): Resolve and layout class to search from
type.
(lookup_method_invoke): Keep integer constant 0 as is. Resolve and
layout non primitive type, if necessary. Make method node only to
report errors.
(find_applicable_accessible_methods_list): Consider WFL'ed method
decl names. Fixed indentation.
(argument_types_convertible): Resolve and layout target type if
necessary.
(java_complete_tree): Fixed indentation problems. Rewrote
CALL_EXPR thrown exceptions check. Re-installed further processing
of the assignment in certain cases.
(patch_assignment): Call maybe_build_primttype_type_ref to perform
inlining on class literals.
(valid_builtin_assignconv_identity_widening_p): Cope with constant
0 literal.
(valid_method_invocation_conversion_p): Likewise.
(patch_string): Temporary disable forbidden use of `this' in
explicit constructor invocations when doing string concatenation
within their scope.
(patch_unaryop): Added comment. Reinstalled code to disable
further check on assignment operation with cast expression RHS.
(patch_switch_statement): Fixed indentation.
(build_try_statement): Call build_decl instead of
build_decl_no_layout.
(patch_synchronized_statement): Likewise.
(patch_throw_statement): Use IS_UNCHECKED_EXCEPTION_P instead of
IS_UNCHECKED_EXPRESSION_P.
(check_thrown_exceptions_do): Changed leading comment. Resolve and
layout argument exception type.
(purge_unchecked_exceptions): Use IS_UNCHECKED_EXCEPTION_P instead
of IS_UNCHECKED_EXPRESSION_P.
Sun Nov 15 17:14:17 1998 Per Bothner <bothner@cygnus.com>
* jvgenmain.c: Need to #include "gansidecl.h" (to get PROTO).
......
......@@ -138,7 +138,10 @@ tree
unmangle_classname (name, name_length)
const char *name; int name_length;
{
return ident_subst (name, name_length, "", '/', '.', "");
tree to_return = ident_subst (name, name_length, "", '/', '.', "");
if (to_return != get_identifier ((char *)name))
QUALIFIED_P (to_return) = 1;
return to_return;
}
tree
......@@ -1375,6 +1378,10 @@ layout_class (this_class)
char buf[8];
char *asm_name;
tree method_name = DECL_NAME (method_decl);
int method_name_is_wfl =
(TREE_CODE (method_name) == EXPR_WITH_FILE_LOCATION);
if (method_name_is_wfl)
method_name = java_get_real_method_name (method_decl);
#if 1
/* Remove this once we no longer need old (Kaffe / JDK 1.0) mangling. */
if (! flag_assume_compiled && METHOD_NATIVE (method_decl))
......@@ -1492,7 +1499,10 @@ layout_class (this_class)
if (*ptr++ == '.')
p = ptr;
}
DECL_NAME (method_decl) = get_identifier (p);
if (method_name_is_wfl)
EXPR_WFL_NODE (DECL_NAME (method_decl)) = get_identifier (p);
else
DECL_NAME (method_decl) = get_identifier (p);
DECL_CONSTRUCTOR_P (method_decl) = 1;
}
else if (! METHOD_STATIC (method_decl) && !DECL_ARTIFICIAL (method_decl))
......
......@@ -247,6 +247,7 @@ tree current_function_decl;
tree char_type_node;
tree object_type_node;
tree unqualified_object_id_node;
tree object_ptr_type_node;
tree string_type_node;
tree throwable_type_node;
......@@ -520,6 +521,7 @@ init_decl_processing ()
double_type_node));
layout_type (double_type_node);
unqualified_object_id_node = get_identifier ("Object");
object_type_node = lookup_class (get_identifier ("java.lang.Object"));
object_ptr_type_node = promote_type (object_type_node);
string_type_node = lookup_class (get_identifier ("java.lang.String"));
......@@ -1596,13 +1598,3 @@ end_java_method ()
current_function_decl = NULL_TREE;
permanent_allocation (1);
}
tree
build_decl_no_layout (code, name, type)
enum tree_code code;
tree name, type;
{
tree decl = build_decl (TYPE_DECL, name, type);
TREE_SET_CODE (decl, code);
return decl;
}
......@@ -1674,6 +1674,8 @@ build_primtype_type_ref (self_name)
typ = long_type_node;
else if (strncmp(class_name, "Float", 5) == 0)
typ = float_type_node;
else if (strncmp(class_name, "Double", 6) == 0)
typ = double_type_node;
else if (strncmp(class_name, "Boolean", 7) == 0)
typ = boolean_type_node;
else if (strncmp(class_name, "Char", 4) == 0)
......@@ -1761,7 +1763,8 @@ java_lang_expand_expr (exp, target, tmode, modifier)
{
tree duplicate;
if (pushcase (TREE_OPERAND (exp, 0), case_identity,
build_decl (LABEL_DECL, NULL_TREE, NULL_TREE), &duplicate) == 2)
build_decl (LABEL_DECL, NULL_TREE, NULL_TREE),
&duplicate) == 2)
{
EXPR_WFL_LINECOL (wfl_operator) = EXPR_WFL_LINECOL (exp);
parse_error_context
......@@ -1772,7 +1775,8 @@ java_lang_expand_expr (exp, target, tmode, modifier)
}
case DEFAULT_EXPR:
pushcase (NULL_TREE, 0, build_decl (LABEL_DECL, NULL_TREE, NULL_TREE), NULL);
pushcase (NULL_TREE, 0,
build_decl (LABEL_DECL, NULL_TREE, NULL_TREE), NULL);
return const0_rtx;
case SWITCH_EXPR:
......
......@@ -58,7 +58,6 @@ struct JCF;
6: CAN_COMPLETE_NORMALLY (in statement nodes).
Usage of TYPE_LANG_FLAG_?:
0: CLASS_METHOD_CHECKED_P (in RECORD_TYPE)
1: TYPE_ARRAY_P (in RECORD_TYPE).
2: CLASS_LOADED_P (in RECORD_TYPE).
3: CLASS_FROM_SOURCE_P (in RECORD_TYPE).
......@@ -125,6 +124,12 @@ extern int flag_assume_compiled;
extern int flag_emit_class_files;
/* Turned to 1 if -Wall was encountered. See lang.c for their meanings. */
extern int flag_wall;
extern int flag_redundant;
extern int flag_not_overriding;
extern int flag_static_local_jdk1_1;
/* The Java .class file that provides main_class; the main input file. */
extern struct JCF main_jcf[1], *current_jcf;
......@@ -182,6 +187,7 @@ extern tree float_type_node;
extern tree double_type_node;
extern tree object_type_node;
extern tree unqualified_object_id_node;
extern tree object_ptr_type_node;
extern tree string_type_node;
extern tree throwable_type_node;
......@@ -518,7 +524,6 @@ extern tree build_field_ref PROTO ((tree, tree, tree));
extern void pushdecl_force_head PROTO ((tree));
extern tree build_java_binop PROTO ((enum tree_code, tree, tree, tree));
extern tree binary_numeric_promotion PROTO ((tree, tree, tree *, tree *));
extern tree build_decl_no_layout PROTO ((enum tree_code, tree, tree));
extern tree build_java_arrayaccess PROTO ((tree, tree, tree));
extern tree build_newarray PROTO ((int, tree));
extern tree build_anewarray PROTO ((tree, tree));
......@@ -548,6 +553,7 @@ extern void write_classfile PROTO ((tree));
extern char *print_int_node PROTO ((tree));
extern void parse_error_context VPROTO ((tree cl, char *msg, ...));
extern tree build_primtype_type_ref PROTO ((char *));
extern tree java_get_real_method_name PROTO ((tree));
/* Access flags etc for a method (a FUNCTION_DECL): */
......@@ -679,9 +685,6 @@ extern tree *type_map;
/* FIXME this use of TREE_TYPE conflicts with something or other. */
#define TYPE_ARRAY_ELEMENT(ATYPE) TREE_TYPE(ATYPE)
/* True if methods in class TYPE have been checked. */
#define CLASS_METHOD_CHECKED_P(TYPE) TYPE_LANG_FLAG_0 (TYPE)
/* True if class TYPE has been loaded. */
#define CLASS_LOADED_P(TYPE) TYPE_LANG_FLAG_2 (TYPE)
......@@ -819,8 +822,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) \
/* Non zero if TYPE is an unchecked exception */
#define IS_UNCHECKED_EXCEPTION_P(TYPE) \
(inherits_from_p ((TYPE), runtime_exception_type_node) \
|| inherits_from_p ((TYPE), error_exception_type_node))
......@@ -830,8 +833,5 @@ extern tree *type_map;
{ \
extern int java_error_count; \
if (java_error_count) \
{ \
java_report_errors (); \
return; \
} \
return; \
}
......@@ -271,12 +271,10 @@ get_constant (jcf, index)
#ifdef REAL_ARITHMETIC
d = REAL_VALUE_FROM_TARGET_DOUBLE (num);
#else
{
union { double d; jint i[2]; } u;
u.i[0] = (jint) num[0];
u.i[1] = (jint) num[1];
d = u.d;
}
union { double d; jint i[2]; } u;
u.i[0] = (jint) num[0];
u.i[1] = (jint) num[1];
d = u.d;
#endif
value = build_real (double_type_node, d);
break;
......@@ -529,6 +527,9 @@ jcf_parse_source (jcf)
fatal ("input file `%s' just disappeared - jcf_parse_source",
input_filename);
parse_source_file (file);
if (fclose (finput))
fatal ("can't close input file `%s' stream - jcf_parse_source",
input_filename);
java_pop_parser_context (IS_A_COMMAND_LINE_FILENAME_P (file));
java_parser_context_restore_global ();
}
......@@ -782,8 +783,13 @@ yyparse ()
break;
}
}
if (main_jcf->read_state && fclose (main_jcf->read_state))
fatal ("failed to close input file `%s' - yyparse",
(main_jcf->filename ? main_jcf->filename : "<unknown>"));
java_expand_classes ();
if (! flag_emit_class_files)
if (!java_report_errors () && !flag_emit_class_files)
emit_register_classes ();
return 0;
}
......
......@@ -87,7 +87,19 @@ int flag_assume_compiled = 1;
int flag_emit_class_files = 0;
/* From gcc/flags.h, and idicates if exceptions are turned on or not. */
/* When non zero, -Wall was turned on. */
int flag_wall = 0;
/* When non zero, check for redundant modifier uses. */
int flag_redundant = 0;
/* When non zero, warns about overridings that don't occur. */
int flag_not_overriding = 0;
/* When non zero, warns that final local are treated as non final. */
int flag_static_local_jdk1_1 = 0;
/* From gcc/flags.h, and indicates if exceptions are turned on or not. */
extern int flag_new_exceptions;
extern int flag_exceptions;
......@@ -187,6 +199,14 @@ lang_decode_option (argc, argv)
return found;
}
if (strcmp (p, "-Wall") == 0)
{
flag_wall = 1;
flag_redundant = 1;
flag_not_overriding = 1;
flag_static_local_jdk1_1 = 1;
}
if (strcmp (p, "-MD") == 0)
{
jcf_dependency_init (1);
......
......@@ -122,11 +122,18 @@ extern tree stabilize_reference PROTO ((tree));
(s1 [0]=='S' ? "Supertype" : "supertype") : \
(s1 [0] > 'A' ? "Type" : "type")))
#define GET_REAL_TYPE(TYPE) \
(TREE_CODE (TYPE) == TREE_LIST ? TREE_PURPOSE (TYPE) : TYPE)
#define GET_METHOD_NAME(METHOD) \
(TREE_CODE (DECL_NAME (METHOD)) == EXPR_WITH_FILE_LOCATION ? \
EXPR_WFL_NODE (DECL_NAME (METHOD)) : DECL_NAME (METHOD))
/* Pedantic warning on obsolete modifiers. Note: when cl is NULL,
flags was set artificially, such as for a interface method */
#define OBSOLETE_MODIFIER_WARNING(cl, flags, modifier, format, arg) \
{ \
if ((cl) && ((flags) & (modifier))) \
if (flag_redundant && (cl) && ((flags) & (modifier))) \
parse_warning_context (cl, \
"Discouraged redundant use of `%s' modifier " \
"in declaration of " format, \
......@@ -411,22 +418,31 @@ static jdeplist *reverse_jdep_list ();
/* if TYPE can't be resolved, obtain something suitable for its
resolution (TYPE is saved in SAVE before being changed). and set
CHAIN to 1. Otherwise, type is set to something usable. CHAIN is
usually used to determine that a new DEP must be installed on TYPE. */
#define SET_TYPE_FOR_RESOLUTION(TYPE, SAVE, CHAIN) \
{ \
tree returned_type; \
(CHAIN) = 0; \
if (unresolved_type_p (type, &returned_type)) \
{ \
if (returned_type) \
(TYPE) = returned_type; \
else \
{ \
(SAVE) = (TYPE); \
(TYPE) = obtain_incomplete_type (TYPE); \
CHAIN = 1; \
} \
} \
usually used to determine that a new DEP must be installed on TYPE.
Note that when compiling java.lang.Object, references to Object are
java.lang.Object. */
#define SET_TYPE_FOR_RESOLUTION(TYPE, SAVE, CHAIN) \
{ \
tree returned_type; \
(CHAIN) = 0; \
if (TREE_TYPE (ctxp->current_parsed_class) == object_type_node \
&& TREE_CODE (TYPE) == EXPR_WITH_FILE_LOCATION \
&& EXPR_WFL_NODE (TYPE) == unqualified_object_id_node) \
(TYPE) = object_type_node; \
else \
{ \
if (unresolved_type_p (type, &returned_type)) \
{ \
if (returned_type) \
(TYPE) = returned_type; \
else \
{ \
(SAVE) = (TYPE); \
(TYPE) = obtain_incomplete_type (TYPE); \
CHAIN = 1; \
} \
} \
} \
}
/* Insert a DECL in the current block */
......@@ -489,7 +505,8 @@ static jdeplist *reverse_jdep_list ();
{ \
(WHERE) = build (CALL_EXPR, int_type_node, \
build_address_of (soft_monitorenter_node), \
build_tree_list (NULL_TREE, (ARG))); \
build_tree_list (NULL_TREE, (ARG)), \
NULL_TREE); \
TREE_SIDE_EFFECTS (WHERE) = 1; \
}
......@@ -497,7 +514,8 @@ static jdeplist *reverse_jdep_list ();
{ \
(WHERE) = build (CALL_EXPR, int_type_node, \
build_address_of (soft_monitorexit_node), \
build_tree_list (NULL_TREE, (ARG))); \
build_tree_list (NULL_TREE, (ARG)), \
NULL_TREE); \
TREE_SIDE_EFFECTS (WHERE) = 1; \
}
......@@ -709,18 +727,18 @@ static tree try_reference_assignconv PROTO ((tree, tree));
static tree build_unresolved_array_type PROTO ((tree));
static tree build_array_from_name PROTO ((tree, tree, tree, tree *));
static tree build_array_ref PROTO ((int, tree, tree));
static tree patch_array_ref PROTO ((tree, tree, tree));
static tree patch_array_ref PROTO ((tree));
static tree make_qualified_name PROTO ((tree, tree, int));
static tree merge_qualified_name PROTO ((tree, tree));
static tree make_qualified_primary PROTO ((tree, tree, int));
static int resolve_qualified_expression_name PROTO ((tree, tree *, tree *, tree *));
static int resolve_qualified_expression_name PROTO ((tree, tree *,
tree *, tree *));
static void qualify_ambiguous_name PROTO ((tree));
static void maybe_generate_clinit PROTO ((void));
static tree resolve_field_access PROTO ((tree, tree *, tree *));
static tree build_newarray_node PROTO ((tree, tree, int));
static tree patch_newarray PROTO ((tree));
static tree resolve_type_during_patch PROTO ((tree));
static int not_initialized_as_it_should_p PROTO ((tree));
static tree build_this PROTO ((int));
static tree build_return PROTO ((int, tree));
static tree patch_return PROTO ((tree));
......@@ -791,6 +809,7 @@ tree java_method_add_stmt PROTO ((tree, tree));
char *java_get_line_col PROTO ((char *, int, int));
void java_expand_switch PROTO ((tree));
tree java_get_catch_block PROTO ((tree, int));
int java_report_errors PROTO (());
#endif /* JC1_LITE */
/* Always in use, no matter what you compile */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment