Author: manjula
Date: 2005-03-16 05:54:43 -0500 (Wed, 16 Mar 2005)
New Revision: 41883

Modified:
   trunk/mcs/mbas/ChangeLog
   trunk/mcs/mbas/mb-parser.jay
Log:
 Support 'expression TO expression' case clause for select statement


Modified: trunk/mcs/mbas/ChangeLog
===================================================================
--- trunk/mcs/mbas/ChangeLog    2005-03-16 10:17:17 UTC (rev 41882)
+++ trunk/mcs/mbas/ChangeLog    2005-03-16 10:54:43 UTC (rev 41883)
@@ -1,3 +1,7 @@
+2005-03-16 Manjula GHM <[EMAIL PROTECTED]>
+       * mb-parser.jay:
+               Support 'expression TO expression' case clause for select 
statement
+
 2005-03-15 Satya Sudha K <[EMAIL PROTECTED]>
        * mb-parser.jay :
        * expression.cs :

Modified: trunk/mcs/mbas/mb-parser.jay
===================================================================
--- trunk/mcs/mbas/mb-parser.jay        2005-03-16 10:17:17 UTC (rev 41882)
+++ trunk/mcs/mbas/mb-parser.jay        2005-03-16 10:54:43 UTC (rev 41883)
@@ -3863,10 +3863,15 @@
 case_clauses
        : case_clause
          {
-               ArrayList labels = new ArrayList ();
+                if ($1 is ArrayList) //From expression TO expression 
+                         $$ = $1;
+               else {
 
-               labels.Add ($1);
-               $$ = labels;
+                       ArrayList labels = new ArrayList ();
+
+                       labels.Add ($1);
+                       $$ = labels;
+               }
          }     
        | case_clauses COMMA case_clause
          {
@@ -3883,6 +3888,25 @@
          {
                $$ = new SwitchLabel ((Expression) $1, lexer.Location);
          }
+       | expression TO expression
+        {
+               //FIXME: need to handle when expressions are character strings.
+                       Constant start = (Constant) $1;
+                       Constant end = (Constant) $3;
+                       int i = 0, s = 0, e = 0;
+                       Location l = lexer.Location ;
+                       ArrayList labels = new ArrayList ();
+
+                       if (start != null) 
+                               s = (int) start.GetValue ();
+                       if(end != null) 
+                               e = (int) end.GetValue ();
+                       for(i = s; i <= e; i++) {
+                               labels.Add(new SwitchLabel ((Expression)new 
IntLiteral(i), l));
+                       }
+                       $$ = labels;
+        }
+
        ;
        
 opt_is 

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to