diff options
author | Paul Phillips <paulp@improving.org> | 2011-11-13 16:38:22 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2011-11-13 16:38:22 +0000 |
commit | 38a646ce5cf63aee7c5bde6af4f469729820683c (patch) | |
tree | 5adfbcd02a85aa9bdda3bf5a82f2cb1f9f8c14a6 /src | |
parent | 01141595e9ad642f3f0ddf87df96706719ea8c19 (diff) | |
download | scala-38a646ce5cf63aee7c5bde6af4f469729820683c.tar.gz scala-38a646ce5cf63aee7c5bde6af4f469729820683c.tar.bz2 scala-38a646ce5cf63aee7c5bde6af4f469729820683c.zip |
Sin some more.
"Fiddle with lubs and glbs by never considering getClass as a member in
a refinement generated from them. In a sense we have justification for
this by saying we already treated getClass in an ad-hoc way, so we might
as well go all the way." -- m. odersky
Closes SI-4846.
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/scala/reflect/internal/Definitions.scala | 3 | ||||
-rw-r--r-- | src/compiler/scala/reflect/internal/Types.scala | 2 | ||||
-rw-r--r-- | src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala | 3 |
3 files changed, 5 insertions, 3 deletions
diff --git a/src/compiler/scala/reflect/internal/Definitions.scala b/src/compiler/scala/reflect/internal/Definitions.scala index b94a7e8927..5802174a5b 100644 --- a/src/compiler/scala/reflect/internal/Definitions.scala +++ b/src/compiler/scala/reflect/internal/Definitions.scala @@ -81,6 +81,9 @@ trait Definitions extends reflect.api.StandardDefinitions { def isNumericValueClass(sym: Symbol): Boolean = numericWeight contains sym + def isGetClass(sym: Symbol) = + (sym.name == nme.getClass_) && (sym.paramss.isEmpty || sym.paramss.head.isEmpty) + private[Definitions] def fullNameStrings: List[String] = nme.ScalaValueNames map ("scala." + _) private[Definitions] lazy val fullValueName: Set[Name] = { val values = nme.ScalaValueNames flatMap (x => List(newTypeName("scala." + x), newTermName("scala." + x))) diff --git a/src/compiler/scala/reflect/internal/Types.scala b/src/compiler/scala/reflect/internal/Types.scala index 46b95e6b8c..91cc0a6215 100644 --- a/src/compiler/scala/reflect/internal/Types.scala +++ b/src/compiler/scala/reflect/internal/Types.scala @@ -5615,7 +5615,7 @@ A type's typeSymbol should never be inspected directly. for (sym <- lubBase.nonPrivateMembers) { // add a refinement symbol for all non-class members of lubBase // which are refined by every type in ts. - if (!sym.isClass && !sym.isConstructor && (narrowts forall (t => refines(t, sym)))) + if (!sym.isClass && !sym.isConstructor && !isGetClass(sym) && (narrowts forall (t => refines(t, sym)))) try { val lsym = lubsym(sym) if (lsym != NoSymbol) addMember(lubThisType, lubRefined, lubsym(sym)) diff --git a/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala b/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala index 0bd7109a0d..37dfd10b02 100644 --- a/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala +++ b/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala @@ -798,8 +798,7 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid with } def genMethod(m: IMethod) { - if (m.symbol.isStaticConstructor) return - if ((m.symbol.name == nme.getClass_) && m.params.isEmpty) return + if (m.symbol.isStaticConstructor || definitions.isGetClass(m.symbol)) return debuglog("Generating method " + m.symbol.fullName) method = m |