aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/core
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2014-11-28 22:10:37 +0100
committerMartin Odersky <odersky@gmail.com>2014-11-28 22:12:51 +0100
commit91c61e4694097971b9a0c139048b7239d0f05588 (patch)
tree6836b169dce43f32e588f60bb16d14dba850b254 /src/dotty/tools/dotc/core
parentb18ce863f5f2444a5a00ccc9d55c4ee12115c467 (diff)
downloaddotty-91c61e4694097971b9a0c139048b7239d0f05588.tar.gz
dotty-91c61e4694097971b9a0c139048b7239d0f05588.tar.bz2
dotty-91c61e4694097971b9a0c139048b7239d0f05588.zip
Previous scheme was buggy; leaked Array types to backend.
Now: All new Array[T] methods are translated to calls of the form dotty.Arrays.newXYZArray ...
Diffstat (limited to 'src/dotty/tools/dotc/core')
-rw-r--r--src/dotty/tools/dotc/core/Contexts.scala2
-rw-r--r--src/dotty/tools/dotc/core/Definitions.scala7
-rw-r--r--src/dotty/tools/dotc/core/NameOps.scala1
-rw-r--r--src/dotty/tools/dotc/core/StdNames.scala4
4 files changed, 9 insertions, 5 deletions
diff --git a/src/dotty/tools/dotc/core/Contexts.scala b/src/dotty/tools/dotc/core/Contexts.scala
index 6293d18d2..6824cc36c 100644
--- a/src/dotty/tools/dotc/core/Contexts.scala
+++ b/src/dotty/tools/dotc/core/Contexts.scala
@@ -120,7 +120,7 @@ object Contexts {
protected def scope_=(scope: Scope) = _scope = scope
def scope: Scope = _scope
- /** The current type assigner ot typer */
+ /** The current type assigner or typer */
private[this] var _typeAssigner: TypeAssigner = _
protected def typeAssigner_=(typeAssigner: TypeAssigner) = _typeAssigner = typeAssigner
def typeAssigner: TypeAssigner = _typeAssigner
diff --git a/src/dotty/tools/dotc/core/Definitions.scala b/src/dotty/tools/dotc/core/Definitions.scala
index d78e09418..20dd899f1 100644
--- a/src/dotty/tools/dotc/core/Definitions.scala
+++ b/src/dotty/tools/dotc/core/Definitions.scala
@@ -193,6 +193,10 @@ class Definitions {
def staticsMethod(name: PreName) = ctx.requiredMethod(ScalaStaticsClass, name)
lazy val DottyPredefModule = ctx.requiredModule("dotty.DottyPredef")
+ lazy val DottyArraysModule = ctx.requiredModule("dotty.runtime.Arrays")
+
+ def newRefArrayMethod = ctx.requiredMethod(DottyArraysModule.moduleClass.asClass, "newRefArray")
+
lazy val NilModule = ctx.requiredModule("scala.collection.immutable.Nil")
lazy val PredefConformsClass = ctx.requiredClass("scala.Predef." + tpnme.Conforms)
@@ -211,6 +215,7 @@ class Definitions {
lazy val Array_update = ctx.requiredMethod(ArrayClass, nme.update)
lazy val Array_length = ctx.requiredMethod(ArrayClass, nme.length)
lazy val Array_clone = ctx.requiredMethod(ArrayClass, nme.clone_)
+ lazy val ArrayConstructor = ctx.requiredMethod(ArrayClass, nme.CONSTRUCTOR)
lazy val traversableDropMethod = ctx.requiredMethod(ScalaRuntimeClass, nme.drop)
lazy val uncheckedStableClass: ClassSymbol = ctx.requiredClass("scala.annotation.unchecked.uncheckedStable")
@@ -428,6 +433,8 @@ class Definitions {
lazy val PhantomClasses = Set[Symbol](AnyClass, AnyValClass, NullClass, NothingClass)
+ lazy val isPolymorphicAfterErasure = Set[Symbol](Any_isInstanceOf, Any_asInstanceOf, newRefArrayMethod)
+
lazy val RootImports = List[Symbol](JavaLangPackageVal, ScalaPackageVal, ScalaPredefModule, DottyPredefModule)
lazy val overriddenBySynthetic = Set[Symbol](Any_equals, Any_hashCode, Any_toString, Product_canEqual)
diff --git a/src/dotty/tools/dotc/core/NameOps.scala b/src/dotty/tools/dotc/core/NameOps.scala
index bc15f6a06..a6b40fe66 100644
--- a/src/dotty/tools/dotc/core/NameOps.scala
+++ b/src/dotty/tools/dotc/core/NameOps.scala
@@ -204,7 +204,6 @@ object NameOps {
case nme.length => nme.primitive.arrayLength
case nme.update => nme.primitive.arrayUpdate
case nme.clone_ => nme.clone_
- case nme.CONSTRUCTOR => nme.primitive.arrayConstructor
}
/** If name length exceeds allowable limit, replace part of it by hash */
diff --git a/src/dotty/tools/dotc/core/StdNames.scala b/src/dotty/tools/dotc/core/StdNames.scala
index 8393eb56f..959e9cb84 100644
--- a/src/dotty/tools/dotc/core/StdNames.scala
+++ b/src/dotty/tools/dotc/core/StdNames.scala
@@ -433,7 +433,6 @@ object StdNames {
val moduleClass : N = "moduleClass"
val name: N = "name"
val ne: N = "ne"
- val newArray: N = "newArray"
val newFreeTerm: N = "newFreeTerm"
val newFreeType: N = "newFreeType"
val newNestedSymbol: N = "newNestedSymbol"
@@ -691,8 +690,7 @@ object StdNames {
val arrayApply: TermName = "[]apply"
val arrayUpdate: TermName = "[]update"
val arrayLength: TermName = "[]length"
- val arrayConstructor: TermName = "[]<init>"
- val names: Set[Name] = Set(arrayApply, arrayUpdate, arrayLength, arrayConstructor)
+ val names: Set[Name] = Set(arrayApply, arrayUpdate, arrayLength)
}
def isPrimitiveName(name: Name) = primitive.names.contains(name)