如何解码Scala编译器生成的名称
我们的代码将通过以下消息终止Scala编译器:如何解码Scala编译器生成的名称,scala,name-mangling,scalac,Scala,Name Mangling,Scalac,我们的代码将通过以下消息终止Scala编译器: [error] how can getCommonSuperclass() do its job if different class symbols get the same bytecode-level internal name: scala/Tuple2$mcJD$sp 为了弄清楚这一点,我试图理解Tuple2$mcJD$sp应该是什么。它是为(Long,Double)生成的类吗?这有文件记录吗?谢谢 到目前为止,我发现
[error] how can getCommonSuperclass() do its job if different class symbols
get the same bytecode-level internal name: scala/Tuple2$mcJD$sp
为了弄清楚这一点,我试图理解Tuple2$mcJD$sp应该是什么。它是为(Long,Double)
生成的类吗?这有文件记录吗?谢谢
到目前为止,我发现了一些线索:
- 我认为类型缩略语与中记录的缩略语相匹配
- 该名称是在中生成的。根据代码,格式为
mc$sp
可能它被认为是编译器内部的东西,没有在任何地方记录。这是来自
scalac
的实际错误吗?正确的说法是,这是一个实际错误。编译器死机时出现了AssertionError
,问题似乎是Kryo让我注册Tuple2$mcJD$sp
,我注册了。我现在改为注册(Long,Double)
,它似乎避免了崩溃scalac
。如果我能创建一个最小的测试用例,我将提交一个bug。