summaryrefslogtreecommitdiff
path: root/sources
diff options
context:
space:
mode:
authorpaltherr <paltherr@epfl.ch>2003-04-07 17:05:53 +0000
committerpaltherr <paltherr@epfl.ch>2003-04-07 17:05:53 +0000
commitfae0e93a6aede02f539fa5acd3a0f5267dbbd5c7 (patch)
tree17c203384cb82147a0c2e5eadf5f787f15cef3f9 /sources
parent00699895d9fff134025ef84d321671e27a7cb102 (diff)
downloadscala-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.java117
-rw-r--r--sources/scalac/symtab/Symbol.java39
-rw-r--r--sources/scalac/symtab/Type.java17
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 "";