summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGilles Dubochet <gilles.dubochet@epfl.ch>2007-06-06 00:40:56 +0000
committerGilles Dubochet <gilles.dubochet@epfl.ch>2007-06-06 00:40:56 +0000
commitee41bd58d4e28008070b4d705511beab36f645e1 (patch)
tree2e40454199dc66adc0fa384275a31972aef05b96 /src
parentcea527a9dc7cfef933ed911b8196858f412827b2 (diff)
downloadscala-ee41bd58d4e28008070b4d705511beab36f645e1.tar.gz
scala-ee41bd58d4e28008070b4d705511beab36f645e1.tar.bz2
scala-ee41bd58d4e28008070b4d705511beab36f645e1.zip
Fixed structural subtyping to work when JVM 1.5...
Fixed structural subtyping to work when JVM 1.5 target is used. Bug 711 no longer is “neg” thanks to structural subtyping.
Diffstat (limited to 'src')
-rw-r--r--src/compiler/scala/tools/nsc/transform/CleanUp.scala15
1 files changed, 7 insertions, 8 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/CleanUp.scala b/src/compiler/scala/tools/nsc/transform/CleanUp.scala
index c1bf23fbc0..c4658c361c 100644
--- a/src/compiler/scala/tools/nsc/transform/CleanUp.scala
+++ b/src/compiler/scala/tools/nsc/transform/CleanUp.scala
@@ -85,9 +85,7 @@ abstract class CleanUp extends Transform {
}
override def transformUnit(unit: CompilationUnit) =
- if (settings.target.value != "jvm-1.5" && !forMSIL) {
- unit.body = transform(unit.body)
- }
+ unit.body = transform(unit.body)
/** A value class is defined to be only Java-compatible values: unit is
* not part of it, as opposed to isValueClass in definitions. scala.Int is
@@ -129,6 +127,7 @@ abstract class CleanUp extends Transform {
* type variable. */
case ad@ApplyDynamic(qual, params) =>
assert(ad.symbol.isPublic)
+ val thisTyper = typer.atOwner(tree, currentOwner)
/* Transforms the result of a reflective call (always an AnyRef) to
* the actual result value (an AnyRef too). The transformation
@@ -141,7 +140,7 @@ abstract class CleanUp extends Transform {
* is enough even for value (int et al.) values as the result of
* a dynamic call will box them as a side-effect. */
def fixResult(resType: Type)(tree: Tree): Tree =
- localTyper.typed {
+ thisTyper.typed {
if (resType.symbol == UnitClass)
Block (
List(tree),
@@ -177,7 +176,7 @@ abstract class CleanUp extends Transform {
* unboxed array, it is left alone. */
def fixParams(params: List[Tree], paramTypes: List[Type]): List[Tree] =
(params zip paramTypes) map { case (param, paramType) =>
- localTyper.typed {
+ thisTyper.typed {
if (paramType.symbol == ArrayClass) {
val sym = currentOwner.newValue(tree.pos, newTermName(unit.fresh.newName)) setInfo ObjectClass.tpe
val arrayType = {
@@ -240,7 +239,7 @@ abstract class CleanUp extends Transform {
val t: Tree = ad.symbol.tpe match {
case MethodType(paramTypes, resType) =>
assert(params.length == paramTypes.length)
- atPos(tree.pos)(localTyper.typed {
+ atPos(tree.pos)(thisTyper.typed {
fixResult(if (isValueClass(resType.symbol)) boxedClass(resType.symbol).tpe else resType) {
Apply(
Select(
@@ -293,13 +292,13 @@ abstract class CleanUp extends Transform {
/* end of dynamic call transformer. */
- case Template(parents, self, body) =>
+ case Template(parents, self, body) if (settings.target.value != "jvm-1.5" && !forMSIL) => //what is that?
classConstantMeth.clear
newDefs.clear
localTyper = typer.atOwner(tree, currentOwner)
val body1 = transformTrees(body)
copy.Template(tree, parents, self, newDefs.toList ::: body1)
- case Literal(c) if (c.tag == ClassTag) =>
+ case Literal(c) if (c.tag == ClassTag) && (settings.target.value != "jvm-1.5" && !forMSIL) => //what is that?
val tpe = c.typeValue
atPos(tree.pos) {
localTyper.typed {