This page is no longer maintained — Please continue to the home page at www.scala-lang.org

method super$++

1 reply
extempore
Joined: 2008-12-17,
User offline. Last seen 35 weeks 3 days ago.

I noticed this comment in GenJVM in r18060:

// the following call to 'info' may cause certain symbols to fail loading because we're
// too late in the compilation chain (aliases to overloaded symbols will not be properly
// resolved, see scala.Range, method super$++ that fails in UnPickler at LazyTypeRefAndAlias.complete

Are you sure that reasoning is complete? I ask because your particular
example of a method which fails in unpickler -- "super$++" -- is also my
example of a method of interest in a different context, and that is that
its expanded name is lossy.

My desktop which has this code on it is still not unpacked so I can't be
100% specific, but I have a branch which records every call to
originalName and expandName and complains if originalName(expandName(x))
!= x. When building scalac, all the complaints are about constructs
like super.++ because "super$" + "$plus" == "super$$plus" and "$$" is
also used in name mangling, but for a different purpose.

I hadn't pinpointed what if any issues this was causing so it's been
sitting there waiting for me to figure that out, but now that I see it
mentioned by name in a comment I figured I better share what I know.

Iulian Dragos 2
Joined: 2009-02-10,
User offline. Last seen 42 years 45 weeks ago.
Re: method super$++

It looks plausible to be that, but I cannot reproduce it anymore, and I
don't see an obvious code path involving originalName. The crash was due
to not finding the right overload at line 827 in UnPiclers.scala,
returning NoSymbol. I initially thought it's a phase ordering problem,
and names were transformed before the lazy symbol was forced (at the jvm
phase).

iulian

Paul Phillips wrote:
> I noticed this comment in GenJVM in r18060:
>
> // the following call to 'info' may cause certain symbols to fail loading because we're
> // too late in the compilation chain (aliases to overloaded symbols will not be properly
> // resolved, see scala.Range, method super$++ that fails in UnPickler at LazyTypeRefAndAlias.complete
>
> Are you sure that reasoning is complete? I ask because your particular
> example of a method which fails in unpickler -- "super$++" -- is also my
> example of a method of interest in a different context, and that is that
> its expanded name is lossy.
>
> My desktop which has this code on it is still not unpacked so I can't be
> 100% specific, but I have a branch which records every call to
> originalName and expandName and complains if originalName(expandName(x))
> != x. When building scalac, all the complaints are about constructs
> like super.++ because "super$" + "$plus" == "super$$plus" and "$$" is
> also used in name mangling, but for a different purpose.
>
> I hadn't pinpointed what if any issues this was causing so it's been
> sitting there waiting for me to figure that out, but now that I see it
> mentioned by name in a comment I figured I better share what I know.
>
>

Copyright © 2012 École Polytechnique Fédérale de Lausanne (EPFL), Lausanne, Switzerland