OSDN Git Service

/
authorbothner <bothner@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 7 Dec 1998 15:43:11 +0000 (15:43 +0000)
committerbothner <bothner@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 7 Dec 1998 15:43:11 +0000 (15:43 +0000)
* 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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@24160 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/java/constants.c

index 6d4ad2f..8eb9f54 100644 (file)
@@ -190,13 +190,16 @@ find_methodref_index (cpool, decl)
      CPool *cpool;
      tree decl;
 {
-  int class_index = find_class_constant (cpool, DECL_CONTEXT (decl));
+  tree mclass = DECL_CONTEXT (decl);
+  int class_index = find_class_constant (cpool, mclass);
   tree name = DECL_CONSTRUCTOR_P (decl) ? init_identifier_node
     : DECL_NAME (decl);
   int name_type_index
     = find_name_and_type_constant (cpool, name, TREE_TYPE (decl));
-  /* Methodref or INterfacemethodRef - FIXME */
-  return find_constant1 (cpool, CONSTANT_Methodref,
+  return find_constant1 (cpool,
+                        CLASS_INTERFACE (TYPE_NAME (mclass))
+                        ? CONSTANT_InterfaceMethodref
+                        : CONSTANT_Methodref,
                         (class_index << 16) | name_type_index);
 }