wasm native strings reboot
とりあえずScalaClassのstring実装を ref null i16Array にしたい
JS Class なんかについては anyref の JS string のまま
TypeTransformer を クラスにして文字列表現を切り替えられるように
string として wasm の array を利用してる場合は各所の実装をwasmに準じたものに変更
これが大変だよね
charAtとか結合とか、型チェックしてるところもi16
code:scala
(func $f.scala.Function1.toString_Ljava.lang.String (type $198)
(param $this (ref $c.java.lang.Object)) (result anyref)
i32.const 1648
i32.const 11
i32.const 67
call $stringLiteral)
(func $m.scala.Function1.toString_Ljava.lang.String (type $3)
(param $this (ref any)) (result anyref)
local.get $this
ref.cast (ref $c.java.lang.Object)
return_call $f.scala.Function1.toString_Ljava.lang.String)
code:scala
(func $f.scala.Function1.toString_Ljava.lang.String (type $195)
(param $this (ref $c.java.lang.Object)) (result anyref)
i32.const 1640
i32.const 11
i32.const 66
call $stringLiteral)
(func $m.scala.Function1.toString_Ljava.lang.String (type $3)
(param $this (ref any)) (result anyref)
local.get $this
ref.cast (ref $c.java.lang.Object)
return_call $f.scala.Function1.toString_Ljava.lang.String)
x.productPrefix.hashCode とかで x.productPrefix の expectedType が AnyType になるの
genApplyStatically のこのへんだな
code:scala
BoxedClassToPrimType.get(targetClassName) match {
case None =>
genTree(receiver, ClassType(targetClassName))
fb += wa.RefAsNonNull
case Some(primReceiverType) =>
if (receiver.tpe == primReceiverType) {
genTreeAuto(receiver)
} else {
genTree(receiver, AnyType)
fb += wa.RefAsNonNull
genUnbox(primReceiverType)
}
}