@@ -153,10 +153,12 @@ class Definitions {
153
153
tl => op(tl.paramRefs(0 ), tl.paramRefs(1 ))))
154
154
155
155
private def enterPolyMethod (cls : ClassSymbol , name : TermName , typeParamCount : Int ,
156
- resultTypeFn : PolyType => Type , flags : FlagSet = EmptyFlags ,
156
+ resultTypeFn : PolyType => Type ,
157
+ flags : FlagSet = EmptyFlags ,
158
+ bounds : TypeBounds = TypeBounds .empty,
157
159
useCompleter : Boolean = false ) = {
158
160
val tparamNames = PolyType .syntheticParamNames(typeParamCount)
159
- val tparamInfos = tparamNames map (_ => TypeBounds .empty )
161
+ val tparamInfos = tparamNames map (_ => bounds )
160
162
def ptype = PolyType (tparamNames)(_ => tparamInfos, resultTypeFn)
161
163
val info =
162
164
if (useCompleter)
@@ -261,19 +263,26 @@ class Definitions {
261
263
@ tu lazy val AnyValClass : ClassSymbol = completeClass(enterCompleteClassSymbol(ScalaPackageClass , tpnme.AnyVal , Abstract , List (AnyClass .typeRef)))
262
264
def AnyValType : TypeRef = AnyValClass .typeRef
263
265
264
- @ tu lazy val Any_== : TermSymbol = enterMethod(AnyClass , nme.EQ , methOfAny(BooleanType ), Final )
265
- @ tu lazy val Any_!= : TermSymbol = enterMethod(AnyClass , nme.NE , methOfAny(BooleanType ), Final )
266
- @ tu lazy val Any_equals : TermSymbol = enterMethod(AnyClass , nme.equals_, methOfAny(BooleanType ))
267
- @ tu lazy val Any_hashCode : TermSymbol = enterMethod(AnyClass , nme.hashCode_, MethodType (Nil , IntType ))
268
- @ tu lazy val Any_toString : TermSymbol = enterMethod(AnyClass , nme.toString_, MethodType (Nil , StringType ))
269
- @ tu lazy val Any_## : TermSymbol = enterMethod(AnyClass , nme.HASHHASH , ExprType (IntType ), Final )
270
- @ tu lazy val Any_getClass : TermSymbol = enterMethod(AnyClass , nme.getClass_, MethodType (Nil , ClassClass .typeRef.appliedTo(TypeBounds .empty)), Final )
266
+ @ tu lazy val Any_== : TermSymbol = enterMethod(AnyClass , nme.EQ , methOfAny(BooleanType ), Final )
267
+ @ tu lazy val Any_!= : TermSymbol = enterMethod(AnyClass , nme.NE , methOfAny(BooleanType ), Final )
268
+ @ tu lazy val Any_equals : TermSymbol = enterMethod(AnyClass , nme.equals_, methOfAny(BooleanType ))
269
+ @ tu lazy val Any_hashCode : TermSymbol = enterMethod(AnyClass , nme.hashCode_, MethodType (Nil , IntType ))
270
+ @ tu lazy val Any_toString : TermSymbol = enterMethod(AnyClass , nme.toString_, MethodType (Nil , StringType ))
271
+ @ tu lazy val Any_## : TermSymbol = enterMethod(AnyClass , nme.HASHHASH , ExprType (IntType ), Final )
271
272
@ tu lazy val Any_isInstanceOf : TermSymbol = enterT1ParameterlessMethod(AnyClass , nme.isInstanceOf_, _ => BooleanType , Final )
272
273
@ tu lazy val Any_asInstanceOf : TermSymbol = enterT1ParameterlessMethod(AnyClass , nme.asInstanceOf_, _.paramRefs(0 ), Final )
273
- @ tu lazy val Any_typeTest : TermSymbol = enterT1ParameterlessMethod(AnyClass , nme.isInstanceOfPM, _ => BooleanType , Final | Synthetic | Artifact )
274
- @ tu lazy val Any_typeCast : TermSymbol = enterT1ParameterlessMethod(AnyClass , nme.asInstanceOfPM, _.paramRefs(0 ), Final | Synthetic | Artifact | StableRealizable )
274
+ @ tu lazy val Any_typeTest : TermSymbol = enterT1ParameterlessMethod(AnyClass , nme.isInstanceOfPM, _ => BooleanType , Final | Synthetic | Artifact )
275
+ @ tu lazy val Any_typeCast : TermSymbol = enterT1ParameterlessMethod(AnyClass , nme.asInstanceOfPM, _.paramRefs(0 ), Final | Synthetic | Artifact | StableRealizable )
275
276
// generated by pattern matcher, eliminated by erasure
276
277
278
+ // def getClass[A >: this.type](): Class[? <: A]
279
+ @ tu lazy val Any_getClass : TermSymbol =
280
+ enterPolyMethod(
281
+ AnyClass , nme.getClass_, 1 ,
282
+ pt => MethodType (Nil , ClassClass .typeRef.appliedTo(TypeBounds .upper(pt.paramRefs(0 )))),
283
+ Final ,
284
+ bounds = TypeBounds .lower(AnyClass .thisType))
285
+
277
286
def AnyMethods : List [TermSymbol ] = List (Any_== , Any_!= , Any_equals , Any_hashCode ,
278
287
Any_toString , Any_## , Any_getClass , Any_isInstanceOf , Any_asInstanceOf , Any_typeTest , Any_typeCast )
279
288
0 commit comments