You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Some tests by Matt had cases where `.nn` figured prominently in the flamegraph.
I optimized it so that the fast path is streamlined and inlined.
In the following test code:
```
def x: String | Null = "abc"
val y = x.nn
```
the new implementation is
```
10: getstatic #20 // Field MODULE$:LTest$;
13: invokevirtual #24 // Method x:()Ljava/lang/String;
16: astore_0
17: getstatic #29 // Field scala/runtime/Scala3RunTime$.MODULE$:Lscala/runtime/Scala3RunTime$;
20: aload_0
21: invokevirtual #33 // Method scala/runtime/Scala3RunTime$.nn:(Ljava/lang/Object;)Ljava/lang/Object;
24: checkcast #35 // class java/lang/String
27: putstatic #37 // Field y:Ljava/lang/String;
```
The previous implementation was two bytes shorter, but contained in the critical path
- A call to a ScalaRuntime method, which was not inlineable by the JIT compiler due to its size,
- A conversion of a cmparison to a Boolean value (not sure this matters)
- A cast from the return type `Object` to the actual type.
0 commit comments