Changes: Christan Thalinger
- $Id: resolve.c 2748 2005-06-20 15:01:24Z twisti $
+ $Id: resolve.c 2753 2005-06-20 15:19:46Z edwin $
*/
RESOLVE_ASSERT(mi->parseddesc->paramcount == ref->methodref->parseddesc.md->paramcount);
paramtypes = mi->parseddesc->paramtypes;
- for (i = 0; i < mi->parseddesc->paramcount; i++) {
- if (paramtypes[i].type == TYPE_ADR) {
+ for (i = 0; i < mi->parseddesc->paramcount-instancecount; i++) {
+ if (paramtypes[i+instancecount].type == TYPE_ADR) {
if (ref->paramconstraints) {
if (!resolve_and_check_subtype_set(referer,ref->referermethod,
ref->paramconstraints + i,
- CLASSREF_OR_CLASSINFO(paramtypes[i].classref),
+ CLASSREF_OR_CLASSINFO(paramtypes[i+instancecount].classref),
false,
mode,
resolveLinkageError,&checked))
#ifdef RESOLVE_VERBOSE
fprintf(stderr,"unresolved_subtype_set_from_typeinfo\n");
-#ifdef TYPEINFO_DEBUG
- /*typeinfo_print(stderr,tinfo,4);*/
- fprintf(stderr,"\n");
-#endif
fprintf(stderr," declared type:");utf_fprint(stderr,declaredtype->name);
fprintf(stderr,"\n");
#endif
? tinfo->typeclass.ref->name
: tinfo->typeclass.cls->name) == declaredtype->name)
{
+ /* the class names are the same */
+ /* equality is guaranteed by the loading constraints */
goto empty_set;
}
else {
/* This is only allowed when a field of an uninitialized 'this' object is */
/* written inside an initialization method */
+ classinfo *initclass;
instruction *ins = (instruction*)TYPEINFO_NEWOBJECT_INSTRUCTION(instanceslot->typeinfo);
classinfo *initclass;
TYPEINFO_IS_NEWOBJECT(instanceslot->typeinfo))
{ /* XXX clean up */
instruction *ins = (instruction*)TYPEINFO_NEWOBJECT_INSTRUCTION(instanceslot->typeinfo);
- classinfo *initclass = (ins) ? (classinfo*)ins[-1].val.a
- : refmethod->class; /* XXX classrefs */
- RESOLVE_ASSERT(initclass->loaded && initclass->linked);
- TYPEINFO_INIT_CLASSINFO(tinfo,initclass);
+ classref_or_classinfo initclass = (ins) ? CLASSREF_OR_CLASSINFO(ins[-1].val.a)
+ : CLASSREF_OR_CLASSINFO(refmethod->class);
+ TYPEINFO_INIT_CLASSREF_OR_CLASSINFO(tinfo,initclass);
tip = &tinfo;
}
else {
if (ref) {
fprintf(file," referer : ");
utf_fprint(file,ref->classref->referer->name); fputc('\n',file);
- fprintf(file," refmethod : ");
+ fprintf(file," refmethod : ");
utf_fprint(file,ref->referermethod->name); fputc('\n',file);
- fprintf(file," refmethodd : ");
+ fprintf(file," refmethodd: ");
utf_fprint(file,ref->referermethod->descriptor); fputc('\n',file);
fprintf(file," classname : ");
utf_fprint(file,ref->classref->name); fputc('\n',file);
if (ref) {
fprintf(file," referer : ");
utf_fprint(file,ref->fieldref->classref->referer->name); fputc('\n',file);
- fprintf(file," refmethod : ");
+ fprintf(file," refmethod : ");
utf_fprint(file,ref->referermethod->name); fputc('\n',file);
- fprintf(file," refmethodd : ");
+ fprintf(file," refmethodd: ");
utf_fprint(file,ref->referermethod->descriptor); fputc('\n',file);
fprintf(file," classname : ");
utf_fprint(file,ref->fieldref->classref->name); fputc('\n',file);
if (ref) {
fprintf(file," referer : ");
utf_fprint(file,ref->methodref->classref->referer->name); fputc('\n',file);
- fprintf(file," refmethod : ");
+ fprintf(file," refmethod : ");
utf_fprint(file,ref->referermethod->name); fputc('\n',file);
- fprintf(file," refmethodd : ");
+ fprintf(file," refmethodd: ");
utf_fprint(file,ref->referermethod->descriptor); fputc('\n',file);
fprintf(file," classname : ");
utf_fprint(file,ref->methodref->classref->name); fputc('\n',file);