summaryrefslogtreecommitdiff
path: root/sources
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2003-07-04 14:58:11 +0000
committerMartin Odersky <odersky@gmail.com>2003-07-04 14:58:11 +0000
commit8e9836f531e73246f22c2974840e907dbbbba35d (patch)
treeca25bfc2cdd5d5f3a1feb8b3e49286e9e232f186 /sources
parente2a375174c6e00c47e865863da77ef854844e9b7 (diff)
downloadscala-8e9836f531e73246f22c2974840e907dbbbba35d.tar.gz
scala-8e9836f531e73246f22c2974840e907dbbbba35d.tar.bz2
scala-8e9836f531e73246f22c2974840e907dbbbba35d.zip
*** empty log message ***
Diffstat (limited to 'sources')
-rw-r--r--sources/scalac/symtab/Symbol.java7
-rw-r--r--sources/scalac/typechecker/Infer.java3
-rw-r--r--sources/scalac/typechecker/RefCheck.java3
3 files changed, 6 insertions, 7 deletions
diff --git a/sources/scalac/symtab/Symbol.java b/sources/scalac/symtab/Symbol.java
index 90adf230c5..883bdf515c 100644
--- a/sources/scalac/symtab/Symbol.java
+++ b/sources/scalac/symtab/Symbol.java
@@ -211,12 +211,9 @@ public abstract class Symbol implements Modifiers, Kinds {
return isInitializedMethod();
}
- /*
- public final boolean caseClassOfFactory() {
- if (isMethod() && !isConstructor() && (flags & CASE) != 0)
- return owner.info().lookup(name.toTypeName()).constructor();
+ public final boolean isCaseFactory() {
+ return isMethod() && !isConstructor() && (flags & CASE) != 0;
}
- */
public final boolean isAbstractClass() {
return (flags & ABSTRACTCLASS) != 0 &&
diff --git a/sources/scalac/typechecker/Infer.java b/sources/scalac/typechecker/Infer.java
index f413322284..d71677d58e 100644
--- a/sources/scalac/typechecker/Infer.java
+++ b/sources/scalac/typechecker/Infer.java
@@ -698,10 +698,13 @@ public class Infer implements Modifiers, Kinds {
public Tree mkTypeApply(Tree tree, Symbol[] tparams, Type restype, Type[] targs) {
Tree tree1 = tree;
Symbol sym = tree.symbol();
+ if (sym != null && sym.isCaseFactory())
+ sym = sym.type().resultType().symbol().constructor();
int i = 0;
while (i < tparams.length && tparams[i].owner() == sym)
i++;
if (i < tparams.length) {
+ //System.out.println("tpar " + tparams[i] + " of " + tparams[i].owner() + " <> " + sym);//DEBUG
//new Printer().print(tree1);//DEBUG
//System.out.println(ArrayApply.toString(targs) + "/" + i + "/" + ArrayApply.toString(tparams));//DEBUG
Symbol[] tparams1 = new Symbol[tparams.length - i];
diff --git a/sources/scalac/typechecker/RefCheck.java b/sources/scalac/typechecker/RefCheck.java
index 5731454a8b..b47569282f 100644
--- a/sources/scalac/typechecker/RefCheck.java
+++ b/sources/scalac/typechecker/RefCheck.java
@@ -871,8 +871,7 @@ public class RefCheck extends Transformer implements Modifiers, Kinds {
if (fsym != null && fsym.isMethod() && !fsym.isConstructor() &&
(fsym.flags & CASE) != 0) {
// convert case methods to new's
- Symbol constr = fsym.owner().info()
- .lookup(fsym.name.toTypeName()).constructor();
+ Symbol constr = fsym.type().resultType().symbol().constructor();
tree = gen.New(toConstructor(tree, constr));
}
return super.transform(tree);