summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2004-04-08 15:58:45 +0000
committerMartin Odersky <odersky@gmail.com>2004-04-08 15:58:45 +0000
commit8dd1635f7f4661e39eb9b77a56e14f92e0379786 (patch)
tree47f0e843fc04fd62aed9d4ae0006a7f9ab79768a
parent34dca6ad930cd4bc8d3e6916364d7a75c9fe41fd (diff)
downloadscala-8dd1635f7f4661e39eb9b77a56e14f92e0379786.tar.gz
scala-8dd1635f7f4661e39eb9b77a56e14f92e0379786.tar.bz2
scala-8dd1635f7f4661e39eb9b77a56e14f92e0379786.zip
*** empty log message ***
-rw-r--r--sources/scala/tools/scalac/typechecker/Analyzer.scala3
-rw-r--r--sources/scalac/ast/TreeGen.java6
-rwxr-xr-xtest/files/pos/viewtest2.scala14
3 files changed, 19 insertions, 4 deletions
diff --git a/sources/scala/tools/scalac/typechecker/Analyzer.scala b/sources/scala/tools/scalac/typechecker/Analyzer.scala
index e9b45b6c3e..3c0d37861c 100644
--- a/sources/scala/tools/scalac/typechecker/Analyzer.scala
+++ b/sources/scala/tools/scalac/typechecker/Analyzer.scala
@@ -575,7 +575,7 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
val vapp = transform(
make.Apply(tree.pos, vexpr, NewArray.Tree(tree)), mode, pt);
if (v.symtype.isObjectType()) {
- val tree1 = transform(tree.duplicate(), mode, pt);
+ val tree1 = gen.mkAsInstanceOf(tree.duplicate(), vapp.getType());
gen.If(
gen.Apply(
gen.Select(
@@ -1650,7 +1650,6 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
if (v != null) {
qual = applyView(
v, qual.setType(qual.getType().singleDeref()), EXPRmode, Type.AnyType);
- System.out.println("app view " + qual + ":" + qual.getType());//debug
sym = qual.getType().lookup(name);
assert(sym.kind != NONE);
} else {
diff --git a/sources/scalac/ast/TreeGen.java b/sources/scalac/ast/TreeGen.java
index 4abd940f9c..405f14d618 100644
--- a/sources/scalac/ast/TreeGen.java
+++ b/sources/scalac/ast/TreeGen.java
@@ -356,14 +356,16 @@ public class TreeGen implements Kinds, Modifiers, TypeTags {
*/
public Tree mkApplyTV(int pos, Tree fn, Type[] targs, Tree[] vargs) {
if (targs.length != 0) fn = TypeApply(pos, fn, mkTypes(pos, targs));
- return Apply(pos, fn, vargs);
+ if (vargs.length == 0 && fn.getType().isObjectType()) return fn;
+ else return Apply(pos, fn, vargs);
}
public Tree mkApplyTV(Tree fn, Type[] targs, Tree[] vargs) {
return mkApplyTV(fn.pos, fn, targs, vargs);
}
public Tree mkApplyTV(int pos, Tree fn, Tree[] targs, Tree[] vargs) {
if (targs.length != 0) fn = TypeApply(pos, fn, targs);
- return Apply(pos, fn, vargs);
+ if (vargs.length == 0 && fn.getType().isObjectType()) return fn;
+ else return Apply(pos, fn, vargs);
}
public Tree mkApplyTV(Tree fn, Tree[] targs, Tree[] vargs) {
return mkApplyTV(fn.pos, fn, targs, vargs);
diff --git a/test/files/pos/viewtest2.scala b/test/files/pos/viewtest2.scala
index 880ee2a57a..0d580418d0 100755
--- a/test/files/pos/viewtest2.scala
+++ b/test/files/pos/viewtest2.scala
@@ -75,6 +75,13 @@ class Node[+a <% Ordered[a]](elem: a, l: Tree[a], r: Tree[a]) extends Tree[a] {
l.elements ::: List(elem) ::: r.elements
}
+case class Str(elem: String) extends Ordered[Str] {
+ def compareTo[b >: Str <% Ordered[b]](that: b): int = that match {
+ case that1: Str => this.elem compareTo that1.elem
+ case _ => -(that compareTo this)
+ }
+}
+
object Test {
import O.view;
@@ -91,6 +98,13 @@ object Test {
System.out.println(t.elements)
}
{
+ var t: Tree[Str] = Empty;
+ for (val s <- args) {
+ t = t insert Str(s)
+ }
+ System.out.println(t.elements)
+ }
+ {
var t: Tree[List[char]] = Empty;
for (val s <- args) {
t = t insert toCharList(s)