From 22499e81b5526b8f8713fc5703d785d12439fef4 Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Tue, 6 Jan 2004 14:02:00 +0000 Subject: *** empty log message *** --- sources/scalac/symtab/Definitions.java | 4 +++- sources/scalac/symtab/Symbol.java | 18 +++++++++++++++++- sources/scalac/symtab/Type.java | 1 + 3 files changed, 21 insertions(+), 2 deletions(-) (limited to 'sources/scalac/symtab') diff --git a/sources/scalac/symtab/Definitions.java b/sources/scalac/symtab/Definitions.java index bcf7b755bf..d22891c341 100644 --- a/sources/scalac/symtab/Definitions.java +++ b/sources/scalac/symtab/Definitions.java @@ -150,7 +150,9 @@ public class Definitions { public final int FUNCTION_COUNT = 10; public final Symbol[] FUNCTION_CLASS = new Symbol[FUNCTION_COUNT]; public final Type FUNCTION_TYPE(Type[] args, Type result) { - assert 0 <= args.length && args.length < FUNCTION_COUNT: args.length; + assert 0 <= args.length; + if (args.length >= FUNCTION_COUNT) + throw new Type.Error("function has too many arguments; limit = " + (FUNCTION_COUNT-1)); args = Type.cloneArray(args, 1); args[args.length - 1] = result; return getType(FUNCTION_CLASS[args.length - 1], args); diff --git a/sources/scalac/symtab/Symbol.java b/sources/scalac/symtab/Symbol.java index f7430a8402..8deb6ef2e6 100644 --- a/sources/scalac/symtab/Symbol.java +++ b/sources/scalac/symtab/Symbol.java @@ -1300,7 +1300,23 @@ public class TermSymbol extends Symbol { Scope.Entry e = scope.lookupEntry(name); if (e.owner == scope && e.sym.isExternal() && e.sym.kind == VAL) { TermSymbol sym = (TermSymbol) e.sym; - sym.update(pos, flags); + if (sym.isInitialized()) { + switch (sym.type()) { + case OverloadedType(Symbol[] alts, Type[] alttypes): + int i = 0; + while (i < alts.length && !alts[i].isExternal()) + i++; + if (i < alts.length) { + //System.out.println("PATCH: " + alts[i] + ":" + alttypes[i]);//DEBUG + alts[i].update(pos, flags); + if (i == alts.length - 1) + sym.update(pos, sym.flags); + return (TermSymbol) alts[i]; + } + throw new ApplicationError("TermSymbol.define " + sym); + } + } + sym.update(pos, flags); return sym; } else { return new TermSymbol(pos, name, owner, flags); diff --git a/sources/scalac/symtab/Type.java b/sources/scalac/symtab/Type.java index 93918f0c54..ae2aaf5a39 100644 --- a/sources/scalac/symtab/Type.java +++ b/sources/scalac/symtab/Type.java @@ -2574,6 +2574,7 @@ public class Type implements Modifiers, Kinds, TypeTags, EntryTags { j++; } if (j == tps.length) { + if (Global.instance.debug) System.out.println("refinement lub for " + rsyms[0]);//debug Symbol lubSym = lub(rsyms, rtps, rlbs, lubType.symbol()); if (lubSym.kind != NONE && !(lubSym.kind == sym.kind && -- cgit v1.2.3