2024/5/3 scala-wasm
code:text
fail to cast to ClassName<org.scalajs.testing.common.RPCCore$BoundMsgEndpoint> from 0 in List(ClassName<scala.collection.mutable.SortedSet>, ClassName<scala.collection.mutable.ResizableArray>, ClassName<scala.collection.mutable.Map>, ClassName<scala.collection.immutable.SortedMap>, ClassName<scala.collection.immutable.SortedSet>, ClassName<scala.collection.immutable.LinearSeq>, ClassName<scala.collection.immutable.IndexedSeq>, ClassName<scala.collection.generic.SeqForwarder>, ClassName<scala.collection.mutable.ArrayOps>, ClassName<scala.runtime.IntegralProxy>, ClassName<scala.math.Numeric$FloatIsFractional>, ClassName<scala.math.Numeric$DoubleIsFractional>, ClassName<scala.math.Numeric$BigDecimalAsIfIntegral>, ClassName<scala.math.Numeric$ShortIsIntegral>, ClassName<scala.math.Numeric$LongIsIntegral>, ClassName<scala.math.Numeric$IntIsIntegral>, ClassName<scala.math.Numeric$CharIsIntegral>, ClassName<scala.math.Numeric$ByteIsIntegral>, ClassName<org.scalajs.testsuite.compiler.SAMWithOverridingBridgesTest$VariantB$SAM_F1>, ClassName<scala.reflect.Manifest>, ClassName<scala.math.Ordering$StringOrdering>, ClassName<java.util.Collections$WrappedSet>, ClassName<java.util.Collections$WrappedList>, ClassName<scala.concurrent.impl.Promise$KeptPromise$Kept>, ClassName<java.util.NavigableSet>, ClassName<java.util.Collections$WrappedSortedMap>, ClassName<scala.collection.BufferedIterator>, ClassName<scala.Product2$mcII$sp>, ClassName<org.scalajs.testsuite.javalib.util.SortedSetTest>, ClassName<org.scalajs.testsuite.javalib.util.SortedSetFactory>, ClassName<org.scalajs.testsuite.javalib.util.ListTest>, ClassName<org.scalajs.testsuite.javalib.util.CollectionsSynchronizedListTest>, ClassName<org.scalajs.testsuite.javalib.util.CollectionsOnSynchronizedSetTest>, ClassName<org.scalajs.testsuite.javalib.util.CollectionsOnSetFromMapTest>, ClassName<org.scalajs.testsuite.javalib.util.CollectionsOnCheckedSetTest>, ClassName<org.scalajs.testsuite.javalib.util.CollectionsCheckedListTest>, ClassName<java.util.Deque>, ClassName<java.util.Collections$WrappedListIterator>, ClassName<scala.concurrent.ExecutionContextExecutor>, ClassName<scala.Product9>, ClassName<scala.Product8>, ClassName<scala.Product7>, ClassName<scala.Product6>, ClassName<scala.Product5>, ClassName<scala.Product4>, ClassName<scala.Product3>, ClassName<scala.Product22>, ClassName<scala.Product21>, ClassName<scala.Product20>, ClassName<scala.Product19>, ClassName<scala.Product18>, ClassName<scala.Product17>, ClassName<scala.Product16>, ClassName<scala.Product15>, ClassName<scala.Product14>, ClassName<scala.Product13>, ClassName<scala.Product12>, ClassName<scala.Product11>, ClassName<scala.Product10>, ClassName<org.scalajs.testsuite.javalib.util.NavigableMapTest>, ClassName<org.scalajs.testsuite.javalib.util.NavigableMapFactory>, ClassName<org.scalajs.testsuite.javalib.util.ListFactory>, ClassName<org.scalajs.testsuite.javalib.util.DequeTest>, ClassName<org.scalajs.testsuite.javalib.util.DequeFactory>, ClassName<org.scalajs.testsuite.javalib.util.CollectionsSynchronizedCollectionTest>, ClassName<org.scalajs.testsuite.javalib.util.CollectionsOnSynchronizedMapTest>, ClassName<org.scalajs.testsuite.javalib.util.CollectionsOnCheckedMapTest>, ClassName<org.scalajs.testsuite.javalib.util.CollectionsCheckedCollectionTest>, ClassName<org.scalajs.testsuite.compiler.SAMWithOverridingBridgesTest$VariantB$C>, ClassName<org.scalajs.testsuite.compiler.SAMTest$NonLMFCapableSAM>, ClassName<org.scalajs.testsuite.compiler.A5$D5>, ClassName<java.util.NavigableMap>, ClassName<scala.util.control.ControlThrowable>, ClassName<scala.scalajs.js.LowPrioAnyImplicits>, ClassName<scala.math.ScalaNumericConversions>, ClassName<scala.concurrent.BatchingExecutor>, ClassName<scala.collection.mutable.FlatHashTable>, ClassName<scala.collection.generic.TraversableFactory>, ClassName<scala.Function1$mcII$sp>, ClassName<scala.AnyValCompanion>, ClassName<sbt.testing.SubclassFingerprint>, ClassName<sbt.testing.AnnotatedFingerprint>, ClassName<org.scalajs.testsuite.niobuffer.BufferFactory$WrappedTypedArrayBufferFactory>, ClassName<org.scalajs.testsuite.javalib.util.concurrent.ConcurrentMapFactory>, ClassName<org.scalajs.testsuite.javalib.util.SetTest$A$1>, ClassName<org.scalajs.testsuite.compiler.SAMWithOverridingBridgesTest$VariantA$JsonObjectEncoder>, ClassName<org.scalajs.testsuite.compiler.B2>, ClassName<org.scalajs.testsuite.compiler.B1>, ClassName<org.scalajs.testsuite.compiler.A5$S5>, ClassName<org.scalajs.testing.common.RPCEndpoint>, ClassName<org.scalajs.testing.common.RPCCore$BoundRPCEndpoint>, ClassName<org.scalajs.testing.common.RPCCore$BoundMsgEndpoint>, ClassName<org.scalajs.testing.common.MsgEndpoint>, ClassName<org.hamcrest.Matcher>, ClassName<java.util.function.UnaryOperator>, ClassName<java.util.function.BinaryOperator>, ClassName<java.util.concurrent.ConcurrentMap>, ClassName<java.io.Closeable>, ClassName<scala.util.matching.Regex$MatchData>, ClassName<scala.math.LowPriorityOrderingImplicits>, ClassName<scala.math.LowPriorityEquiv>, ClassName<scala.concurrent.OnCompleteRunnable>, ClassName<scala.concurrent.BlockContext>, ClassName<scala.collection.mutable.HashEntry>, ClassName<scala.collection.generic.BitSetFactory>, ClassName<scala.collection.generic.BitOperations$Int>, ClassName<scala.annotation.StaticAnnotation>, ClassName<scala.Function2>, ClassName<org.scalajs.testsuite.niobuffer.BufferFactory$ReadOnlyBufferFactory>, ClassName<org.scalajs.testsuite.library.ReflectTest$EnablingTrait>, ClassName<org.scalajs.testsuite.compiler.RegressionTest$Bug3013$A2>, ClassName<org.scalajs.testsuite.compiler.RegressionJSTest$Bug3013_ScalaOuter_JSInner$A2>, ClassName<org.scalajs.testing.bridge.HTMLRunner$UI$TestTask>, ClassName<java.util.internal.GenericArrayOps$ArrayOps>, ClassName<java.util.concurrent.locks.Lock>, ClassName<java.util.SizeChangeEvent>, ClassName<java.util.Map$Entry>, ClassName<java.security.Guard>, ClassName<java.lang.constant.ConstantDesc>, ClassName<java.nio.GenDataViewBuffer$NewDataViewBuffer>, ClassName<java.nio.GenHeapBuffer$NewHeapBuffer>, ClassName<java.nio.GenHeapBufferView$NewHeapBufferView>, ClassName<java.nio.GenTypedArrayBuffer$NewTypedArrayBuffer>, ClassName<java.util.Enumeration>, ClassName<java.util.Formattable>, ClassName<java.util.concurrent.Callable>, ClassName<java.util.function.BiConsumer>, ClassName<java.util.function.BiPredicate>, ClassName<java.util.function.BooleanSupplier>, ClassName<java.util.function.Consumer>, ClassName<java.util.function.DoubleBinaryOperator>, ClassName<java.util.function.DoubleConsumer>, ClassName<java.util.function.DoubleFunction>, ClassName<java.util.function.DoublePredicate>, ClassName<java.util.function.DoubleSupplier>, ClassName<java.util.function.DoubleToIntFunction>, ClassName<java.util.function.DoubleToLongFunction>, ClassName<java.util.function.DoubleUnaryOperator>, ClassName<java.util.function.IntBinaryOperator>, ClassName<java.util.function.IntConsumer>, ClassName<java.util.function.IntFunction>, ClassName<java.util.function.IntPredicate>, ClassName<java.util.function.IntSupplier>, ClassName<java.util.function.IntToDoubleFunction>, ClassName<java.util.function.IntToLongFunction>, ClassName<java.util.function.IntUnaryOperator>, ClassName<java.util.function.LongBinaryOperator>, ClassName<java.util.function.LongConsumer>, ClassName<java.util.function.LongFunction>, ClassName<java.util.function.LongPredicate>, ClassName<java.util.function.LongSupplier>, ClassName<java.util.function.LongToDoubleFunction>, ClassName<java.util.function.LongToIntFunction>, ClassName<java.util.function.LongUnaryOperator>, ClassName<java.util.function.ObjDoubleConsumer>, ClassName<java.util.function.ObjIntConsumer>, ClassName<java.util.function.ObjLongConsumer>, ClassName<java.util.function.Predicate>, ClassName<java.util.function.Supplier>, ClassName<java.util.function.ToDoubleBiFunction>, ClassName<java.util.function.ToDoubleFunction>, ClassName<java.util.function.ToIntBiFunction>, ClassName<java.util.function.ToIntFunction>, ClassName<java.util.function.ToLongBiFunction>, ClassName<java.util.function.ToLongFunction>, ClassName<java.util.regex.MatchResult>, ClassName<org.hamcrest.Description>, ClassName<org.junit.function.ThrowingRunnable>, ClassName<org.scalajs.junit.Bootstrapper>, ClassName<org.scalajs.testing.bridge.HTMLRunner$UI$MoveTarget>, ClassName<org.scalajs.testing.common.RPCCore$PendingCall>, ClassName<org.scalajs.testing.common.Serializer>, ClassName<org.scalajs.testsuite.compiler.A3>, ClassName<org.scalajs.testsuite.compiler.DefaultMethodsJSTest$SimpleInterfaceWithDefault>, ClassName<org.scalajs.testsuite.compiler.MatchTest$ValueClassBase>, ClassName<org.scalajs.testsuite.compiler.NameEncodingTest$Foo$1>, ClassName<org.scalajs.testsuite.compiler.NameEncodingTest$Foo$2>, ClassName<org.scalajs.testsuite.compiler.ReflectiveCallTest$A$2>, ClassName<org.scalajs.testsuite.compiler.RegressionTest$Bar$2>, ClassName<org.scalajs.testsuite.compiler.RegressionTest$Helpers$1>, ClassName<org.scalajs.testsuite.compiler.RegressionTest$Parent$1>, ClassName<org.scalajs.testsuite.compiler.RegressionTest$Parser$2>, ClassName<org.scalajs.testsuite.compiler.RegressionTest$TraitMixedInLocalLazyVal$1>, ClassName<org.scalajs.testsuite.compiler.SAMTest$SAMReturningChar>, ClassName<org.scalajs.testsuite.compiler.SAMTest$SAMReturningVC>, ClassName<org.scalajs.testsuite.compiler.SAMTest$SAMTakingChar>, ClassName<org.scalajs.testsuite.compiler.SAMTest$SAMTakingVC>, ClassName<org.scalajs.testsuite.compiler.SAMWithOverridingBridgesTest$VariantA$JsonValue>, ClassName<org.scalajs.testsuite.javalib.io.CommonStreamsTests>, ClassName<org.scalajs.testsuite.javalib.io.DataInputStreamTest>, ClassName<org.scalajs.testsuite.jsinterop.NestedJSClassTest$ScalaTraitContainer>, ClassName<org.scalajs.testsuite.jsinterop.SAMJSTest$SAMInAnonJSClass_MySAM>, ClassName<org.scalajs.testsuite.jsinterop.ThisFunctionTest$TraitWithThisFunction$1>, ClassName<org.scalajs.testsuite.junit.JUnitMixinTestTrait>, ClassName<org.scalajs.testsuite.library.StackTraceTest$FooTrait>, ClassName<org.scalajs.testsuite.niobuffer.BufferFactory$SlicedBufferFactory>, ClassName<org.scalajs.testsuite.niobuffer.SupportsTypedArrays>, ClassName<org.scalajs.testsuite.typedarray.TypedArrayTest>, ClassName<org.scalajs.testsuite.utils.Requires$StrictFloats>, ClassName<org.scalajs.testsuite.utils.Requires$TypedArray>, ClassName<sbt.testing.Event>, ClassName<sbt.testing.EventHandler>, ClassName<sbt.testing.Framework>, ClassName<sbt.testing.Logger>, ClassName<sbt.testing.Runner>, ClassName<sbt.testing.Task>, ClassName<scala.DeprecatedPredef>, ClassName<scala.Dynamic>, ClassName<scala.Function3>, ClassName<scala.collection.generic.CanBuildFrom>, ClassName<scala.scalajs.js.$bar$Evidence>, ClassName<com.novocode.junit.JUnitFramework>, ClassName<java.lang.Boolean$>, ClassName<java.lang.Byte$>, ClassName<java.lang.Character$>, ClassName<java.lang.Double$>, ClassName<java.lang.Float$>, ClassName<java.lang.Integer$>, ClassName<java.lang.Long$>, ClassName<java.lang.Number>, ClassName<java.lang.Short$>, ClassName<java.lang.StackTraceElement>, ClassName<java.lang.String$>, ClassName<java.lang.Thread>, ClassName<java.lang.Throwable>, ClassName<java.math.BigDecimal$>, ClassName<java.math.BigInteger$>, ClassName<java.math.RoundingMode$>, ClassName<java.net.URI$>, ClassName<java.nio.DataViewCharBuffer$NewDataViewCharBuffer$>, ClassName<java.nio.DataViewDoubleBuffer$NewDataViewDoubleBuffer$>, ClassName<java.nio.DataViewFloatBuffer$NewDataViewFloatBuffer$>, ClassName<java.nio.DataViewIntBuffer$NewDataViewIntBuffer$>, ClassName<java.nio.DataViewLongBuffer$NewDataViewLongBuffer$>, ClassName<java.nio.DataViewShortBuffer$NewDataViewShortBuffer$>, ClassName<java.nio.HeapByteBuffer$NewHeapByteBuffer$>, ClassName<java.nio.HeapByteBufferCharView$NewHeapByteBufferCharView$>, ClassName<java.nio.HeapByteBufferDoubleView$NewHeapByteBufferDoubleView$>, ClassName<java.nio.HeapByteBufferFloatView$NewHeapByteBufferFloatView$>, ClassName<java.nio.HeapByteBufferIntView$NewHeapByteBufferIntView$>, ClassName<java.nio.HeapByteBufferLongView$NewHeapByteBufferLongView$>, ClassName<java.nio.HeapByteBufferShortView$NewHeapByteBufferShortView$>, ClassName<java.nio.HeapCharBuffer$NewHeapCharBuffer$>, ClassName<java.nio.HeapDoubleBuffer$NewHeapDoubleBuffer$>, ClassName<java.nio.HeapFloatBuffer$NewHeapFloatBuffer$>, ClassName<java.nio.HeapIntBuffer$NewHeapIntBuffer$>, ClassName<java.nio.HeapLongBuffer$NewHeapLongBuffer$>, ClassName<java.nio.HeapShortBuffer$NewHeapShortBuffer$>, ClassName<java.nio.TypedArrayByteBuffer$NewTypedArrayByteBuffer$>, ClassName<java.nio.TypedArrayCharBuffer$NewTypedArrayCharBuffer$>, ClassName<java.nio.TypedArrayDoubleBuffer$NewTypedArrayDoubleBuffer$>, ClassName<java.nio.TypedArrayFloatBuffer$NewTypedArrayFloatBuffer$>, ClassName<java.nio.TypedArrayIntBuffer$NewTypedArrayIntBuffer$>, ClassName<java.nio.TypedArrayShortBuffer$NewTypedArrayShortBuffer$>, ClassName<java.nio.charset.Charset>)
wasm://wasm/058cfb1e:1
| => scalajs-test-suite / Test / fastLinkJS 6s
RuntimeError: illegal cast
at $p#org.scalajs.testing.common.RPCCore#$anonfun$handleMessage$1_Ljava.io.DataInputStream_V (wasm://wasm/058cfb1e:wasm-function5618:0x14898f) at $f#org.scalajs.testing.common.RPCCore#handleMessage_Ljava.lang.String_V__c0 (wasm://wasm/058cfb1e:wasm-function5582:0x147fee) at jsFunctionApply (file:///Users/tanishiking/ghq/github.com/tanishiking/scala-wasm/scalajs-test-suite/target/scala-2.12/scalajs-test-suite-test-fastopt/__loader.mjs:164:33)
at $f#scala.scalajs.runtime.AnonFunction1#apply_Ljava.lang.Object_Ljava.lang.Object (wasm://wasm/058cfb1e:wasm-function59287:0x4de493) at $f#org.scalajs.testing.common.Serializer$#withInputStream_Ljava.lang.String_Lscala.Function1_Ljava.lang.Object (wasm://wasm/058cfb1e:wasm-function5750:0x149dfd) at $f#org.scalajs.testing.common.RPCCore#handleMessage_Ljava.lang.String_V (wasm://wasm/058cfb1e:wasm-function5583:0x14801a) at $f#org.scalajs.testing.bridge.JSRPC$#org$scalajs$testing$bridge$JSRPC$$$anonfun$new$1_Ljava.lang.String_V (wasm://wasm/058cfb1e:wasm-function29840:0x32cc24) at $ct#org.scalajs.testing.bridge.JSRPC$#<init>_V__c0 (wasm://wasm/058cfb1e:wasm-function29842:0x32cc4c) at comSetup.js:48:11
at process.processTicksAndRejections (node:internal/process/task_queues:77:11)
Node.js v22.0.0
BoundMsgEndpointを実装しているクラスのitablesの0要素目には BoundMsgEndpointのitableがいるはず、なのにない!
何故?
code:scala
final def attach(ep: MsgEndpoint)(ex: ep.Msg => Unit): Unit = {
attach(new BoundMsgEndpoint {
val endpoint: ep.type = ep
val exec = ex
})
このへんが怪しい?
start function内で itables 埋めるところ、interfaces に本人を含んでいない?
でもこれinterfaceそのものがインスタンス化されることないしな
new foo {} みたいなのは anonymous class が生成されるから大丈夫なはずだし
そもそも、これが原因なら下の実装でも問題になってたはずては?
RPCCore の無名クラスが BoundMsgEndpoint をちゃんと itable にもっていそう。
code:text
ClassName<org.scalajs.testing.common.RPCCore$$anon$1> implements List(ClassName<org.scalajs.testing.common.RPCCore$BoundMsgEndpoint>, ClassName<org.scalajs.testing.common.RPCCore$BoundEndpoint>)
0: ClassName<org.scalajs.testing.common.RPCCore$BoundMsgEndpoint>
1: ClassName<org.scalajs.testing.common.RPCCore$BoundEndpoint>
code:text
ClassName<org.scalajs.testing.common.RPCCore$$anon$1> implements List(ClassName<org.scalajs.testing.common.RPCCore$BoundMsgEndpoint>, ClassName<org.scalajs.testing.common.RPCCore$BoundEndpoint>)
0: ClassName<org.scalajs.testing.common.RPCCore$BoundMsgEndpoint>
1: ClassName<org.scalajs.testing.common.RPCCore$BoundEndpoint>
fail to cast to ClassName<org.scalajs.testing.common.RPCCore$BoundMsgEndpoint> from 0 in WasmFunctionName(p#org.scalajs.testing.common.RPCCore,$anonfun$handleMessage$1;Ljava.io.DataInputStream;V) of Some(ClassName<org.scalajs.testing.common.RPCCore>) for method call MethodName<endpoint;Lorg.scalajs.testing.common.MsgEndpoint>
ここっぽい