[svn] r6052: nemerle/trunk: macros/core.n ncc/testsuite/positive/list-compr.n

malekith svnadmin at nemerle.org
Sat Jan 7 12:14:57 CET 2006


Log:
Allow ranges in foreach.

Author: malekith
Date: Sat Jan  7 12:14:56 2006
New Revision: 6052

Modified:
   nemerle/trunk/macros/core.n
   nemerle/trunk/ncc/testsuite/positive/list-compr.n

Modified: nemerle/trunk/macros/core.n
==============================================================================
--- nemerle/trunk/macros/core.n	(original)
+++ nemerle/trunk/macros/core.n	Sat Jan  7 12:14:56 2006
@@ -325,10 +325,21 @@
   macro @foreach (inexpr, body)
   syntax ("foreach", "(", inexpr, ")", body)
   {
-    def (iter, collection) =
+    mutable iter = null, collection = null;
+    
       match (inexpr) {
-        | <[ @in ($iter, $collection) ]> =>
-          (iter, collection)
+      | <[ $e1 in [$first, $second ... $last] ]> =>
+        Nemerle.Imperative.Return (
+          ListComprehensionHelper.ExpandRange (first, Some (second), last, e1, body))
+           
+      | <[ $e1 in [$first ... $last] ]> =>
+        Nemerle.Imperative.Return (
+          ListComprehensionHelper.ExpandRange (first, None (), last, e1, body))
+            
+      | <[ $i in $c ]> =>
+        iter = i;
+        collection = c;
+
         | e =>
           Message.FatalError ($ "the syntax is 'foreach (x in collection)', "
                                 "got $e");

Modified: nemerle/trunk/ncc/testsuite/positive/list-compr.n
==============================================================================
--- nemerle/trunk/ncc/testsuite/positive/list-compr.n	(original)
+++ nemerle/trunk/ncc/testsuite/positive/list-compr.n	Sat Jan  7 12:14:56 2006
@@ -26,6 +26,8 @@
 WriteLine ($[ (x,y) | x in [foo (1), foo (3) ... foo (7)],
                       y in [bar (2), bar (4) ... bar (8)] ])
 
+foreach (x in [1 ... 5]) WriteLine (x)
+foreach (x in [5, 4 ... 1]) WriteLine (x)
 
 /*
 BEGIN-OUTPUT
@@ -53,5 +55,15 @@
 bar(4)
 bar(8)
 [(1, 2), (1, 4), (1, 6), (1, 8), (3, 2), (3, 4), (3, 6), (3, 8), (5, 2), (5, 4), (5, 6), (5, 8), (7, 2), (7, 4), (7, 6), (7, 8)]
+1
+2
+3
+4
+5
+5
+4
+3
+2
+1
 END-OUTPUT
 */



More information about the svn mailing list