diff options
author | Martin Odersky <odersky@gmail.com> | 2004-10-25 15:08:59 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2004-10-25 15:08:59 +0000 |
commit | 55dc9426182208f9b606fc3145ddcd37e9f1ec20 (patch) | |
tree | c7598896861292f7b32aa719361223b4d9365620 /sources | |
parent | a9664dbf3d60a8e75ea06f7f1b3dac95150d3cc8 (diff) | |
download | scala-55dc9426182208f9b606fc3145ddcd37e9f1ec20.tar.gz scala-55dc9426182208f9b606fc3145ddcd37e9f1ec20.tar.bz2 scala-55dc9426182208f9b606fc3145ddcd37e9f1ec20.zip |
*** empty log message ***
Diffstat (limited to 'sources')
-rw-r--r-- | sources/scala/tools/scalac/typechecker/Analyzer.scala | 5 | ||||
-rw-r--r-- | sources/scalac/symtab/Type.java | 4 |
2 files changed, 6 insertions, 3 deletions
diff --git a/sources/scala/tools/scalac/typechecker/Analyzer.scala b/sources/scala/tools/scalac/typechecker/Analyzer.scala index 8373a6495b..4bd10404ec 100644 --- a/sources/scala/tools/scalac/typechecker/Analyzer.scala +++ b/sources/scala/tools/scalac/typechecker/Analyzer.scala @@ -1974,7 +1974,7 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer( * @return The vector of instantiated argument types, or null if error. */ def transformArgs(pos: int, meth: Symbol, tparams: Array[Symbol], methtype: Type, argMode: int, args: Array[Tree], pt: Type): Array[Type] = { - //System.out.println("trans args " + meth + ArrayApply.toString(tparams) + ":" + methtype + "," + pt);//DEBUG + //System.out.println("trans args " + meth + ArrayApply.toString(tparams.asInstanceOf[Array[Object]]) + ":" + methtype + "," + pt);//DEBUG val argtypes = new Array[Type](args.length); methtype match { case Type$MethodType(params, restp) => @@ -2076,6 +2076,9 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer( } argtypes + case Type.OverloadedType(alts, alttypes) if (alts.length == 1) => + transformArgs(pos, alts(0), tparams, alttypes(0), argMode, args, pt) + case _ => var i = 0; while (i < args.length) { args(i) = transform(args(i), argMode, Type.AnyType); diff --git a/sources/scalac/symtab/Type.java b/sources/scalac/symtab/Type.java index 5901fc75fa..94083d5155 100644 --- a/sources/scalac/symtab/Type.java +++ b/sources/scalac/symtab/Type.java @@ -197,8 +197,6 @@ public class Type implements Modifiers, Kinds, TypeTags, EntryTags { } public static Type typeRef(Type pre, Symbol sym, Type[] args) { - if (sym.kind == TYPE && !pre.isLegalPrefix() && !pre.isError()) - throw new Type.Malformed(pre, sym.nameString()); rebind: if (sym.isAbstractType()) { Symbol owner = sym.owner(); @@ -213,6 +211,8 @@ public class Type implements Modifiers, Kinds, TypeTags, EntryTags { "illegal cyclic reference involving " + rebind); sym = rebind.rebindSym(); } + if (sym.isAbstractType() && !pre.isLegalPrefix() && !pre.isError()) + throw new Type.Malformed(pre, sym.nameString()); if (sym.isTypeAlias()) { Symbol[] params = sym.typeParams(); if (args.length == params.length) |