diff options
author | Adriaan Moors <adriaan.moors@typesafe.com> | 2012-11-16 14:16:34 -0800 |
---|---|---|
committer | Adriaan Moors <adriaan.moors@typesafe.com> | 2012-11-16 14:16:34 -0800 |
commit | 83deccf4aa54257e04412a1ba96430dccd1483bb (patch) | |
tree | d0421ff7ce2c8531088a298da6e1987442b02244 /src | |
parent | 4de1a25c1c8db180269527976cb63bceee43d568 (diff) | |
parent | 1587a77eca46b265dc677b9be2536f1f60503f65 (diff) | |
download | scala-83deccf4aa54257e04412a1ba96430dccd1483bb.tar.gz scala-83deccf4aa54257e04412a1ba96430dccd1483bb.tar.bz2 scala-83deccf4aa54257e04412a1ba96430dccd1483bb.zip |
Merge pull request #1615 from retronym/ticket/6648
SI-6648 copyAttrs must preserve TypeTree#wasEmpty
Diffstat (limited to 'src')
-rw-r--r-- | src/reflect/scala/reflect/internal/Trees.scala | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/reflect/scala/reflect/internal/Trees.scala b/src/reflect/scala/reflect/internal/Trees.scala index 53b40da8f6..b8f5e73acb 100644 --- a/src/reflect/scala/reflect/internal/Trees.scala +++ b/src/reflect/scala/reflect/internal/Trees.scala @@ -482,6 +482,10 @@ trait Trees extends api.Trees { self: SymbolTable => case class TypeTree() extends TypTree with TypeTreeContextApi { private var orig: Tree = null + /** Was this type tree originally empty? That is, does it now contain + * an inferred type that must be forgotten in `resetAttrs` to + * enable retyping. + */ private[scala] var wasEmpty: Boolean = false override def symbol = typeTreeSymbol(this) // if (tpe == null) null else tpe.typeSymbol @@ -502,6 +506,15 @@ trait Trees extends api.Trees { self: SymbolTable => wasEmpty = isEmpty setType(tp) } + + override private[scala] def copyAttrs(tree: Tree) = { + super.copyAttrs(tree) + tree match { + case other: TypeTree => wasEmpty = other.wasEmpty // SI-6648 Critical for correct operation of `resetAttrs`. + case _ => + } + this + } } object TypeTree extends TypeTreeExtractor |