diff options
author | paltherr <paltherr@epfl.ch> | 2003-04-07 17:05:53 +0000 |
---|---|---|
committer | paltherr <paltherr@epfl.ch> | 2003-04-07 17:05:53 +0000 |
commit | fae0e93a6aede02f539fa5acd3a0f5267dbbd5c7 (patch) | |
tree | 17c203384cb82147a0c2e5eadf5f787f15cef3f9 /sources | |
parent | 00699895d9fff134025ef84d321671e27a7cb102 (diff) | |
download | scala-fae0e93a6aede02f539fa5acd3a0f5267dbbd5c7.tar.gz scala-fae0e93a6aede02f539fa5acd3a0f5267dbbd5c7.tar.bz2 scala-fae0e93a6aede02f539fa5acd3a0f5267dbbd5c7.zip |
- Fixed Symbol.defString to place the ":" at th...
- Fixed Symbol.defString to place the ":" at the right place. - Added
method Type.defString needed by Symbol.defString. - Changed the
interpreter to use Symbol.defString & Type.toString to print symbols and
types.
Diffstat (limited to 'sources')
-rw-r--r-- | sources/scalac/Global.java | 117 | ||||
-rw-r--r-- | sources/scalac/symtab/Symbol.java | 39 | ||||
-rw-r--r-- | sources/scalac/symtab/Type.java | 17 |
3 files changed, 50 insertions, 123 deletions
diff --git a/sources/scalac/Global.java b/sources/scalac/Global.java index 65f10a3885..6aec3f7739 100644 --- a/sources/scalac/Global.java +++ b/sources/scalac/Global.java @@ -431,130 +431,21 @@ public class Global { } private String show(Symbol symbol) { - return appendMember(new StringBuffer(), symbol).toString(); - } - - private StringBuffer appendMember(StringBuffer buffer, Symbol symbol) { - buffer.append(symbol.defKeyword()).append(' '); - String name = symbol.nameString(); - int index = name.indexOf('$'); - if (index > 0) name = name.substring(0, index); - buffer.append(name).append(inner(symbol)); - if (symbol.isInitializedMethod()) - appendDefInfo(buffer, symbol.info()); - else - append(buffer, symbol.info()); - return buffer; + return symbol.defString(); } private String show(Type type) { - return append(new StringBuffer(), type).toString(); - } - - private String inner(Symbol symbol) { - switch (symbol.kind) { - case Kinds.CLASS: return " extends "; - case Kinds.ALIAS: return " = "; - case Kinds.TYPE : return " <: "; - case Kinds.VAL : return symbol.isModule() ? "extends" : - symbol.isInitializedMethod() ? "" : ": "; - default : throw Debug.abort("illegal case: " + symbol.kind); - } - } - - private StringBuffer appendDefInfo(StringBuffer buffer, Type type) { - switch (type) { - case MethodType(Symbol[] vparams, Type result): - append(buffer, Symbol.type(vparams), "(", ",", ")"); - return appendDefInfo(buffer, result); - case PolyType(Symbol[] tparams, Type result): - if (tparams.length == 0) return appendDefInfo(buffer, result); - append(buffer, Symbol.type(tparams), "[", ",", "]"); - return appendDefInfo(buffer, result); - default: - buffer.append(": "); - return append(buffer, type); - } + return type.toString(); } + /* private StringBuffer appendPrefix(StringBuffer buffer, Type prefix) { if (prefix.isSameAs(definitions.ROOT_TYPE)) return buffer; if (prefix.isSameAs(definitions.SCALA_TYPE)) return buffer; if (prefix.symbol().name.startsWith(CONSOLE_N)) return buffer; return append(buffer, prefix).append('.'); } - - private StringBuffer appendSymbol(StringBuffer buffer, Symbol symbol) { - return buffer.append(symbol.nameString()); - } - - private StringBuffer append(StringBuffer buffer, Type type) { - return buffer.append(type); - /* - switch (type) { - case ErrorType: - return buffer.append("<error>"); - case AnyType: - return buffer.append("<any type>"); - case NoType: - return buffer.append("<notype>"); - case ThisType(Symbol sym): - appendSymbol(buffer, sym); - return buffer; - case TypeRef(Type pre, Symbol sym, Type[] args): - appendPrefix(buffer, pre); - appendSymbol(buffer, sym); - if (args.length > 0) append(buffer, args, "[", ",", "]"); - return buffer; - case SingleType(Type pre, Symbol sym): - appendPrefix(buffer, pre); - appendSymbol(buffer, sym); - return buffer; - case CompoundType(Type[] parts, Scope members): - append(buffer, parts, "", " with ", ""); - append(buffer, members.elements(), " {", ", ", "}"); - return buffer; - case MethodType(Symbol[] vparams, Type result): - append(buffer, Symbol.type(vparams), "(", ",", ")"); - return append(buffer, result); - case PolyType(Symbol[] tparams, Type result): - if (tparams.length == 0) return append(buffer, result); - append(buffer, Symbol.type(tparams), "[", ",", "]"); - return append(buffer, result); - case OverloadedType(_, Type[] alttypes): - return append(buffer, alttypes, "", " & ", ""); - case CovarType(Type tp): - return append(buffer.append('+'), tp); - case LazyType(): - case TypeVar(_, _): - case UnboxedType(_): - case UnboxedArrayType(_): - throw Debug.abort("illegal case", type); - default: - throw Debug.abort("illegal case", type); - } - */ - } - - private StringBuffer append(StringBuffer buffer, Type[] types, - String prefix, String infix, String suffix) - { - buffer.append(prefix); - for (int i = 0; i < types.length; i++) - append(i > 0 ? buffer.append(infix) : buffer, types[i]); - buffer.append(suffix); - return buffer; - } - - private StringBuffer append(StringBuffer buffer, Symbol[] types, - String prefix, String infix, String suffix) - { - buffer.append(prefix); - for (int i = 0; i < types.length; i++) - appendMember(i > 0 ? buffer.append(infix) : buffer, types[i]); - buffer.append(suffix); - return buffer; - } + */ // !!! >>> Interpreter stuff diff --git a/sources/scalac/symtab/Symbol.java b/sources/scalac/symtab/Symbol.java index 71d8a7c142..7ea1e436b7 100644 --- a/sources/scalac/symtab/Symbol.java +++ b/sources/scalac/symtab/Symbol.java @@ -735,16 +735,22 @@ public abstract class Symbol implements Modifiers, Kinds { /** String representation of definition. */ public String defString() { - String inner; - if (kind == CLASS) inner = " extends "; - else if (kind == TYPE) inner = " <: "; - else if (kind == ALIAS) inner = " = "; - else inner = " : "; - return - (isParameter() ? "" : defKeyword() + " ") + - nameString() + idString() + inner + - (rawInfoAt(Global.instance.POST_ANALYZER_PHASE_ID) - instanceof Type.LazyType ? "?" : info()); + StringBuffer buffer = new StringBuffer(); + if (!isParameter()) buffer.append(defKeyword()).append(' '); + String name = nameString(); + if (!Global.instance.debug) { + int index = name.indexOf('$'); + if (index > 0) name = name.substring(0, index); + } + buffer.append(name).append(idString()).append(innerString()); + if (rawInfoAt(Global.instance.POST_ANALYZER_PHASE_ID) + instanceof Type.LazyType) + buffer.append("?"); + else if (isInitializedMethod()) + buffer.append(info().defString()); + else + buffer.append(info()); + return buffer.toString(); } public static String[] defString(Symbol[] defs) { @@ -754,6 +760,19 @@ public abstract class Symbol implements Modifiers, Kinds { return strs; } + private String innerString() { + switch (kind) { + case Kinds.ERROR: return ": "; + case Kinds.NONE : return ": "; + case Kinds.ALIAS: return " = "; + case Kinds.CLASS: return " extends "; + case Kinds.TYPE : return " <: "; + case Kinds.VAL : return isModule() ? "extends" : + isInitializedMethod() ? "" : ": "; + default : throw Debug.abort("illegal case: " + kind); + } + } + /** String representation of kind */ public String kindString() { switch (kind) { diff --git a/sources/scalac/symtab/Type.java b/sources/scalac/symtab/Type.java index b61f9141ab..48c7f7c441 100644 --- a/sources/scalac/symtab/Type.java +++ b/sources/scalac/symtab/Type.java @@ -2196,6 +2196,23 @@ public class Type implements Modifiers, Kinds, TypeTags { else return str; } + // used by Symbol.defString + String defString() { + StringBuffer buffer = new StringBuffer(); + switch (this) { + case MethodType(Symbol[] vparams, Type result): + buffer.append( + ArrayApply.toString(paramTypeString(vparams), "(", ",", ")")); + return buffer.append(result.defString()).toString(); + case PolyType(Symbol[] tparams, Type result): + if (tparams.length != 0) buffer.append( + ArrayApply.toString(Symbol.defString(tparams), "[", ",", "]")); + return buffer.append(result.defString()).toString(); + default: + return buffer.append(": ").append(this).toString(); + } + } + private String prefixString() { if ((symbol().kind == NONE || symbol().isRoot()) && !Global.instance.debug) { return ""; |