summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2011-11-13 16:38:22 +0000
committerPaul Phillips <paulp@improving.org>2011-11-13 16:38:22 +0000
commit38a646ce5cf63aee7c5bde6af4f469729820683c (patch)
tree5adfbcd02a85aa9bdda3bf5a82f2cb1f9f8c14a6 /src
parent01141595e9ad642f3f0ddf87df96706719ea8c19 (diff)
downloadscala-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.scala3
-rw-r--r--src/compiler/scala/reflect/internal/Types.scala2
-rw-r--r--src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala3
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