HaxeFoundation / HaxeFoundation/haxe
Iterable arg is not inlineable
- Dominant language
- Haxe
- Stars
- 6.9k
- Forks
- 715
- Avg merge
- 2d 2h
- Merged PRs (30d)
- 11
Description
Maybe it can be optimized to work like `Array` without allocating iterator objects here?
Blocks optimization point of https://github.com/HaxeFoundation/haxe/pull/11148
```haxe
using Main;
class Main {
static function main() new Main();
final nums = [1, 2, 3];
public function new() {
final foo = nums.inlineExists(item -> item == 1);
trace(foo);
final foo2 = nums.inlineArrExists(item -> item == 1);
trace(foo2);
}
public static inline function inlineExists(it:Iterable, f:(item:T) -> Bool):Bool {
var result = false;
for (v in it) {
if (f(v)) {
result = true;
break;
}
}
return result;
}
public static inline function inlineArrExists(it:Array, f:(item:T) -> Bool):Bool {
var result = false;
for (v in it) {
if (f(v)) {
result = true;
break;
}
}
return result;
}
}
```
Js output:
```js
this.nums = [1,2,3];
var result = false;
var v = $getIterator(this.nums);
while(v.hasNext()) if(v.next() == 1) {
result = true;
break;
}
console.log("src/Main.hx:9:",result);
var it = this.nums;
var result = false;
var _g = 0;
while(_g < it.length) if(it[_g++] == 1) {
result = true;
break;
}
console.log("src/Main.hx:11:",result);
```
Contributor guide
Assessment
This issue has not been assessed yet.