[Top][All Lists]
[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);
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Dotgnu-pnet-commits] pnet/cscc/csharp cs_misc.tc, 1.15, 1.16 cs_oper.tc, 1.45, 1.46,
Rhys Weatherley <address@hidden> <=