summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIulian Dragos <jaguarul@gmail.com>2010-05-04 09:34:58 +0000
committerIulian Dragos <jaguarul@gmail.com>2010-05-04 09:34:58 +0000
commit6bc86b824867b9c0eaab79bcd798d05759a9167a (patch)
treedfeb8d57074267a851d365ec76fc6673b67a99ed /src
parentdf78ff25e3a4742579417db81bd22fa20b70d4ed (diff)
downloadscala-6bc86b824867b9c0eaab79bcd798d05759a9167a.tar.gz
scala-6bc86b824867b9c0eaab79bcd798d05759a9167a.tar.bz2
scala-6bc86b824867b9c0eaab79bcd798d05759a9167a.zip
Fixed abstract overrides of specialized methods.
Diffstat (limited to 'src')
-rw-r--r--src/compiler/scala/tools/nsc/transform/SpecializeTypes.scala6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/SpecializeTypes.scala b/src/compiler/scala/tools/nsc/transform/SpecializeTypes.scala
index de10a777b0..d27aaba44b 100644
--- a/src/compiler/scala/tools/nsc/transform/SpecializeTypes.scala
+++ b/src/compiler/scala/tools/nsc/transform/SpecializeTypes.scala
@@ -697,8 +697,8 @@ abstract class SpecializeTypes extends InfoTransform with TypingTransformers {
log("Added specialized overload for " + overriding.fullName + " in env: " + env)
val om = specializedOverload(clazz, overridden, env)
typeEnv(om) = env
+ concreteSpecMethods += overriding
if (!overriding.isDeferred) {
- concreteSpecMethods += overriding
// if the override is a normalized member, 'om' gets the implementation from
// its original target, and adds the environment of the normalized member (that is,
// any specialized /method/ type parameter bindings)
@@ -711,6 +711,10 @@ abstract class SpecializeTypes extends InfoTransform with TypingTransformers {
info(overriding) = Forward(om)
log("typeEnv(om) = " + typeEnv(om))
om setPos overriding.pos // set the position of the concrete, overriding member
+ } else {
+ // abstract override
+ log("abstract override " + overriding.fullName + " with specialized " + om.fullName)
+ info(om) = Forward(overriding)
}
overloads(overriding) = Overload(om, env) :: overloads(overriding)
oms += om