public EnumerableBehavior(IBehavior behavior, IBehavior superclass, Machine machine)
: base(behavior, superclass, machine, typeof(IEnumerable))
{
string dosource = @"
do: aBlock
| enumerator |
enumerator := self !GetEnumerator.
[enumerator !MoveNext] whileTrue:
[ aBlock value: enumerator !Current ]
";
string selectsource = @"
select: aBlock
| enumerator list |
enumerator := self !GetEnumerator.
list := @System.Collections.ArrayList !new.
[enumerator !MoveNext] whileTrue:
[ | item |
item := enumerator !Current.
(aBlock value: item) ifTrue: [ list add: item ]
].
^list
";
Parser parser = new Parser(dosource);
this.DefineInstanceMethod(parser.CompileInstanceMethod(this));
parser = new Parser(selectsource);
this.DefineInstanceMethod(parser.CompileInstanceMethod(this));
this.DefineInstanceMethod(new FunctionalMethod("includes:", this, this.IncludesMethod));
}