[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Dotgnu-pnet-commits] CVS: pnet/cscc/c c_defs.tc, 1.24, 1.25 c_oper.tc,
From: |
Rhys Weatherley <address@hidden> |
Subject: |
[Dotgnu-pnet-commits] CVS: pnet/cscc/c c_defs.tc, 1.24, 1.25 c_oper.tc, 1.32, 1.33 |
Date: |
Tue, 12 Aug 2003 03:16:30 -0400 |
Update of /cvsroot/dotgnu-pnet/pnet/cscc/c
In directory subversions:/tmp/cvs-serv4756/cscc/c
Modified Files:
c_defs.tc c_oper.tc
Log Message:
Constant evaluation for conditional expressions.
Index: c_defs.tc
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/cscc/c/c_defs.tc,v
retrieving revision 1.24
retrieving revision 1.25
diff -C2 -r1.24 -r1.25
*** c_defs.tc 28 Jun 2003 05:28:47 -0000 1.24
--- c_defs.tc 12 Aug 2003 07:16:28 -0000 1.25
***************
*** 255,258 ****
--- 255,267 ----
/*
+ * Convert l-values into r-values, while retaining constant information.
+ */
+ #define CSemLToRValue(value) \
+ do { \
+ (value).kind__ &= ~C_SEMKIND_LVALUE; \
+ (value).kind__ |= C_SEMKIND_RVALUE; \
+ } while (0)
+
+ /*
* Perform inline semantic analysis on a node, in a specific scope.
*/
Index: c_oper.tc
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/cscc/c/c_oper.tc,v
retrieving revision 1.32
retrieving revision 1.33
diff -C2 -r1.32 -r1.33
*** c_oper.tc 3 Jul 2003 02:01:51 -0000 1.32
--- c_oper.tc 12 Aug 2003 07:16:28 -0000 1.33
***************
*** 2120,2129 ****
ILNode_CSemAnalysis(ILNode_Conditional)
{
CSemValue value1;
CSemValue value2;
ILType *commonType;
/* Perform semantic analysis on the boolean condition */
! ILNode_CSemAnalysis(node->expr1, info, &(node->expr1), stmtLevel);
/* Perform semantic analysis on the "then" and "else" clauses */
--- 2120,2132 ----
ILNode_CSemAnalysis(ILNode_Conditional)
{
+ CSemValue boolValue;
CSemValue value1;
CSemValue value2;
ILType *commonType;
+ ILEvalValue *evalValue;
/* Perform semantic analysis on the boolean condition */
! boolValue = ILNode_CSemAnalysis(node->expr1, info,
!
&(node->expr1), stmtLevel);
/* Perform semantic analysis on the "then" and "else" clauses */
***************
*** 2160,2166 ****
else
{
! CCoerceNode(info, node->expr2, &(node->expr2), value1,
commonType);
! CCoerceNode(info, node->expr3, &(node->expr3), value2,
commonType);
! CSemSetRValue(value1, commonType);
return value1;
}
--- 2163,2189 ----
else
{
! value1 = CCoerceNode(info, node->expr2, &(node->expr2),
! value1, commonType);
! value2 = CCoerceNode(info, node->expr3, &(node->expr3),
! value2, commonType);
! evalValue = CSemGetConstant(boolValue);
! if(evalValue)
! {
! if(evalValue->un.i4Value)
! {
! *parent = node->expr2;
! CSemLToRValue(value1);
! }
! else
! {
! *parent = node->expr3;
! CSemLToRValue(value2);
! return value2;
! }
! }
! else
! {
! CSemSetRValue(value1, commonType);
! }
return value1;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Dotgnu-pnet-commits] CVS: pnet/cscc/c c_defs.tc, 1.24, 1.25 c_oper.tc, 1.32, 1.33,
Rhys Weatherley <address@hidden> <=