dotgnu-pnet-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Dotgnu-pnet-commits] CVS: pnet/engine cvm_ptr.c,1.34,1.35


From: Rhys Weatherley <address@hidden>
Subject: [Dotgnu-pnet-commits] CVS: pnet/engine cvm_ptr.c,1.34,1.35
Date: Sun, 16 Feb 2003 04:35:37 -0500

Update of /cvsroot/dotgnu-pnet/pnet/engine
In directory subversions:/tmp/cvs-serv21022/engine

Modified Files:
        cvm_ptr.c 
Log Message:


Fix bug #2566 - could not cast from String[] to Object[] using an
intermediate step of Object.


Index: cvm_ptr.c
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/engine/cvm_ptr.c,v
retrieving revision 1.34
retrieving revision 1.35
diff -C2 -r1.34 -r1.35
*** cvm_ptr.c   6 Feb 2003 03:56:25 -0000       1.34
--- cvm_ptr.c   16 Feb 2003 09:35:35 -0000      1.35
***************
*** 70,73 ****
--- 70,99 ----
  }
  
+ /*
+  * Perform a class cast, taking arrays into account.
+  */
+ static int CanCastClass(ILImage *image, ILClass *fromClass, ILClass *toClass)
+ {
+       ILType *fromType = ILClassGetSynType(fromClass);
+       ILType *toType = ILClassGetSynType(toClass);
+       if(fromType && toType)
+       {
+               if(ILType_IsArray(fromType) && ILType_IsArray(toType) &&
+                  ILTypeGetRank(fromType) == ILTypeGetRank(toType))
+               {
+                       return ILTypeAssignCompatible
+                         (image, ILTypeGetElemType(fromType), 
ILTypeGetElemType(toType));
+               }
+               else
+               {
+                       return 0;
+               }
+       }
+       else
+       {
+               return ILClassInheritsFrom(fromClass, toClass);
+       }
+ }
+ 
  #elif defined(IL_CVM_LOCALS)
  
***************
*** 2291,2295 ****
        classInfo = CVM_ARG_PTR(ILClass *);
        if(!stacktop[-1].ptrValue ||
!          ILClassInheritsFrom(GetObjectClass(stacktop[-1].ptrValue), 
classInfo))
        {
                MODIFY_PC_AND_STACK(CVM_LEN_PTR, 0);
--- 2317,2322 ----
        classInfo = CVM_ARG_PTR(ILClass *);
        if(!stacktop[-1].ptrValue ||
!          CanCastClass(ILProgramItem_Image(method),
!                                   GetObjectClass(stacktop[-1].ptrValue), 
classInfo))
        {
                MODIFY_PC_AND_STACK(CVM_LEN_PTR, 0);





reply via email to

[Prev in Thread] Current Thread [Next in Thread]