HaxeFoundation / HaxeFoundation/haxe
abstract over Map keys prevents iterator inlining
- Dominant language
- Haxe
- Stars
- 6.9k
- Forks
- 715
- Avg merge
- 2d 2h
- Merged PRs (30d)
- 11
Description
```haxe
abstract A(String) {}
var m1 = new Map();
var m2 = new Map();
function main() {
// inlined
for (k in m1.keys()) {
}
// inlined
for (k => v in m1) {
}
// inlined
for (v in m1) {
}
// ---
// not inlined
for (k in m2.keys()) {
}
// not inlined
for (k => v in m2) {
}
// inlined
for (v in m2) {
}
}
```
Generated JS:
```js
function Main_main() {
var h = Main_m1.h;
var k_h = h;
var k_keys = Object.keys(h);
var k_length = k_keys.length;
var k_current = 0;
while(k_current < k_length) {
var k = k_keys[k_current++];
}
var h = Main_m1.h;
var _g_h = h;
var _g_keys = Object.keys(h);
var _g_length = _g_keys.length;
var _g_current = 0;
while(_g_current < _g_length) {
var key = _g_keys[_g_current++];
var _g1_key = key;
var _g1_value = _g_h[key];
var k = _g1_key;
var v = _g1_value;
}
var h = Main_m1.h;
var v_h = h;
var v_keys = Object.keys(h);
var v_length = v_keys.length;
var v_current = 0;
while(v_current < v_length) {
var v = v_h[v_keys[v_current++]];
}
var k = new haxe_ds__$StringMap_StringMapKeyIterator(Main_m2.h);
while(k.hasNext()) {
var k1 = k.next();
}
var _g = new haxe_ds__$StringMap_StringMapKeyValueIterator(Main_m2.h);
while(_g.hasNext()) {
var _g1 = _g.next();
var k = _g1.key;
var v = _g1.value;
}
var h = Main_m2.h;
var v_h = h;
var v_keys = Object.keys(h);
var v_length = v_keys.length;
var v_current = 0;
while(v_current < v_length) {
var v = v_h[v_keys[v_current++]];
}
}
```
Contributor guide
Assessment
This issue has not been assessed yet.