summaryrefslogtreecommitdiff
path: root/src/reflect
diff options
context:
space:
mode:
authorLukas Rytz <lukas.rytz@typesafe.com>2014-09-30 08:15:14 +0200
committerLukas Rytz <lukas.rytz@typesafe.com>2014-09-30 08:15:14 +0200
commitb413ee32da54081ca88d77c5356024fcceceb957 (patch)
tree43fe4ac6958a20f6244e86609345443e99635cad /src/reflect
parent2cfac1a3516850a40728fefd8f808613d2e83f84 (diff)
parentbcd1e4f3a3c7a683bb7cf435ef8163ecaf90f126 (diff)
downloadscala-b413ee32da54081ca88d77c5356024fcceceb957.tar.gz
scala-b413ee32da54081ca88d77c5356024fcceceb957.tar.bz2
scala-b413ee32da54081ca88d77c5356024fcceceb957.zip
Merge pull request #4013 from retronym/ticket/8868
SI-8868 Fix unpickling of local dummy symbols
Diffstat (limited to 'src/reflect')
-rw-r--r--src/reflect/scala/reflect/internal/pickling/UnPickler.scala12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/reflect/scala/reflect/internal/pickling/UnPickler.scala b/src/reflect/scala/reflect/internal/pickling/UnPickler.scala
index 8d4c3f752f..5433bfad60 100644
--- a/src/reflect/scala/reflect/internal/pickling/UnPickler.scala
+++ b/src/reflect/scala/reflect/internal/pickling/UnPickler.scala
@@ -243,8 +243,14 @@ abstract class UnPickler {
} getOrElse "")
}
+ def localDummy = {
+ if (nme.isLocalDummyName(name))
+ owner.newLocalDummy(NoPosition)
+ else NoSymbol
+ }
+
// (1) Try name.
- fromName(name) orElse {
+ localDummy orElse fromName(name) orElse {
// (2) Try with expanded name. Can happen if references to private
// symbols are read from outside: for instance when checking the children
// of a class. See #1722.
@@ -298,6 +304,7 @@ abstract class UnPickler {
* (.) ...
* (1) `local child` represents local child classes, see comment in Pickler.putSymbol.
* Since it is not a member, it should not be entered in the owner's scope.
+ * (2) Similarly, we ignore local dummy symbols, as seen in SI-8868
*/
def shouldEnterInOwnerScope = {
sym.owner.isClass &&
@@ -307,7 +314,8 @@ abstract class UnPickler {
!sym.isRefinementClass &&
!sym.isTypeParameter &&
!sym.isExistentiallyBound &&
- sym.rawname != tpnme.LOCAL_CHILD // (1)
+ sym.rawname != tpnme.LOCAL_CHILD && // (1)
+ !nme.isLocalDummyName(sym.rawname) // (2)
}
markFlagsCompleted(sym)(mask = AllFlags)