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

[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;
        }





reply via email to

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