scala-native / scala-native

Your favorite language gets closer to bare metal.
http://scala-native.org
Other
4.49k stars 365 forks source link

Unmangle linking errors #393

Closed MasseGuillaume closed 6 years ago

MasseGuillaume commented 7 years ago
[info] Compiling 1 Scala source to /home/gui/center/native/scala-native/sandbox-native-test-main/target/scala-2.11/test-classes...
Unresolved dependencies:
  `@java.lang.System$::nanoTime_i64`
  `@java.util.concurrent.ExecutionException::init_class.java.lang.String_class.java.lang.Throwable`
  `@java.util.concurrent.ExecutionException`
  `@java.util.concurrent.Executor::execute_trait.java.lang.Runnable_unit`
  `@java.util.concurrent.Executor`
  `@java.util.concurrent.TimeUnit$::field.DAYS`
  `@java.util.concurrent.TimeUnit$::field.HOURS`
  `@java.util.concurrent.TimeUnit$::field.MICROSECONDS`
  `@java.util.concurrent.TimeUnit$::field.MILLISECONDS`
  `@java.util.concurrent.TimeUnit$::field.MINUTES`
  `@java.util.concurrent.TimeUnit$::field.NANOSECONDS`
  `@java.util.concurrent.TimeUnit$::field.SECONDS`
  `@java.util.concurrent.TimeUnit$`
  `@java.util.concurrent.TimeUnit::convert_i64_class.java.util.concurrent.TimeUnit_i64`
  `@java.util.concurrent.TimeUnit::toMillis_i64_i64`
  `@java.util.concurrent.TimeUnit::toNanos_i64_i64`
  `@java.util.concurrent.TimeUnit`
  `@java.util.regex.Pattern$::compile_class.java.lang.String_class.java.util.regex.Pattern`
  `@java.util.regex.Pattern$`
  `@java.util.regex.Pattern::split_trait.java.lang.CharSequence_class.ssnr.ObjectArray`
  `@java.util.regex.Pattern`
  `@scala.Unit`
  `@scala.concurrent.impl.AbstractPromise::getState_class.java.lang.Object`
  `@scala.concurrent.impl.AbstractPromise::init`
  `@scala.concurrent.impl.AbstractPromise::updateState_class.java.lang.Object_class.java.lang.Object_bool`
  `@scala.concurrent.impl.AbstractPromise`

example: @java.util.concurrent.TimeUnit::convert_i64_class.java.util.concurrent.TimeUnit_i64

object TimeUnit {
  def convert(p1: Long, p2: java.util.concurrent.TimeUnit): Long
}
densh commented 7 years ago

Should be relatively easy. We just need to implement an inverse function for https://github.com/scala-native/scala-native/blob/master/nscplugin/src/main/scala/scala/scalanative/nscplugin/NirNameEncoding.scala#L70 and pretty print the result in Scala syntax.

densh commented 6 years ago

While definitely a nice to have, this issue is not a blocker and the state of things right now are more than sufficient to understand the linking errors. 100% unmangling is unlikely to ever work as we are working on erased representation that doesn't preserve all the details (e.g. generic).