HaxeFoundation / HaxeFoundation/haxe

Iterable arg is not inlineable

Open
#11,602 0 comments 0 reactions 0 assignees View on GitHub
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.