HaxeFoundation / HaxeFoundation/haxe

[jvm] Delayed inlining is required in some cases

Open
#8,799 6 comments 0 reactions 1 assignee Claimed by @Simn View on GitHub
platform-jvm
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

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.