diff options
author | Paul Phillips <paulp@improving.org> | 2012-02-04 14:36:14 -0800 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2012-02-04 17:36:31 -0800 |
commit | c6a783ac089d8cf5a60a98946af5e80aff5a7d32 (patch) | |
tree | 2f081bad580c0fcb45b2a0ecb0e4bcc225879bbb /src/compiler/scala/reflect/internal/Definitions.scala | |
parent | 513710c5277ef8870ba3f5c7c9bebe40068ce4af (diff) | |
download | scala-c6a783ac089d8cf5a60a98946af5e80aff5a7d32.tar.gz scala-c6a783ac089d8cf5a60a98946af5e80aff5a7d32.tar.bz2 scala-c6a783ac089d8cf5a60a98946af5e80aff5a7d32.zip |
Making AnyVal into a class instead of a trait.
-- traits can extend Any, AnyRef, or AnyVal
-- classes can extend AnyRef or AnyVal but not Any.
This breaks reflection for the moment as it smuggles AnyVal so far
downstream that it's reflecting its way into bytecode (or something)
but the following test case goes five for six as anticipated.
trait Foo1 extends Any
trait Foo2 extends AnyVal
trait Foo3 extends AnyRef
class Bar1 extends Any // fail
@inline class Bar2 extends AnyVal
class Bar3 extends AnyRef
Eliminated various hijinx from definitions.
Diffstat (limited to 'src/compiler/scala/reflect/internal/Definitions.scala')
-rw-r--r-- | src/compiler/scala/reflect/internal/Definitions.scala | 29 |
1 files changed, 6 insertions, 23 deletions
diff --git a/src/compiler/scala/reflect/internal/Definitions.scala b/src/compiler/scala/reflect/internal/Definitions.scala index 82d7f947e6..7bd0c0f919 100644 --- a/src/compiler/scala/reflect/internal/Definitions.scala +++ b/src/compiler/scala/reflect/internal/Definitions.scala @@ -230,17 +230,12 @@ trait Definitions extends reflect.api.StandardDefinitions { lazy val AnyCompanionClass = getRequiredClass("scala.AnyCompanion") initFlags (SEALED | ABSTRACT | TRAIT) lazy val AnyValCompanionClass = getRequiredClass("scala.AnyValCompanion") initFlags (SEALED | ABSTRACT | TRAIT) - private var oldValueScheme = true - - lazy val AnyValClass = ScalaPackageClass.info member tpnme.AnyVal -// lazy val AnyValClass = ScalaPackageClass.info member tpnme.AnyVal orElse { -// // println("new anyval") -// oldValueScheme = true -// val anyval = enterNewClass(ScalaPackageClass, tpnme.AnyVal, anyparam, 0L) -// val av_constr = anyval.newClassConstructor(NoPosition) -// anyval.info.decls enter av_constr -// anyval -// } + lazy val AnyValClass = ScalaPackageClass.info member tpnme.AnyVal orElse { + val anyval = enterNewClass(ScalaPackageClass, tpnme.AnyVal, List(AnyClass.tpe, NotNullClass.tpe), 0L) + val av_constr = anyval.newClassConstructor(NoPosition) + anyval.info.decls enter av_constr + anyval + } lazy val AnyVal_getClass = enterNewMethod(AnyValClass, nme.getClass_, Nil, getClassReturnType(AnyValClass.tpe)) // bottom types @@ -1077,22 +1072,10 @@ trait Definitions extends reflect.api.StandardDefinitions { Object_synchronized, Object_isInstanceOf, Object_asInstanceOf, - //AnyVal_getClass, String_+, ComparableClass ) - /* Removing the anyref parent they acquire from having a source file. - */ - if (oldValueScheme) { - setParents(AnyValClass, List(NotNullClass.tpe, AnyClass.tpe)) - } else { - AnyVal_getClass // force it! - } - ScalaValueClasses foreach { sym => - setParents(sym, anyvalparam) - } - isInitialized = true } //init |