Skip to content

Commit d55840e

Browse files
committed
Asserts about Tree qualifiers.
Encoding recent revelations about certain tree invariants in the form of asserts.
1 parent b149c7b commit d55840e

File tree

4 files changed

+20
-7
lines changed

4 files changed

+20
-7
lines changed

src/compiler/scala/tools/nsc/ast/Trees.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ trait Trees extends scala.reflect.internal.Trees { self: Global =>
5656
* The class `C` is stored as a tree attachment.
5757
*/
5858
case class InjectDerivedValue(arg: Tree)
59-
extends SymTree
59+
extends SymTree with TermTree
6060

6161
class PostfixSelect(qual: Tree, name: Name) extends Select(qual, name)
6262

src/compiler/scala/tools/nsc/ast/parser/Parsers.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1933,7 +1933,7 @@ self =>
19331933
case _ =>
19341934
}
19351935
val typeAppliedTree = in.token match {
1936-
case LBRACKET => atPos(start, in.offset)(TypeApply(convertToTypeId(t), typeArgs()))
1936+
case LBRACKET => atPos(start, in.offset)(AppliedTypeTree(convertToTypeId(t), typeArgs()))
19371937
case _ => t
19381938
}
19391939
in.token match {

src/reflect/scala/reflect/internal/Trees.scala

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -391,6 +391,9 @@ trait Trees extends api.Trees { self: SymbolTable =>
391391

392392
case class TypeApply(fun: Tree, args: List[Tree])
393393
extends GenericApply with TypeApplyApi {
394+
395+
assert(fun.isTerm, fun)
396+
394397
override def symbol: Symbol = fun.symbol
395398
override def symbol_=(sym: Symbol) { fun.symbol = sym }
396399
}
@@ -426,7 +429,11 @@ trait Trees extends api.Trees { self: SymbolTable =>
426429
object This extends ThisExtractor
427430

428431
case class Select(qualifier: Tree, name: Name)
429-
extends RefTree with SelectApi
432+
extends RefTree with SelectApi {
433+
434+
// !!! assert disabled due to test case pos/annotDepMethType.scala triggering it.
435+
// assert(qualifier.isTerm, qualifier)
436+
}
430437
object Select extends SelectExtractor
431438

432439
case class Ident(name: Name) extends RefTree with IdentContextApi {
@@ -458,7 +465,10 @@ trait Trees extends api.Trees { self: SymbolTable =>
458465
object SingletonTypeTree extends SingletonTypeTreeExtractor
459466

460467
case class SelectFromTypeTree(qualifier: Tree, name: TypeName)
461-
extends RefTree with TypTree with SelectFromTypeTreeApi
468+
extends RefTree with TypTree with SelectFromTypeTreeApi {
469+
470+
assert(qualifier.isType, qualifier)
471+
}
462472
object SelectFromTypeTree extends SelectFromTypeTreeExtractor
463473

464474
case class CompoundTypeTree(templ: Template)
@@ -467,6 +477,9 @@ trait Trees extends api.Trees { self: SymbolTable =>
467477

468478
case class AppliedTypeTree(tpt: Tree, args: List[Tree])
469479
extends TypTree with AppliedTypeTreeApi {
480+
481+
assert(tpt.isType, tpt)
482+
470483
override def symbol: Symbol = tpt.symbol
471484
override def symbol_=(sym: Symbol) { tpt.symbol = sym }
472485
}
@@ -1314,7 +1327,7 @@ trait Trees extends api.Trees { self: SymbolTable =>
13141327

13151328
class ChangeOwnerTraverser(val oldowner: Symbol, val newowner: Symbol) extends Traverser {
13161329
final def change(sym: Symbol) = {
1317-
if (sym != NoSymbol && sym.owner == oldowner)
1330+
if (sym != NoSymbol && sym.owner == oldowner)
13181331
sym.owner = newowner
13191332
}
13201333
override def traverse(tree: Tree) {

test/files/neg/gadts1.check

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ gadts1.scala:15: error: type mismatch;
33
required: a
44
case NumTerm(n) => c.x = Double(1.0)
55
^
6-
gadts1.scala:20: error: class Cell of type Test.Cell does not take type parameters.
6+
gadts1.scala:20: error: Test.Cell[a] does not take parameters
77
case Cell[a](x: Int) => c.x = 5
8-
^
8+
^
99
gadts1.scala:20: error: type mismatch;
1010
found : Int(5)
1111
required: a

0 commit comments

Comments
 (0)