[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