From a1375bf437dccf5ade90823a5c8b65cb5d84874b Mon Sep 17 00:00:00 2001 From: Paul Phillips Date: Thu, 30 Jun 2011 20:18:58 +0000 Subject: Fix for recently introduced performance regress... Fix for recently introduced performance regression, no review. --- src/compiler/scala/reflect/internal/Symbols.scala | 4 ++-- src/compiler/scala/reflect/internal/Types.scala | 4 ++-- src/compiler/scala/tools/nsc/typechecker/Typers.scala | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/compiler/scala/reflect/internal/Symbols.scala b/src/compiler/scala/reflect/internal/Symbols.scala index ca22c16e76..4d6ec1a41a 100644 --- a/src/compiler/scala/reflect/internal/Symbols.scala +++ b/src/compiler/scala/reflect/internal/Symbols.scala @@ -307,8 +307,8 @@ trait Symbols /* extends reflect.generic.Symbols*/ { self: SymbolTable => final def isModuleClass = isClass && hasFlag(MODULE) final def isOverloaded = hasFlag(OVERLOADED) final def isRefinementClass = isClass && name == tpnme.REFINE_CLASS_NAME - final def isRefinementMember = owner.isStructuralRefinement && isVisibleInRefinement && !hasAccessBoundary - final def isVisibleInRefinement = !(isConstructor || isOverridingSymbol || isPrivate) + final def isPossibleInRefinement = !isConstructor && !isOverridingSymbol + final def isStructuralRefinementMember = owner.isStructuralRefinement && isPossibleInRefinement && isPublic final def isSourceMethod = isMethod && !hasFlag(STABLE) // exclude all accessors!!! final def isTypeParameter = isType && isParameter && !isSkolem diff --git a/src/compiler/scala/reflect/internal/Types.scala b/src/compiler/scala/reflect/internal/Types.scala index 6300c8731a..75243c6e1c 100644 --- a/src/compiler/scala/reflect/internal/Types.scala +++ b/src/compiler/scala/reflect/internal/Types.scala @@ -1410,7 +1410,7 @@ trait Types /*extends reflect.generic.Types*/ { self: SymbolTable => override def isNotNull: Boolean = parents exists (_.isNotNull) override def isStructuralRefinement: Boolean = - typeSymbol.isAnonOrRefinementClass && decls.exists(_.isVisibleInRefinement) + typeSymbol.isAnonOrRefinementClass && decls.exists(_.isPossibleInRefinement) // override def isNullable: Boolean = // parents forall (p => p.isNullable && !p.typeSymbol.isAbstractType); @@ -2019,7 +2019,7 @@ A type's typeSymbol should never be inspected directly. else if (sym.isAnonymousClass && sym.isInitialized && !settings.debug.value && !phase.erasedTypes) thisInfo.parents.mkString(" with ") + { if (sym.isStructuralRefinement) - decls filter (_.isVisibleInRefinement) map (_.defString) mkString("{", "; ", "}") + decls filter (sym => sym.isPossibleInRefinement && sym.isPublic) map (_.defString) mkString("{", "; ", "}") else "" } else if (sym.isRefinementClass && sym.isInitialized) diff --git a/src/compiler/scala/tools/nsc/typechecker/Typers.scala b/src/compiler/scala/tools/nsc/typechecker/Typers.scala index ba965290fe..23d7210758 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Typers.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Typers.scala @@ -1784,7 +1784,7 @@ trait Typers extends Modes { } } - if (meth.isRefinementMember) + if (meth.isStructuralRefinementMember) checkMethodStructuralCompatible(meth) treeCopy.DefDef(ddef, typedMods, ddef.name, tparams1, vparamss1, tpt1, rhs1) setType NoType @@ -1907,8 +1907,8 @@ trait Typers extends Modes { // -> members that are hidden by the type of the block are made private ( classDecls filter (member => member.isTerm - && member.isVisibleInRefinement - && !member.hasAccessBoundary + && member.isPossibleInRefinement + && member.isPublic && !matchesVisibleMember(member) ) foreach { member => -- cgit v1.2.3