diff options
author | Grzegorz Kossakowski <grzegorz.kossakowski@gmail.com> | 2013-01-30 16:25:15 -0800 |
---|---|---|
committer | Grzegorz Kossakowski <grzegorz.kossakowski@gmail.com> | 2013-01-30 16:25:15 -0800 |
commit | 7d80e0846964053b81b4e4b5db7b9356e3bcc601 (patch) | |
tree | c51c06601f48dce122c584e488173312b3030fed | |
parent | 74b3e9aefe05363a14c217b558d8f9890c008379 (diff) | |
parent | eba079b6522cc112d949c1f2c18960e31750efd6 (diff) | |
download | scala-7d80e0846964053b81b4e4b5db7b9356e3bcc601.tar.gz scala-7d80e0846964053b81b4e4b5db7b9356e3bcc601.tar.bz2 scala-7d80e0846964053b81b4e4b5db7b9356e3bcc601.zip |
Merge pull request #2008 from paulp/pr/asSeenFromOpt
Optimization in AsSeenFromMap.
-rw-r--r-- | src/reflect/scala/reflect/internal/Types.scala | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/reflect/scala/reflect/internal/Types.scala b/src/reflect/scala/reflect/internal/Types.scala index d0c9b8dd03..a2b3fd5d97 100644 --- a/src/reflect/scala/reflect/internal/Types.scala +++ b/src/reflect/scala/reflect/internal/Types.scala @@ -746,7 +746,7 @@ trait Types extends api.Types { self: SymbolTable => val trivial = ( this.isTrivial || phase.erasedTypes && pre.typeSymbol != ArrayClass - || pre.normalize.isTrivial && !isPossiblePrefix(clazz) + || skipPrefixOf(pre, clazz) ) if (trivial) this else { @@ -4471,14 +4471,15 @@ trait Types extends api.Types { self: SymbolTable => */ def isPossiblePrefix(clazz: Symbol) = clazz.isClass && !clazz.isPackageClass + private def skipPrefixOf(pre: Type, clazz: Symbol) = ( + (pre eq NoType) || (pre eq NoPrefix) || !isPossiblePrefix(clazz) + ) + /** A map to compute the asSeenFrom method */ class AsSeenFromMap(pre: Type, clazz: Symbol) extends TypeMap with KeepOnlyTypeConstraints { var capturedSkolems: List[Symbol] = List() var capturedParams: List[Symbol] = List() - private def skipPrefixOf(pre: Type, clazz: Symbol) = ( - (pre eq NoType) || (pre eq NoPrefix) || !isPossiblePrefix(clazz) - ) override def mapOver(tree: Tree, giveup: ()=>Nothing): Tree = { object annotationArgRewriter extends TypeMapTransformer { private def canRewriteThis(sym: Symbol) = ( @@ -4511,8 +4512,7 @@ trait Types extends api.Types { self: SymbolTable => } def apply(tp: Type): Type = - if (skipPrefixOf(pre, clazz)) tp - else tp match { + tp match { case ThisType(sym) => def toPrefix(pre: Type, clazz: Symbol): Type = if (skipPrefixOf(pre, clazz)) tp |