summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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);