* lang.c (flag_hash_synchronization): New global.
(lang_f_options): Added `hash-synchronization'.
* lang-options.h: Mention -fhash-synchronization.
* java-tree.h (flag_hash_synchronization): Declare.
* expr.c (java_lang_expand_expr): Only push `sync_info' value when
hash table synchronization is disabled.
* decl.c (init_decl_processing): Only push `sync_info' value when
hash table synchronization is disabled.
* class.c (make_class_data): Only push `sync_info' field when hash
table synchronization is disabled. Removed dead code.
From-SVN: r32593
2000-03-06 Bryce McKinlay <bryce@albatross.co.nz>
* decl.c (init_decl_processing): Added new class fields `depth',
`ancestors', and `idt' to class_type_node. Use
_Jv_LookupInterfaceMethodIdx for soft_lookupinterfacemthod_node.
* class.c (make_class_data): Push initial values for new fields.
* java-tree.h: Updated prototype for `build_invokeinterface'.
* expr.c (build_invokeinterface): Changed parameters to accept
`method' tree. Calculate index of `method' in its declaring
interface. Build call to _Jv_LookupInterfaceMethodIdx.
(expand_invoke): Call `build_invokeinterface' with new parameters.
* parse.y (patch_invoke): Call `build_invokeinterface' with new
parameters.
(This is Bryce McKinlay's implementation of the interfaces
constant-time dispatch and type checking techniques designed by Per
Bothner.)
From-SVN: r32381
2000-03-06 Bryce McKinlay <bryce@albatross.co.nz>
* typeck.c (lookup_do): Search superinterfaces first
when looking up an interface method. From Godmar Back
<gback@cs.utah.edu>
2000-03-02 Alexandre Petit-Bianco <apbianco@cygnus.com>
* java-tree.h (lookup_argument_method2): Declared.
(safe_layout_class): Prototype moved from parse.h.
* parse.h (safe_layout_class): Prototype moved to java-tree.h.
* parse.y (java_check_regular_methods): Local `super_class' gone.
Call lookup_argument_method2 instead of lookup_argument_method.
Perform modifier match for methods found declared in implemented
interfaces. Fixed indentation problem. Overriding/hiding error
report to take place only for methods found in classes.
* typeck.c (lookup_argument_method): Changed leading
comment. Re-written by calling lookup_do.
(lookup_argument_method2): New function.
(lookup_java_method): Re-written by calling lookup_do.
(lookup_do): New function.
From-SVN: r32376
* Makefile.in (JAVA_OBJS): Added boehm.o.
(boehm.o): New target.
* Make-lang.in (JAVA_SRCS): Added boehm.c.
* java-tree.h (flag_use_boehm_gc): Declare.
(get_boehm_type_descriptor): Declare.
* lang.c (lang_f_options): Added `use-boehm-gc'.
(flag_use_boehm_gc): New global.
* lang-options.h: Added -fuse-boehm-gc.
* boehm.c: New file.
* class.c (get_dispatch_table): If class uses a Boehm type
descriptor, put it in the vtable.
(make_class_data): Removed dead code.
From-SVN: r32331
* builtins.c (built_in_class_names, built_in_names): New variables.
* c-decl.c (finish_struct): Set specified size in DECL_SIZE.
* expr.c (expand_expr, case COMPONENT_REF): Get field size from
DECL_SIZE, not DECL_FIELD_SIZE.
* print-tree.c (print_node): Remove code that prints extra blank
lines in some cases.
Properly handle inline and builtin function cases.
* stor-layout.c (layout_decl): Get specified size from DEC_SIZE.
* tree.h (built_in_class_named, built_in_names): New declarations.
(union tree_decl): Rename internal unions to u1 and u2 and change
some of their components.
Add new field built_in_class.
(DECL_ALIGN, DECL_INCOMING_RTL, DECL_SAVED_INSNS, DECL_FRAME_SIZE):
Reflect above changes.
(DECL_FUNCTION_CODE, DECL_BUILT_IN_CLASS): Likewise.
(DECL_SET_FUNCTION_CODE, DECL_FIELD_SIZE): Deleted.
* objc/objc-act.c (objc_copy_list): Use DECL_SIZE, not DECL_FIELD_SIZE.
(encode_field_decl): Likewise; also remove obsolete test for bitfield.
* ch/ch-tree.h (DECL_ACTION_NESTING_LEVEL): Use new tree union name.
* ch/decl.c (finish_struct): Don't clear DECL_FIELD_SIZE.
* ch/typeck.c (make_chill_struct_type): Likewise.
(apply_decl_field_layout): General cleanup.
Set DECL_SIZE instead of DECL_FIELD_SIZE.
* cp/class.c (build_vtbl_or_vbase_field, check_methods): Don't clear
DECL_FIELD_SIZE.
(check_bitfield_decl, check_field_decls): Set DECL_SIZE, not
DECL_FIELD_SIZE.
* cp/rtti.c (expand_class_desc): Likewise.
* cp/cp-tree.h (DECL_INIT_PRIORITY): Use underlying union name.
(THUNK_VCALL_OFFSET): Likewise.
(THUNK_DELTA): Reflect changes in ../tree.h.
* java/java-tree.h (LABEL_PC): Relect name changes in ../tree.h.
(DECL_BIT_INDEX): Use underlying representation.
* java/parse.h (DECL_INHERITED_SOURCE_LINE): Likewise.
From-SVN: r32249
2000-02-25 Anthony Green <green@cygnus.com>
* expr.c (build_class_init): Mark the decl to be ignored by
check_init.
* java-tree.h (DECL_BIT_INDEX): Move definition from check-init.c
* check-init.c: Move DECL_BIT_INDEX to java-tree.h
* class.c (init_test_hash_newfunc): New function.
(decl_hash): New function.
(decl_compare): New function.
* decl.c (emit_init_test_initialization): New function.
(complete_start_java_method): Traverse the init test hashtable,
calling emit_init_test_initialization.
(always_initialize_class_p): Define.
* expr.c (build_class_init): Use initialization tests when
emitting class initialization code.
(always_initialize_class_p): Declare.
* jcf-parse.c (parse_class_file): Set always_initialize_class_p to
1.
* java-tree.h: Include hash.h.
(DECL_FUNCTION_INIT_TEST_TABLE): Define.
(struct lang_decl): Add init_test_table field.
(init_test_hash_entry): Define.
From-SVN: r32166
Fri Dec 24 00:25:29 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
* Makefile.in (LIBDEPS): Added gcc's errors.o
(../jcf-dump$(exeext):): Link with gcc's errors.o
(../gcjh$(exeext):): Likewise.
* expr.c (expand_java_NEW): Layout the entire target type instead of
laying out its methods only.
(lookup_field): Layout the class after having loaded it.
* java-tree.h (java_debug_context): Declared.
* jcf-io.c (toplev.h): Included.
(find_class): Removed assignment to jcf's outofsynch
field. Force source file to be read if newer than its matching
class file. Tweaked debug messages.
* jcf-parse.c (jcf_out_of_synch): Deleted.
(read_class): Call to jcf_out_of_synch removed.
* jcf.h (typedef struct JCF): Field `outofsynch' deleted.
(jcf_out_of_synch): Prototype deleted.
* parse.h (struct parser_ctxt): `minus_seen', `java_error_flag',
`deprecated' and `class_err': integer turned into bit fields.
New bit fields `saved_data_ctx' and `saved_data'. Fixed comments.
* parse.y (package_list): New global.
(package_declaration:): Record newly parsed package name.
(extra_ctxp_pushed_p): Static global deleted.
(java_parser_context_save_global): Create buffer context for the
purpose of saving globals, if necessary.
(java_parser_context_restore_global): Pop context pushed for the
purpose of saving globals, if necessary.
(java_debug_context_do): New prototype and function.
(java_debug_context): Likewise.
(do_resolve_class): Use already parsed package names to qualify
and lookup class candidate.
(java_pre_expand_clinit): Removed unnecessary local variable.
From-SVN: r31261
* constants.c (find_methodref_index): Unwrap method names before
inserting them in the constant pool.
* jcf-parse.c (jcf_parse): Display `interface' when appropriate.
* class.c (assume_compiled_node): New typedef.
(assume_compiled_tree): New static data.
(find_assume_compiled_node): New function.
(add_assume_compiled): New function.
(assume_compiled): New function.
* class.c (make_class_data): Use assume_compiled.
(is_compiled_class): Use assume_compiled.
* java-tree.h (add_assume_compiled): Declare.
* lang.c (lang_decode_option): Parse new options.
From-SVN: r30608
* class.c (finish_class): Remove unused parameter, all callers
changed.
* expr.c (build_java_athrow): Change return type to void.
(java_lang_expand_expr): Make sure each case in switch returns a
value.
* java-tree.h (finish_class): Fix prototype to take void args.
* jcf-dump.c (usage): Mark with ATTRIBUTE_NORETURN.
(main): Issue return from main, not exit.
* jcf-parse.c (parse_class_file): Fix call to `finish_class'.
* jcf.h (jcf_unexpected_eof): Mark with ATTRIBUTE_NORETURN.
* jv-scan.c (main): Issue return from main, not exit.
* parse.y (check_abstract_method_definitions,
java_check_abstract_method_definitions): Add static prototypes.
(java_complete_expand_methods): Fix call to `finish_class'.
* verify.c (verify_jvm_instructions): Initialize variables `oldpc'
and `prevpc'.
From-SVN: r29065
1999-07-15 Andrew Haley <aph@cygnus.com>
* lang.c (flag_use_divide_subroutine): New variable.
* typeck.c: (convert_ieee_real_to_integer): Bounds check
fp-to-integer conversion.
(convert): Call convert_ieee_real_to_integer when flag_fast_math
is not set.
* expr.c (build_java_soft_divmod): New function.
(build_java_binop): Call build_java_soft_divmod if
flag_use_divide_subroutine is set.
* decl.c: soft_idiv_node, soft_irem_node, soft_ldiv_node, tree
soft_lrem_node: new builtin functions.
(init_decl_processing) Initialize the new builtins.
* java-tree.h soft_idiv_node, soft_irem_node, soft_ldiv_node, tree
soft_lrem_node: new builtin functions.
(build_java_soft_divmod): New function.
* parse.y: Call build_java_soft_divmod if
flag_use_divide_subroutine is set.
From-SVN: r28208
Thu May 13 13:23:38 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
* check-init.c (check_init): Removed code accepting to see things
falling through default:, when doing xrefs.
* java-tree.h (do_not_fold): New global variable, declared.
* parse.y (do_not_fold): New global variable, defined.
(java_complete_expand_method): Set `do_not_fold' to the value of
`flag_emit_xref'. When doing xrefs: copy the thrown exceptions,
and reinstall them after them have been purged; do not check for
initializations; do not issue missing return errors.
(java_complete_lhs): Do not attempt to patch INSTANCEOF_EXPR nodes
when doing xrefs.
(patch_binop): Skip the fold part when doing xrefs.
(build_string_concatenation): Skip the concatenation part when
doing xrefs.
(patch_synchronized_statement): Do not generate a try-finally when
doing xrefs.
(patch_throw_statement): When doing xrefs, do not call BUILD_THROW
and keep the location where the throw was seen.
* typeck.c (convert): When `do_not_fold' is set, do not attempt
any treatment on the converted node an simply return a NOP_EXPR of
the targeted type.
* xref.c (xref_get_data): New function, defined.
* xref.h (xref_get_data): New function, declared.
(XREF_GET_DATA): Use xref_get_data.
From-SVN: r26926
d
* class.c (make_field_value): DECL_INITIAL may be a string literal;
temporarily zero it while calling rest_of_decl_compilation.
* java-tree.h (string_ptr_type_node): Add declaration.
* decl.c: Define and initialize string_ptr_type_node.
* parse.y (patch_string_cst): Use string_ptr_type_node.
* parse.h (LOOP_HAS_LABEL_P, LOOP_HAS_LABEL_SKIP_P): Removed.
* parse.y (for_statement): Now unconditionally exit_block.
(finish_labeled_statement): No longer exit_block if for-loop.
(patch_loop_statement): Check harder if the loop is already labeled.
* parse.y (patch_initialized_static_field): Removed function.
(maybe_generate_clinit): Removed special handling for interfaces.
(java_complete_expand_methods): Do a preliminary java_complete_tree
on <clinit> to determine if it can be removed.
(java_complete_expand_method): Remove special handling for <clinit>.
(java_complete_lhs): For BLOCK and EXPR_WITH_FILE_LOCATION
optimize if we get back empty_stmt_node.
For MODIFY_EXPR, re-do checking of static initializers.
(fold_constant_for_init): Don't return immediate if VAR_DECL.
For VAR_DECL, pass correct context.
From-SVN: r26790
Wed Apr 21 11:13:36 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
* decl.c (predef_filenames, predef_filenames_size): New globals
(init_decl_processing): predef_filenames and predef_filenames_size
initialized.
* java-tree.h (predef_filenames, predef_filenames_size): Declared
extern.
* jcf-parse.c (predefined_filename_p): New function.
(yyparse): Check that files on the command line are specified only
once and issue a warning otherwise.
* parse.h (JPRIMITIVE_TYPE_OR_VOID_P): New macro.
* parse.y (source_end_java_method): Nullify NOP method bodies, to
avoid a gcc warning with -W -Wall turned on.
(java_expand_classes): Abort if errors were encountered.
(java_complete_lhs): If the cross reference flag is set, wrap
field DECL node around a WFL when resolving expression name.
From-SVN: r26578
d
* parse.y (complete_loop_body): Rename to finish_loop_body.
(complete_labeled_statement): Rename to finish_labeled_statement.
(complete_for_loop): Rename to finish_for_loop.
(complete_method_declaration): Rename to finish_method_declaration.
* java-tree.h (continue_identifier_node): New global node.
* decl.c: Define and initialize continue_identifier_node.
* parse.y (generate_labeled_block): Remove - no longer needed.
(build_loop_body): Use continue_identifier_node for continue block.
(finish_labeled_statement): Also do pop_labeled_block actions.
(java_complete_lhs): POP_LOOP even if error.
(build_labeled_block): Special handling for continue_identifier_node.
(patch_loop_statement): Re-organize.
(patch_bc_statement): Re-write.
From-SVN: r26015
�
* lex.c (java_parse_end_comment): Take extra parameter (next char).
* class.c (build_utf8_ref): Fix possible name class/ambiguity.
* class.c (layout_class_method): A static method in a base class
is never overridden, so treat it like it doesn't exist.
However, do complain about private non-static method overriding
public static method.
* parse.y: Don't set unused INITIALIZED_P flag.
* java-tree.h (INITIALIZED_P): Removed no-longer needed flag.
* parse.y (find_expr_with_wfl): Optimize tail-calls.
(build_array_from_name): Re-order &index[string] to &string[index].
* parse.y (java_complete_tree): Don't call patch_assignment if rhs is
error_mark (it might catch more errors, but it is more likely to lose).
From-SVN: r25641
T
Force left-to-right evaluation of binary operations etc.
* expr.c (force_evaluation_order), java-tree.h: New function.
* parse.y (java_complete_lhs): Pass binary operations, procedure
calls, and ARRAY_REFs to force_evaluation_order.
(various): Set TREE_SIDE_EFFECTS more carefully.
Tolerate random (non-UTF8) encoding in comments without complaining.
* lex.c (java_read_char): Return 0xFFFE if bad UTF8 encoding.
(java_is_eol): Handle '\r' followed by '\n' instead of vice versa.
* parse.y (resolve_qualified_expression_name): Handle error_mark.
(java_complete_node case EXPR_WITH_FILE_LOCATION): Likewise.
* parse.y (java_complete_lhs): Ignore an empty statement in a
COMPOUND_EXPR. Don't complain about empty statement after return.
From-SVN: r25327
* Makefile.in (parse.o): Depend on $(CONFIG_H) and
$(srcdir)/../system.h.
(class.o): Depend on $(PARSE_H) and $(srcdir)/../output.h.
(jcf-parse.o): Depend on $(srcdir)/../toplev.h.
(jcf-write.o): Likewise.
(jv-scan.o): Depend on $(CONFIG_H) and $(srcdir)/../system.h.
(mangle.o): Depend on $(srcdir)/../toplev.h.
(parse-scan.o): Depend on $(CONFIG_H) and $(srcdir)/../system.h.
(zextract.o): Depend on $(CONFIG_H) and $(srcdir)/../system.h.
* class.c: Include output.h and parse.h.
(mangled_classname): Add the `const' keyword to a char*.
(find_named_method): Hide unused function definition.
(build_utf8_ref): Change type of variable `c' to unsigned char.
Use ISALPHA/ISDIGIT instead of isalpha/isdigit.
(build_class_ref): Add the `const' keyword to a char*.
(layout_class_method): Remove unused variable `buf'.
* decl.c (find_local_variable): Remove unused variable `rtl'.
(pushdecl): Likewise for variables `different_binding_level' and
`oldglobal'.
(pushlevel): Mark parameter `unused' with ATTRIBUTE_UNUSED.
(maybe_build_cleanup): Likewise for parameter `decl'.
* except.c (expand_start_java_handler): Mark parameter `range'
with ATTRIBUTE_UNUSED.
* expr.c: Include except.h.
(pop_type): Remove unused variable `i'.
(pop_value): Likewise for variables `n_words' and `i'.
(expand_java_arrayload): Likewise for variable `convert'.
(java_lang_expand_expr): Likewise for variables `op0', `type',
`mode', `unsignedp', `node' and `elements'.
(expand_byte_code): Likewise for variables `prev_eh_ranges' and
`eh_ranges'.
(process_jvm_instruction): Add a `const' qualifier to a char*.
* gjavah.c (output_directory): Add the `const' keyword to a char*.
(temp_directory): Likewise.
(print_c_decl): Likewise.
(print_method_info): Likewise.
(decode_signature_piece): Likewise.
(print_mangled_classname): Likewise.
* java-except.h: Provide prototypes for maybe_start_try,
maybe_end_try and add_handler.
* java-tree.h (mangled_classname): Add the `const' keyword to a char*.
(parse_error_context): Likewise. Also add ATTRIBUTE_PRINTF_2.
(pushdecl_top_level, alloc_class_constant, unicode_mangling_length,
init_expr_processing, push_super_field, init_class_processing,
can_widen_reference_to, class_depth, verify_jvm_instructions,
maybe_pushlevels, maybe_poplevels, process_jvm_instruction,
set_local_type, merge_type_state, push_type, load_type_state,
add_interface, find_in_current_zip, append_gpp_mangled_classtype,
emit_unicode_mangled_name): Add prototypes.
* jcf-dump.c (print_constant): Add the `const' keyword to a char*.
(print_signature_type): Use ISDIGIT, not isdigit.
(print_signature): Remove unused variable `j'.
* jcf-io.c (jcf_filbuf_from_stdio): Cast the result of `fread' to
int when comparing against one.
* jcf-parse.c: Include toplev.h.
* jcf-write.c: Likewise. Don't include <string.h> or <sys/stat.h>.
(localvar_free): Remove unused variable `i'.
(generate_bytecode_conditional): Likewise for variable `kind'.
* jv-scan.c: Include config.h and system.h. Remove redundant
OS header and gansidecl.h includes.
(warning): Add the `const' keyword to a char*. Also add
ATTRIBUTE_PRINTF_1 to the prototype. Check ANSI_PROTOTYPES, not
__STDC__, when determining whether to use ANSI-isms.
(fatal): Likewise. Also add ATTRIBUTE_UNUSED.
(xmalloc): Don't redundantly prototype here.
(main): Remove unused parameter `envp'. Also fix the arguments
passed to function `fatal' to match the format specifier.
* lang.c (java_tree_code_name): Add the `const' keyword to a char*.
* mangle.c: Include toplev.h.
(emit_unicode_mangled_name): Declare parameter `len'.
* parse.y (parse_warning_context): Add the `const' keyword to a
char*. Also add ATTRIBUTE_PRINTF_2 to the prototype. Check
`ANSI_PROTOTYPES' not `__STDC__' for whether to use ANSI-isms.
(issue_warning_error_from_context): Add the `const' keyword to
a char*.
(parse_error_context): Likewise. Also check `ANSI_PROTOTYPES'
not `__STDC__' for whether to use ANSI-isms.
* typeck.c (incomplete_type_error): Mark parameters `value' and
`type' with ATTRIBUTE_UNUSED.
(parse_signature_type): Use ISDIGIT, not isdigit.
* verify.c (check_pending_block): Add the `const' keyword to a char*.
(verify_jvm_instructions): Likewise. Remove unused variables
`field_name' and `default_val'.
* zextract.c: Include config.h and system.h. Remove redundant
OS header includes.
* zipfile.h: Prototype `read_zip_archive'.
From-SVN: r24835
d
* expr.c (encode_newarray_type, build_new_array): New functions.
* java-tree.h: Declare build_new_array.
* jcf-write.c (patch_newarray): Use build_new_array.
* expr.c (java_lang_expand_exp): Support NEW_ARRAY_INIT.
* jcf-write.c (generate_bytecode_insns): Support NEW_ARRAY_INIT.
* parse.y (patch_new_array_init): Re-organize.
Now is passed the actual array (pointer) type of the value.
Set the type of the CONSTRUCTOR to be an ARRAY_TYPE.
(patch_array_constructor): Removed - merged into patch_new_array_init.
(java_complete_tree): Update patch_new_array_init.
* jcf-write.c (find_constant_index): New function.
(generate_bytecode_insns): Use find_constant_index.
(generate_classfile): Use find_constant_index for ConstantValue.
From-SVN: r24273
Thu Dec 10 20:00:54 1998 Alexandre Petit-Bianco <apbianco@sendai.cygnus.com>
* decl.c (long_zero_node, float_zero_node, double_zero_node): New
global variables, initialized.
* java-tree.h (long_zero_node, float_zero_node, double_zero_node):
Declared new global variables.
* lex.c (java_lex): Return long_zero_node, float_zero_node,
double_zero_node, integer_zero_node upon direct matching.
* parse.y (purify_type_name): Added function prototype.
(duplicate_declaration_error_p): Consider new_type as potentially
being a incomplete type. Use purify_type_name on type string.
(method_header): saved_type: unused variable removed. Don't figure
return type if method name is invalid.
(java_complete_tree): Set CAN_COMPLETE_NORMALLY after `node' was
processed by patch_unaryop.
(patch_unaryop): Fixed typo in comment. Re-convert pre/post
increment/decrement node into its original type after binary
numeric promotion on its operands.
Fixes a bug occuring when an error occurs in constructor
declaration. Fixes a bug on ++/-- operators on non integer operands.
From-SVN: r24255
T
* constants.c (find_methodref_index): When the class is an interface,
generate CONSTANT_InterfaceMethodref instead of a CONSTANT_MethodRef.
* decl.c (finit_identifier_node): Use "$finit$", rather than
"<finit>" (which Sun's verifier rejects).
* parse.y (maybe_generate_finit): Leave out meaningless final flag.
(generate_field_initialization_code): Removed.
(fix_constructors) Don't add call to $finit$ here (wrong order).
(patch_method_invocation): Add $finit$ call here.
* java-tree.h (CALL_USING_SUPER): New macro.
* parse.y (patch_invoke): Remove im local variable.
(patch_method_invocation, patch_invoke): Don't pass super parameter.
(patch_invoke): Use CALL_USING_SUPER instead of from_super parameter.
(resolve_qualified_expression_name): Maybe set CALL_USING_SUPER.
* jcf-write.c (get_access_flags): Fix typo ACC_PUBLIC -> ACC_FINAL.
* parse.y (java_complete_tree): Don't complain about unreachable
statement if it is empty_stmt_node.
* jcf-write.c (find_constant_wide): New function.
(push_long_const): Use find_constant_wide.
* jcf-write.c (generate_bytecode_insn): Fix bug in switch handling.
(generate_bytecode_insn): Use correct dup variant for MODIFY_EXPR.
Add "redundant" NOTE_PUSH/NOTE_POP uses so code_SP_max gets set.
Emit invokeinterface when calling an interface method.
Emit invokespecial also when calling super or private methods.
* jcf-write.c (generate_classfile): Emit ConstantValue attributes.
From-SVN: r24161
Thu Dec 3 17:11:12 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
* java-tree.h (java_layout_seen_class_methods): New function
prototype.
(LAYOUT_SEEN_CLASS_METHODS): Macro removed.
* jcf-parse.c (parse_class_file): Call java_layout_seen_class_methods.
* parse.h (PROMOTE_RECORD_IF_COMPLETE): New macro.
* parse.y (method_declarator:): Defined action.
(issue_warning_error_from_context): input_filename saved, set to
the appropriate value and restored after java_error is called.
(build_unresolved_array_type): Fixed comment.
(register_fields): Use PROMOTE_RECORD_IF_COMPLETE.
(method_header): Deal with return type the same way type are
handled for fields and method's parameters and local variables
types are handled.
(check_method_redefinition): Removed extra CR.
(declare_local_variables): Use PROMOTE_RECORD_IF_COMPLETE.
(java_layout_seen_class_methods): New function.
(java_layout_classes): Call java_layout_seen_class_methods.
Handles an obsolete way of declaring methods returning an array. Does
a better job at laying out class methods before code generation.
From-SVN: r24077
Tue Dec 1 13:53:24 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
* class.c (layout_class_method): Don't report error on non-static
overriding static if the method is private.
* java-tree.h (finish_class): Prototype added.
* lex.c (java_get_line_col): Handle col argument -2 value.
* parse.h: All static method declarations moved to parse.y.
* parse.y: Now contains all static method declarations previously
found in parse.h.
(find_expr_with_wfl, missing_return_error,
unreachable_stmt_error): New functions.
(java_get_real_method_name): Identify constructors bearing class
names in source code compiled classes only.
(java_complete_expand_methods): Call missing_return_error.
(invocation_mode): Private methods invoked as static methods.
(java_complete_tree): Call unreachable_stmt_error.
This patch corrects the way unreachable statement and missing return
statement errors are reported. It also fixes random bugs.
From-SVN: r24036
Tue Nov 24 17:06:38 1998 Per Bothner <bothner@cygnus.com>
* (generate_classfile): Always write class access flag with
ACC_SUPER set.
Tue Nov 24 16:34:33 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
* class.c (maybe_layout_super_class): New function.
(layout_class): Reorganized. Loop on class methods dispatched into
a new function. Call maybe_layout_super_class.
(layout_class_methods, layout_class_method): New functions.
* expr.c (expand_java_NEW): Call layout_class_methods on loaded
class.
(expand_invoke): Likewise.
* java-tree.h (all_class_list): New global variable declared.
(layout_class_methods, layout_class_method): New function
prototypes.
(LAYOUT_SEEN_CLASS_METHODS): New macro.
* jcf-parse.c (all_class_list): New global variable.
(load_class): Extended what class_or_name can be. Use parser
context mechanism to save globals before calling jcf_parse.
(jcf_parse_source): Don't parse twice if HAS_BEEN_ALREADY_PARSED_P
is set on the file name.
(jcf_parse): Layout class methods when Object is loaded, otherwise
record class in all_class_list for delayed method layout.
(parse_class_file): Use LAYOUT_SEEN_CLASS_METHODS.
* lang.c (put_decl_node): Decode <init> into the decl context
class name.
* lex.c (java_allocate_new_line): Use xmalloc.
* parse.h (INCOMPLETE_TYPE_P): Redefined to work with incomplete
pointers, not TREE_LIST elements.
(struct parser_ctxt): Fixed comment indentations, added comments
and reordered some fields.
(java_check_methods): Function prototype removed.
* parse.y (java_push_parser_context): Use xmalloc.
(java_parser_context_restore_global): Pop extra pushed ctxp only
when there's nothing next.
(maybe_create_class_interface_decl): Fixed comment, add new
created class decl to all_class_list.
(method_header): Use GET_REAL_TYPE on argument's types.
(method_declarator): Use GET_REAL_TYPE, change type to the real
type in TREE_LIST dependency node. Build argument list with the
real type.
(create_jdep_list): Use xmalloc. Removed allocation error message.
(obtain_incomplete_type): Fixed leading comment. Broadened
incoming argument meaning.
(register_incomplete_type): Use xmalloc. Removed allocation error
message.
(safe_layout_class): Fixed leading comment.
(jdep_resolve_class): Reversed if statement condition and switch
if and else bodies.
(resolve_and_layout): Fixed leading comment. Broadened incoming
argument meaning.
(complete_class_report_errors): New local variable name, for
clarity. purify_type_name used for all error cases.
(java_get_real_method_name): Stricter check on constructors.
(java_check_regular_methods): Reverse methods list only if not
already laid out. Layout artificial constructor.
(java_check_methods): Deleted.
(source_start_java_method): Obtain incomplete type for patchable
method arguments.
(java_layout_classes): Fixed leading comment. Use
LAYOUT_SEEN_CLASS_METHODS, use a loop to check methods. Added else
statement to layout operation, reuse LAYOUT_SEEN_CLASS_METHODS
before returning. Fixed comments.
(java_expand_classes): Check for errors up front.
(patch_method_invocation): Class to search is resolved and laid
out.
A step forward truly mixing .class and .java during package
compilation. Includes a Per's patch.
From-SVN: r23834
Thu Nov 19 11:16:55 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
* jcf-parse.c (jcf_parse_source): Function returned type is
void. Added prototype.
(jcf_parse): Function returned type is void.
(yyparse): Remove call to fclose on the last parsed file.
* java-tree.h (jcf_parse): Changed jcf_parse prototype.
Wed Nov 18 14:21:48 1998 Anthony Green <green@cygnus.com>
* jcf-parse.c (yyparse): Open class file in binary mode.
Fixes a show-stopper and includes a missing patch.
From-SVN: r23715
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
�
* decl.c (error_mark_node), java-tree.h: New global.
* parse.y: Use empty_stmt_node instead of size_zero_node.
(build_if_else_statement): If missing else, use empty_stmt_node.
* parse.y (not_initialized_as_it_should_p): Removed, with its callers.
(java_complete_expand_method): Complain if return is missing.
(java_check_regular_methods): Comment out incorrect error check.
(not_accessible_p): Fix incorrect handling of protected methods.
(patch_method_invocation): Pass correct context to not_accessible_p.
(find_applicable_accessible_methods_list): Likewise.
(qualify_ambiguous_name): If ARRAY_REF, it's an expression name.
(java_complete_tree): For CASE_EXPR and DEFAULT_EXPR, set
TREE_TYPE (to void_type_node); otherwise expand_expr crashes.
(patch_if_else_statement): Fix setting of CAN_COMPLETE_NORMALLY.
* jcf-write.c (CHECK_OP, CHECK_PUT): Add some error checking.
(push_int_const): Remove reundant NOTE_PUSH.
(generate_bytecode_insns - case STRING_CST): Do NOTE_PUSH.
(- case SWITCH_EXPR): Fix code generation bug.
(- case PREDECREMENT_EXPR etc): Remove redundant NOTE_PUSH.
(generate_classfile): More robust for abstract methods.
From-SVN: r23661