@@ -104,7 +104,7 @@ class Definitions {
104104 *
105105 * ImplicitFunctionN traits follow this template:
106106 *
107- * trait ImplicitFunctionN[T0,...,T{N-1}, R] extends Object with FunctionN[T0,...,T{N-1}, R] {
107+ * trait ImplicitFunctionN[T0,...,T{N-1}, R] extends Object {
108108 * def apply(implicit $x0: T0, ..., $x{N_1}: T{N-1}): R
109109 * }
110110 */
@@ -118,22 +118,12 @@ class Definitions {
118118 for (i <- List .range(0 , arity)) yield
119119 enterTypeParam(cls, name ++ " $T" ++ i.toString, Contravariant , decls)
120120 val resParam = enterTypeParam(cls, name ++ " $R" , Covariant , decls)
121- val (methodType, parentTraits) =
122- if (name.startsWith(tpnme.ImplicitFunction )) {
123- val superTrait =
124- FunctionType (arity).appliedTo(argParams.map(_.typeRef) ::: resParam.typeRef :: Nil )
125- (ImplicitMethodType , ctx.normalizeToClassRefs(superTrait :: Nil , cls, decls))
126- }
127- else (MethodType , Nil )
128- val applyMeth =
129- decls.enter(
130- newMethod(cls, nme.apply,
131- methodType(argParams.map(_.typeRef), resParam.typeRef), Deferred ))
132- denot.info =
133- ClassInfo (ScalaPackageClass .thisType, cls, ObjectType :: parentTraits, decls)
121+ val methodType = if (name.isImplicitFunction) ImplicitMethodType else MethodType
122+ decls.enter(newMethod(cls, nme.apply, methodType(argParams.map(_.typeRef), resParam.typeRef), Deferred ))
123+ denot.info = ClassInfo (ScalaPackageClass .thisType, cls, ObjectType :: Nil , decls)
134124 }
135125 }
136- newClassSymbol(ScalaPackageClass , name, Trait | NoInits , completer)
126+ newClassSymbol(ScalaPackageClass , name, NoInitsTrait , completer)
137127 }
138128
139129 private def newMethod (cls : ClassSymbol , name : TermName , info : Type , flags : FlagSet = EmptyFlags ): TermSymbol =
@@ -822,7 +812,7 @@ class Definitions {
822812 * trait gets screwed up. Therefore, it is mandatory that FunctionXXL
823813 * is treated as a NoInit trait.
824814 */
825- lazy val NoInitClasses = PhantomClasses + FunctionXXLClass
815+ def isNoInitClass ( cls : Symbol ) = PhantomClasses .contains(cls) || (cls eq FunctionXXLClass ) || isFunctionClass(cls)
826816
827817 def isPolymorphicAfterErasure (sym : Symbol ) =
828818 (sym eq Any_isInstanceOf ) || (sym eq Any_asInstanceOf )
0 commit comments