X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=src%2Fvm%2Fclass.cpp;h=0c1739a3c0ed7089cc206e1cecebdac9218af788;hb=be91893d7ed148f6be1999d09743f74822ec2015;hp=35ef8de9057cc1eeff3d1e02c465cbc98029e1c6;hpb=23a3859cc1442012273e1a77e44ca2ac985aac5e;p=cacao.git diff --git a/src/vm/class.cpp b/src/vm/class.cpp index 35ef8de90..0c1739a3c 100644 --- a/src/vm/class.cpp +++ b/src/vm/class.cpp @@ -1499,32 +1499,33 @@ bool class_isanysubclass(classinfo *sub, classinfo *super) bool class_is_arraycompatible(arraydescriptor *desc, arraydescriptor *target) { if (desc == target) - return 1; + return true; if (desc->arraytype != target->arraytype) - return 0; + return false; if (desc->arraytype != ARRAYTYPE_OBJECT) - return 1; + return true; /* {both arrays are arrays of references} */ if (desc->dimension == target->dimension) { if (!desc->elementvftbl) - return 0; + return false; + /* an array which contains elements of interface types is - allowed to be casted to Object (JOWENN)*/ + allowed to be casted to array of Object (JOWENN) */ if ((desc->elementvftbl->baseval < 0) && (target->elementvftbl->baseval == 1)) - return 1; + return true; return class_isanysubclass(desc->elementvftbl->clazz, target->elementvftbl->clazz); } if (desc->dimension < target->dimension) - return 0; + return false; /* {desc has higher dimension than target} */ @@ -1560,7 +1561,7 @@ bool class_is_assignable_from(classinfo *to, classinfo *from) /* Decide whether we are dealing with array types or object types. */ - if (class_is_array(to)) + if (class_is_array(to) && class_is_array(from)) return class_is_arraycompatible(from->vftbl->arraydesc, to->vftbl->arraydesc); else return class_isanysubclass(from, to);