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

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

[Dotgnu-pnet-commits] pnet/cscc/csharp cs_misc.tc, 1.15, 1.16 cs_oper.tc


From: Rhys Weatherley <address@hidden>
Subject: [Dotgnu-pnet-commits] pnet/cscc/csharp cs_misc.tc, 1.15, 1.16 cs_oper.tc, 1.45, 1.46
Date: Fri, 28 Nov 2003 04:49:19 +0000

Update of /cvsroot/dotgnu-pnet/pnet/cscc/csharp
In directory subversions:/tmp/cvs-serv13617/cscc/csharp

Modified Files:
        cs_misc.tc cs_oper.tc 
Log Message:


Increment and decrement operators for pointer values.


Index: cs_misc.tc
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/cscc/csharp/cs_misc.tc,v
retrieving revision 1.15
retrieving revision 1.16
diff -C2 -d -r1.15 -r1.16
*** cs_misc.tc  26 Nov 2003 01:17:18 -0000      1.15
--- cs_misc.tc  28 Nov 2003 04:49:17 -0000      1.16
***************
*** 152,155 ****
--- 152,188 ----
  }
  
+ %{
+ 
+ /*
+  * Get the size of a type if it is static.  Returns zero if it isn't.
+  */
+ static ILUInt32 GetPrimitiveTypeSize(ILType *type)
+ {
+       if(ILType_IsPrimitive(type))
+       {
+               switch(ILType_ToElement(type))
+               {
+                       case IL_META_ELEMTYPE_BOOLEAN:
+                       case IL_META_ELEMTYPE_I1:
+                       case IL_META_ELEMTYPE_U1:               return 1;
+ 
+                       case IL_META_ELEMTYPE_CHAR:
+                       case IL_META_ELEMTYPE_I2:
+                       case IL_META_ELEMTYPE_U2:               return 2;
+ 
+                       case IL_META_ELEMTYPE_I4:
+                       case IL_META_ELEMTYPE_U4:
+                       case IL_META_ELEMTYPE_R4:               return 4;
+ 
+                       case IL_META_ELEMTYPE_I8:
+                       case IL_META_ELEMTYPE_U8:
+                       case IL_META_ELEMTYPE_R8:               return 8;
+               }
+       }
+       return 0;
+ }
+ 
+ %}
+ 
  /*
   * Perform semantic analysis for the "sizeof" operator.
***************
*** 216,241 ****
  
        /* Pre-compute the size if this is a primitive type */
!       if(ILType_IsPrimitive(node->type))
        {
!               switch(ILType_ToElement(node->type))
!               {
!                       case IL_META_ELEMTYPE_BOOLEAN:
!                       case IL_META_ELEMTYPE_I1:
!                       case IL_META_ELEMTYPE_U1:               node->size = 1; 
break;
! 
!                       case IL_META_ELEMTYPE_CHAR:
!                       case IL_META_ELEMTYPE_I2:
!                       case IL_META_ELEMTYPE_U2:               node->size = 2; 
break;
! 
!                       case IL_META_ELEMTYPE_I4:
!                       case IL_META_ELEMTYPE_U4:
!                       case IL_META_ELEMTYPE_R4:               node->size = 4; 
break;
! 
!                       case IL_META_ELEMTYPE_I8:
!                       case IL_META_ELEMTYPE_U8:
!                       case IL_META_ELEMTYPE_R8:               node->size = 8; 
break;
! 
!                       default:                                                
node->size = 1; break;
!               }
        }
  
--- 249,256 ----
  
        /* Pre-compute the size if this is a primitive type */
!       node->size = GetPrimitiveTypeSize(node->type);
!       if(!(node->size))
        {
!               node->size = 1;
        }
  

Index: cs_oper.tc
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/cscc/csharp/cs_oper.tc,v
retrieving revision 1.45
retrieving revision 1.46
diff -C2 -d -r1.45 -r1.46
*** cs_oper.tc  21 Nov 2003 00:25:26 -0000      1.45
--- cs_oper.tc  28 Nov 2003 04:49:17 -0000      1.46
***************
*** 1160,1164 ****
                                                          ILNode *(*createFunc)
                                                                        (ILNode 
*expr, ILMethod *method,
!                                                                        
ILMachineType type))
  {
        ILMethod *method;
--- 1160,1167 ----
                                                          ILNode *(*createFunc)
                                                                        (ILNode 
*expr, ILMethod *method,
!                                                                        
ILMachineType type),
!                                                         ILNode 
*(*createPtrFunc)
!                                                                       (ILNode 
*expr, ILUInt32 size,
!                                                                        
ILClass *classInfo))
  {
        ILMethod *method;
***************
*** 1205,1208 ****
--- 1208,1232 ----
                /* Not reached */
  
+               case ILMachineType_NativeInt:
+               case ILMachineType_NativeUInt:
+               case ILMachineType_UnmanagedPtr:
+               {
+                       /* Check for pointer types */
+                       if(ILType_IsPointer(CSSemGetType(value)))
+                       {
+                               ILType *elemType =
+                                       
ILTypeStripPrefixes(ILType_Ref(CSSemGetType(value)));
+                               ILClass *classInfo = ILTypeToClass(info, 
elemType);
+                               if(elemType != ILType_Void && classInfo)
+                               {
+                                       *parent = (*createPtrFunc)
+                                               (node->expr, 
GetPrimitiveTypeSize(elemType),
+                                                classInfo);
+                                       return value;
+                               }
+                       }
+               }
+               break;
+ 
                default: break;
        }
***************
*** 1232,1236 ****
  {
        return IncOrDecSem(info, (ILNode_UnaryExpression *)node, parent,
!                                          "op_Increment", "++", 
ILNode_UserPreInc_create);
  }
  
--- 1256,1261 ----
  {
        return IncOrDecSem(info, (ILNode_UnaryExpression *)node, parent,
!                                          "op_Increment", "++", 
ILNode_UserPreInc_create,
!                                          ILNode_PreIncPtr_create);
  }
  
***************
*** 1241,1245 ****
  {
        return IncOrDecSem(info, (ILNode_UnaryExpression *)node, parent,
!                                          "op_Decrement", "--", 
ILNode_UserPreDec_create);
  }
  
--- 1266,1271 ----
  {
        return IncOrDecSem(info, (ILNode_UnaryExpression *)node, parent,
!                                          "op_Decrement", "--", 
ILNode_UserPreDec_create,
!                                          ILNode_PreDecPtr_create);
  }
  
***************
*** 1250,1254 ****
  {
        return IncOrDecSem(info, (ILNode_UnaryExpression *)node, parent,
!                                          "op_Increment", "++", 
ILNode_UserPostInc_create);
  }
  
--- 1276,1281 ----
  {
        return IncOrDecSem(info, (ILNode_UnaryExpression *)node, parent,
!                                          "op_Increment", "++", 
ILNode_UserPostInc_create,
!                                          ILNode_PostIncPtr_create);
  }
  
***************
*** 1259,1263 ****
  {
        return IncOrDecSem(info, (ILNode_UnaryExpression *)node, parent,
!                                          "op_Decrement", "--", 
ILNode_UserPostDec_create);
  }
  
--- 1286,1291 ----
  {
        return IncOrDecSem(info, (ILNode_UnaryExpression *)node, parent,
!                                          "op_Decrement", "--", 
ILNode_UserPostDec_create,
!                                          ILNode_PostIncPtr_create);
  }
  





reply via email to

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