HaxeFoundation / HaxeFoundation/haxe
[jvm] Delayed inlining is required in some cases
- Dominant language
- Haxe
- Stars
- 6.9k
- Forks
- 715
- Avg merge
- 2d 2h
- Merged PRs (30d)
- 11
Description
```haxe
class Main {
static public function main() {
inlineSplit("foo");
}
static inline function inlineSplit;}>(x:T) {
return x.split("");
}
}
```
```
Exception in thread "main" java.lang.NoSuchMethodError: java.lang.String.split(Ljava/lang/String;)Lhaxe/root/Array;
at haxe.root.Main.main(source/Main.hx:3)
at haxe.root.Main.main(source/Main.hx)
```
The problem is that this is typed as `FInstance`:
```
public static function main[Function:Void -> Void]
[Block:Array]
[Call:Array]
[Field:(s : java.lang.String) -> Array]
[Const:java.lang.String] "foo"
[FInstance:(s : java.lang.String) -> Array]
java.lang.String
split:(delimiter : java.lang.String) -> Array
[Const:java.lang.String] ""
```
`String.split` on the JVM target is an extern inline function:
```haxe
@:runtime inline function split(delimiter:String):Array {
return jvm.StringExt.split(this, delimiter);
}
```
This should mean that we _have to_ inline any `FInstance` calls to this, which can be done during post-processing.
Contributor guide
Assessment
This issue has not been assessed yet.