package;
class AClass {
public function new() {}
public function iterator():Iterator<String> return new AIterator(this);
}
@:forward()
abstract A(AClass) from AClass to AClass {
public function new() {
this = new AClass();
}
@:to
function toB() return new B();
}
class AIterator {
public function new(a:A) {}
public function hasNext() return true;
public function next() return "AIterator";
}
class B {
public function new() {}
public function hasNext() return true;
public function next() return "B";
}
class Main {
public static function main() {
var iter = new A();
for (s in iter) {
trace(s);
break;
}
for (s in iter.iterator()) {
trace(s);
break;
}
}
}