constants.c (find_methodref_index): When the class is an interface...
/ * 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: r24160
This commit is contained in:
parent
2dfaf550bd
commit
72a0aac6d2
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue