diff options
author | Martin Odersky <odersky@gmail.com> | 2015-03-04 16:18:58 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2015-03-04 16:18:58 +0100 |
commit | 2bdce25034d50bc7526dc1d1c8f57e9c20e45b60 (patch) | |
tree | f9f4a91bc84a86179e570f7319dd687d24d05ce2 | |
parent | 3a6cab46ac2029c57a6c013a47de553781bd96be (diff) | |
download | dotty-2bdce25034d50bc7526dc1d1c8f57e9c20e45b60.tar.gz dotty-2bdce25034d50bc7526dc1d1c8f57e9c20e45b60.tar.bz2 dotty-2bdce25034d50bc7526dc1d1c8f57e9c20e45b60.zip |
Create OpsPackage to hold compiler-interpreted symbols
Compiler interpreted methods now have a home in OpsPackage.
The first such symbol is dummyApply.
But other symbols representing primitive operations (e.g. array
operations) could also go there.
-rw-r--r-- | src/dotty/tools/dotc/core/Definitions.scala | 15 | ||||
-rw-r--r-- | src/dotty/tools/dotc/core/StdNames.scala | 1 |
2 files changed, 11 insertions, 5 deletions
diff --git a/src/dotty/tools/dotc/core/Definitions.scala b/src/dotty/tools/dotc/core/Definitions.scala index 5daeed0f8..67c1f3105 100644 --- a/src/dotty/tools/dotc/core/Definitions.scala +++ b/src/dotty/tools/dotc/core/Definitions.scala @@ -99,8 +99,12 @@ class Definitions { lazy val RootPackage: TermSymbol = ctx.newSymbol( NoSymbol, nme.ROOTPKG, PackageCreationFlags, TypeRef(NoPrefix, RootClass)) - lazy val EmptyPackageClass = ctx.newCompletePackageSymbol(RootClass, nme.EMPTY_PACKAGE).moduleClass.asClass - lazy val EmptyPackageVal = EmptyPackageClass.sourceModule.entered + lazy val EmptyPackageVal = ctx.newCompletePackageSymbol(RootClass, nme.EMPTY_PACKAGE).entered + lazy val EmptyPackageClass = EmptyPackageVal.moduleClass.asClass + + /** A package in which we can place all methods that are interpreted specially by the compiler */ + lazy val OpsPackageVal = ctx.newCompletePackageSymbol(RootClass, nme.OPS_PACKAGE).entered + lazy val OpsPackageClass = OpsPackageVal.moduleClass.asClass lazy val ScalaPackageVal = ctx.requiredPackage("scala") lazy val ScalaMathPackageVal = ctx.requiredPackage("scala.math") @@ -171,10 +175,10 @@ class Definitions { def ObjectMethods = List(Object_eq, Object_ne, Object_synchronized, Object_clone, Object_finalize, Object_notify, Object_notifyAll, Object_wait, Object_waitL, Object_waitLI) - + /** Dummy method needed by elimByName */ lazy val dummyApply = newPolyMethod( - RootClass, nme.dummyApply, 1, + OpsPackageClass, nme.dummyApply, 1, pt => MethodType(List(FunctionType(Nil, PolyParam(pt, 0))), PolyParam(pt, 0))) lazy val NothingClass: ClassSymbol = newCompleteClassSymbol( @@ -605,7 +609,8 @@ class Definitions { NothingClass, SingletonClass, EqualsPatternClass, - EmptyPackageVal) + EmptyPackageVal, + OpsPackageClass) /** Lists core methods that don't have underlying bytecode, but are synthesized on-the-fly in every reflection universe */ lazy val syntheticCoreMethods = AnyMethods ++ ObjectMethods ++ List(String_+) diff --git a/src/dotty/tools/dotc/core/StdNames.scala b/src/dotty/tools/dotc/core/StdNames.scala index b7cc1e03f..19a210a32 100644 --- a/src/dotty/tools/dotc/core/StdNames.scala +++ b/src/dotty/tools/dotc/core/StdNames.scala @@ -111,6 +111,7 @@ object StdNames { val MODULE_VAR_SUFFIX: N = "$module" val NAME_JOIN: N = NameTransformer.NAME_JOIN_STRING val USCORE_PARAM_PREFIX: N = "_$" + val OPS_PACKAGE: N = "<special-ops>" val OVERLOADED: N = "<overloaded>" val PACKAGE: N = "package" val PACKAGE_CLS: N = "package$" |