From 0a3d9bd5f16cf478c532b69637e69d53d6de673a Mon Sep 17 00:00:00 2001 From: Jesse Rosalia Date: Sat, 17 Jan 2026 15:35:34 -0800 Subject: [PATCH 1/2] fixed issue where emitting iterator expressions used the class name and not the alias --- src/genes/es/ExprEmitter.hx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/genes/es/ExprEmitter.hx b/src/genes/es/ExprEmitter.hx index 4e0b12a..8f7850c 100644 --- a/src/genes/es/ExprEmitter.hx +++ b/src/genes/es/ExprEmitter.hx @@ -134,8 +134,8 @@ class ExprEmitter extends Emitter { case TField(x, f) if (fieldName(f) == "iterator" && isDynamicIterator(x)): switch (f) { case FStatic(c, cf): - write(c.get().name); - write(".iterator"); + emitValue(x); + emitField("iterator"); default: ctx.addFeature("use.$iterator"); write(ctx.typeAccessor(registerType)); From 5fbbec7ca388fa05ab5d73afd4fd63d267b8bcbe Mon Sep 17 00:00:00 2001 From: Jesse Rosalia Date: Sat, 17 Jan 2026 19:27:46 -0800 Subject: [PATCH 2/2] added test for abstract type with iterator --- tests/Set.hx | 13 +++++++++++++ tests/TestIterators.hx | 12 ++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 tests/Set.hx diff --git a/tests/Set.hx b/tests/Set.hx new file mode 100644 index 0000000..a24dbd7 --- /dev/null +++ b/tests/Set.hx @@ -0,0 +1,13 @@ +package tests; + +// benmerckx/genes#82 +@:forward +abstract Set(js.lib.Set) { + public inline function new(?initial: Iterable) { + this = new js.lib.Set(); + } + + public function iterator(): js.lib.HaxeIterator { + return new js.lib.HaxeIterator(this.values()); + } +} diff --git a/tests/TestIterators.hx b/tests/TestIterators.hx index 5810d4f..cc24c1b 100644 --- a/tests/TestIterators.hx +++ b/tests/TestIterators.hx @@ -48,4 +48,16 @@ class TestIterators { final x = a.iterator; return assert(x().next() == 0); } + + // benmerckx/genes#82 + public function testIteratorWithImportAlias() { + final set = new Set(); + set.add(1); + set.add(2); + var count = 0; + for (item in set) { + count++; + } + return assert(count == 2); + } }