diff options
author | Martin Odersky <odersky@gmail.com> | 2012-02-07 18:30:29 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2012-02-07 18:30:29 +0100 |
commit | aa7ca3599c51702c3c03b27384d25d54ec76afab (patch) | |
tree | a6e2d476185fbb63819a70d957d0cc6abc01cb2b /src/compiler/scala/tools/nsc/typechecker/RefChecks.scala | |
parent | aee074e69ea8295c018040b606ed8f13ac08d2ab (diff) | |
download | scala-aa7ca3599c51702c3c03b27384d25d54ec76afab.tar.gz scala-aa7ca3599c51702c3c03b27384d25d54ec76afab.tar.bz2 scala-aa7ca3599c51702c3c03b27384d25d54ec76afab.zip |
Making the Meter test expand and compile.
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker/RefChecks.scala')
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/RefChecks.scala | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala index 04213cfda7..bcdb59cf2e 100644 --- a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala +++ b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala @@ -150,7 +150,7 @@ abstract class RefChecks extends InfoTransform with reflect.internal.transform.R } // Override checking ------------------------------------------------------------ - + def isJavaVarargsAncestor(clazz: Symbol) = ( clazz.isClass && clazz.isJavaDefined @@ -167,14 +167,14 @@ abstract class RefChecks extends InfoTransform with reflect.internal.transform.R log("Found java varargs ancestor in " + clazz.fullLocationString + ".") val self = clazz.thisType val bridges = new ListBuffer[Tree] - + def varargBridge(member: Symbol, bridgetpe: Type): Tree = { log("Generating varargs bridge for " + member.fullLocationString + " of type " + bridgetpe) - + val bridge = member.cloneSymbolImpl(clazz, member.flags | VBRIDGE) setPos clazz.pos bridge.setInfo(bridgetpe.cloneInfo(bridge)) clazz.info.decls enter bridge - + val params = bridge.paramss.head val elemtp = params.last.tpe.typeArgs.head val idents = params map Ident @@ -183,7 +183,7 @@ abstract class RefChecks extends InfoTransform with reflect.internal.transform.R localTyper typed DefDef(bridge, body) } - + // For all concrete non-private members that have a (Scala) repeated parameter: // compute the corresponding method type `jtpe` with a Java repeated parameter // if a method with type `jtpe` exists and that method is not a varargs bridge @@ -203,7 +203,7 @@ abstract class RefChecks extends InfoTransform with reflect.internal.transform.R } } } - + bridges.toList } else Nil @@ -334,7 +334,7 @@ abstract class RefChecks extends InfoTransform with reflect.internal.transform.R def deferredCheck = member.isDeferred || !other.isDeferred def subOther(s: Symbol) = s isSubClass other.owner def subMember(s: Symbol) = s isSubClass member.owner - + if (subOther(member.owner) && deferredCheck) { //Console.println(infoString(member) + " shadows1 " + infoString(other) " in " + clazz);//DEBUG return @@ -420,12 +420,12 @@ abstract class RefChecks extends InfoTransform with reflect.internal.transform.R if( !(sameLength(member.typeParams, other.typeParams) && (memberTp.substSym(member.typeParams, other.typeParams) =:= otherTp)) ) // (1.6) overrideTypeError(); - } + } else if (other.isAbstractType) { //if (!member.typeParams.isEmpty) // (1.7) @MAT // overrideError("may not be parameterized"); val otherTp = self.memberInfo(other) - + if (!(otherTp.bounds containsType memberTp)) { // (1.7.1) overrideTypeError(); // todo: do an explaintypes with bounds here explainTypes(_.bounds containsType _, otherTp, memberTp) @@ -1531,17 +1531,17 @@ abstract class RefChecks extends InfoTransform with reflect.internal.transform.R ) case _ => () } - + // verify classes extending AnyVal meet the requirements // (whatever those are to be, but at least: @inline annotation) private def checkAnyValSubclass(clazz: Symbol) = { if ((clazz isSubClass AnyValClass) && (clazz ne AnyValClass) && !isPrimitiveValueClass(clazz)) { - if (!clazz.hasAnnotation(ScalaInlineClass)) - unit.error(clazz.pos, "Only @inline classes are allowed to extend AnyVal") if (clazz.isTrait) - unit.error(clazz.pos, "Only @inline classes (not traits) are allowed to extend AnyVal") + unit.error(clazz.pos, "Only classes (not traits) are allowed to extend AnyVal") + /* [Martin] That one is already taken care of by Typers if (clazz.tpe <:< AnyRefClass.tpe) unit.error(clazz.pos, "Classes which extend AnyVal may not have an ancestor which inherits AnyRef") + */ } } |