aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2015-03-04 16:18:58 +0100
committerMartin Odersky <odersky@gmail.com>2015-03-04 16:18:58 +0100
commit2bdce25034d50bc7526dc1d1c8f57e9c20e45b60 (patch)
treef9f4a91bc84a86179e570f7319dd687d24d05ce2
parent3a6cab46ac2029c57a6c013a47de553781bd96be (diff)
downloaddotty-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.scala15
-rw-r--r--src/dotty/tools/dotc/core/StdNames.scala1
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$"