@@ -889,35 +889,12 @@ trait Implicits { self: Typer =>
889
889
* Scope = <scope> // if scope ne NoType
890
890
* }
891
891
*/
892
- private def mirrorCore (parentClass : ClassSymbol , monoType : Type , mirroredType : Type , label : Name , extras : List [( Name , Type )]) (implicit ctx : Context ) = {
893
- val m = parentClass.typeRef
892
+ private def mirrorCore (parentClass : ClassSymbol , monoType : Type , mirroredType : Type , label : Name , formal : Type )(implicit ctx : Context ) =
893
+ formal & parentClass.typeRef
894
894
.refinedWith(tpnme.MirroredMonoType , TypeAlias (monoType))
895
895
.refinedWith(tpnme.MirroredType , TypeAlias (mirroredType))
896
896
.refinedWith(tpnme.MirroredLabel , TypeAlias (ConstantType (Constant (label.toString))))
897
897
898
- extras.foldLeft(m) { case (m, (tpnme, tpe)) => m.refinedWith(tpnme, tpe) }
899
- }
900
-
901
- private def extraRefinements (formal : Type )(implicit ctx : Context ): List [(Name , Type )] = {
902
- def isMirrorMember (nme : Name ): Boolean =
903
- nme == tpnme.MirroredType ||
904
- nme == tpnme.MirroredMonoType ||
905
- nme == tpnme.MirroredLabel ||
906
- nme == tpnme.MirroredElemTypes ||
907
- nme == tpnme.MirroredElemLabels
908
-
909
- @ tailrec
910
- def loop (tp : Type , acc : List [(Name , Type )]): List [(Name , Type )] = tp match {
911
- case RefinedType (parent, nme, rhs) if ! isMirrorMember(nme) =>
912
- loop(parent, (nme, rhs) :: acc)
913
- case RefinedType (parent, nme, rhs) =>
914
- loop(parent, acc)
915
- case other =>
916
- acc
917
- }
918
- loop(formal, Nil )
919
- }
920
-
921
898
/** A path referencing the companion of class type `clsType` */
922
899
private def companionPath (clsType : Type , span : Span )(implicit ctx : Context ) = {
923
900
val ref = pathFor(clsType.companionRef)
@@ -940,12 +917,12 @@ trait Implicits { self: Typer =>
940
917
val module = mirroredType.termSymbol
941
918
val modulePath = pathFor(mirroredType).withSpan(span)
942
919
if (module.info.classSymbol.is(Scala2x )) {
943
- val mirrorType = mirrorCore(defn.Mirror_SingletonProxyClass , mirroredType, mirroredType, module.name, extraRefinements( formal) )
920
+ val mirrorType = mirrorCore(defn.Mirror_SingletonProxyClass , mirroredType, mirroredType, module.name, formal)
944
921
val mirrorRef = New (defn.Mirror_SingletonProxyClass .typeRef, modulePath :: Nil )
945
922
mirrorRef.cast(mirrorType)
946
923
}
947
924
else {
948
- val mirrorType = mirrorCore(defn.Mirror_SingletonClass , mirroredType, mirroredType, module.name, extraRefinements( formal) )
925
+ val mirrorType = mirrorCore(defn.Mirror_SingletonClass , mirroredType, mirroredType, module.name, formal)
949
926
modulePath.cast(mirrorType)
950
927
}
951
928
}
@@ -967,7 +944,7 @@ trait Implicits { self: Typer =>
967
944
(mirroredType, elems)
968
945
}
969
946
val mirrorType =
970
- mirrorCore(defn.Mirror_ProductClass , monoType, mirroredType, cls.name, extraRefinements( formal) )
947
+ mirrorCore(defn.Mirror_ProductClass , monoType, mirroredType, cls.name, formal)
971
948
.refinedWith(tpnme.MirroredElemTypes , TypeAlias (elemsType))
972
949
.refinedWith(tpnme.MirroredElemLabels , TypeAlias (TypeOps .nestedPairs(elemLabels)))
973
950
val mirrorRef =
@@ -1048,7 +1025,7 @@ trait Implicits { self: Typer =>
1048
1025
}
1049
1026
1050
1027
val mirrorType =
1051
- mirrorCore(defn.Mirror_SumClass , monoType, mirroredType, cls.name, extraRefinements( formal) )
1028
+ mirrorCore(defn.Mirror_SumClass , monoType, mirroredType, cls.name, formal)
1052
1029
.refinedWith(tpnme.MirroredElemTypes , TypeAlias (elemsType))
1053
1030
.refinedWith(tpnme.MirroredElemLabels , TypeAlias (TypeOps .nestedPairs(elemLabels)))
1054
1031
val mirrorRef =
0 commit comments