[svn] r6029: nemerle/trunk/ncc: generation/Typer3.n
testsuite/positive/yield.n
malekith
svnadmin at nemerle.org
Wed Dec 21 12:28:13 CET 2005
Log:
Use the 'this' type in enumerator generation, fixing polymorphic enumerator methods (resolves #587).
Author: malekith
Date: Wed Dec 21 12:28:13 2005
New Revision: 6029
Modified:
nemerle/trunk/ncc/generation/Typer3.n
nemerle/trunk/ncc/testsuite/positive/yield.n
Modified: nemerle/trunk/ncc/generation/Typer3.n
==============================================================================
--- nemerle/trunk/ncc/generation/Typer3.n (original)
+++ nemerle/trunk/ncc/generation/Typer3.n Wed Dec 21 12:28:13 2005
@@ -737,14 +737,14 @@
public GetEnumerator () : System.Collections.Generic.IEnumerator [$(yield_type : typed)]
{
if ($interlocked_stuff) {
- def res = $(name : name) ();
+ def res = $(name : name) () : this;
res.CopyFrom (this);
res
} else
this
}
- CopyFrom (other : $(name : name)) : void
+ CopyFrom (other : this) : void
{
_N_this_used = 1;
}
Modified: nemerle/trunk/ncc/testsuite/positive/yield.n
==============================================================================
--- nemerle/trunk/ncc/testsuite/positive/yield.n (original)
+++ nemerle/trunk/ncc/testsuite/positive/yield.n Wed Dec 21 12:28:13 2005
@@ -1,4 +1,5 @@
using System.Collections.Generic;
+using System;
class C : IEnumerable [int]
{
@@ -58,6 +59,23 @@
}
}
+// #587
+public class Sequence
+{
+ public static Concat['a] (
+ first : IEnumerable ['a],
+ second : IEnumerable ['a]) : IEnumerable ['a]
+ {
+ when (first == null || second == null)
+ throw ArgumentNullException ();
+
+ foreach (element in first)
+ yield element;
+ foreach (element in second)
+ yield element;
+ }
+}
+
foreach (e in C ())
System.Console.WriteLine (e);
@@ -92,6 +110,11 @@
System.Console.WriteLine (e);
System.Console.WriteLine ("------------");
+def fst = [1,2,3];
+def snd = [4,5,6];
+foreach (x in Sequence.Concat (fst, snd))
+ Nemerle.IO.printf ("%d\n", x);
+
/*
BEGIN-OUTPUT
42
@@ -141,5 +164,11 @@
46
47
------------
+1
+2
+3
+4
+5
+6
END-OUTPUT
*/
More information about the svn
mailing list