diff options
author | Eugene Burmako <xeno.by@gmail.com> | 2014-01-07 17:05:30 +0100 |
---|---|---|
committer | Eugene Burmako <xeno.by@gmail.com> | 2014-01-07 20:54:12 +0100 |
commit | db6e3062c13cc3c4d4a8a8245269b0c371657257 (patch) | |
tree | 756b819fbf08ff3b1f9d80d79a6c48cb1e8f3e9e /src/reflect/scala/reflect/api/Trees.scala | |
parent | 527fd9aea58cf5c1b8f638d0321a8d0947d2916a (diff) | |
download | scala-db6e3062c13cc3c4d4a8a8245269b0c371657257.tar.gz scala-db6e3062c13cc3c4d4a8a8245269b0c371657257.tar.bz2 scala-db6e3062c13cc3c4d4a8a8245269b0c371657257.zip |
ExistentialTypeTree.whereClauses are now MemberDefs
Today’s flight back to Lausanne wasn’t as productive as the recent flight
to Minsk (https://github.com/scala/scala/pull/3305), but I noticed
one minor thingie: ExistentialTypeTree had an imprecise type specified
for its whereClauses. This is now fixed.
I didn’t increment PickleFormat.*Version numbers, because this change
introduces only a miniscule incompatibility with what would have been
a meaningless and most likely crash-inducing pickle anyway.
Diffstat (limited to 'src/reflect/scala/reflect/api/Trees.scala')
-rw-r--r-- | src/reflect/scala/reflect/api/Trees.scala | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/reflect/scala/reflect/api/Trees.scala b/src/reflect/scala/reflect/api/Trees.scala index 241747e6d8..83da5141b9 100644 --- a/src/reflect/scala/reflect/api/Trees.scala +++ b/src/reflect/scala/reflect/api/Trees.scala @@ -2058,8 +2058,8 @@ trait Trees { self: Universe => * @group Extractors */ abstract class ExistentialTypeTreeExtractor { - def apply(tpt: Tree, whereClauses: List[Tree]): ExistentialTypeTree - def unapply(existentialTypeTree: ExistentialTypeTree): Option[(Tree, List[Tree])] + def apply(tpt: Tree, whereClauses: List[MemberDef]): ExistentialTypeTree + def unapply(existentialTypeTree: ExistentialTypeTree): Option[(Tree, List[MemberDef])] } /** The API that all existential type trees support @@ -2069,8 +2069,12 @@ trait Trees { self: Universe => /** The underlying type of the existential type. */ def tpt: Tree - /** The clauses of the definition of the existential type. */ - def whereClauses: List[Tree] + /** The clauses of the definition of the existential type. + * Elements are one of the following: + * 1) TypeDef with TypeBoundsTree right-hand side + * 2) ValDef with empty right-hand side + */ + def whereClauses: List[MemberDef] } /** A synthetic tree holding an arbitrary type. Not to be confused with @@ -2533,7 +2537,7 @@ trait Trees { self: Universe => /** Creates a `ExistentialTypeTree` node from the given components, having a given `tree` as a prototype. * Having a tree as a prototype means that the tree's attachments, type and symbol will be copied into the result. */ - def ExistentialTypeTree(tree: Tree, tpt: Tree, whereClauses: List[Tree]): ExistentialTypeTree + def ExistentialTypeTree(tree: Tree, tpt: Tree, whereClauses: List[MemberDef]): ExistentialTypeTree } // ---------------------- traversing and transforming ------------------------------ @@ -2654,6 +2658,8 @@ trait Trees { self: Universe => def transformValDefss(treess: List[List[ValDef]]): List[List[ValDef]] = treess mapConserve (transformValDefs(_)) /** Transforms a list of `CaseDef` nodes. */ + def transformMemberDefs(trees: List[MemberDef]): List[MemberDef] = + trees mapConserve (tree => transform(tree).asInstanceOf[MemberDef]) def transformCaseDefs(trees: List[CaseDef]): List[CaseDef] = trees mapConserve (tree => transform(tree).asInstanceOf[CaseDef]) /** Transforms a list of `Ident` nodes. */ |