diff options
author | paltherr <paltherr@epfl.ch> | 2004-02-27 22:56:35 +0000 |
---|---|---|
committer | paltherr <paltherr@epfl.ch> | 2004-02-27 22:56:35 +0000 |
commit | 01599fa37b24e623d1bc6836a8f65548bd5fdcea (patch) | |
tree | 295dcb780d72eb2fb7db075be8ca84014573cc9b /sources/scalac | |
parent | 0b75ded56f99a77dc19892fe8c3ceda16e72148e (diff) | |
download | scala-01599fa37b24e623d1bc6836a8f65548bd5fdcea.tar.gz scala-01599fa37b24e623d1bc6836a8f65548bd5fdcea.tar.bz2 scala-01599fa37b24e623d1bc6836a8f65548bd5fdcea.zip |
- Changed return type of NameTransformer.decode...
- Changed return type of NameTransformer.decode to String (was Name)
Diffstat (limited to 'sources/scalac')
-rw-r--r-- | sources/scalac/symtab/Symbol.java | 4 | ||||
-rw-r--r-- | sources/scalac/symtab/SymbolTablePrinter.java | 8 | ||||
-rw-r--r-- | sources/scalac/typechecker/RefCheck.java | 4 | ||||
-rw-r--r-- | sources/scalac/util/NameTransformer.java | 79 |
4 files changed, 38 insertions, 57 deletions
diff --git a/sources/scalac/symtab/Symbol.java b/sources/scalac/symtab/Symbol.java index 2eb9d4d78c..05c7f9de7b 100644 --- a/sources/scalac/symtab/Symbol.java +++ b/sources/scalac/symtab/Symbol.java @@ -1088,7 +1088,7 @@ public abstract class Symbol implements Modifiers, Kinds { * $eq => =. */ public String nameString() { - return NameTransformer.decode(simpleName()).toString(); + return NameTransformer.decode(simpleName()); } /** String representation of symbol's full name. @@ -1096,7 +1096,7 @@ public abstract class Symbol implements Modifiers, Kinds { * $eq => =. */ public String fullNameString() { - return NameTransformer.decode(fullName()).toString(); + return NameTransformer.decode(fullName()); } /** String representation, including symbol's kind diff --git a/sources/scalac/symtab/SymbolTablePrinter.java b/sources/scalac/symtab/SymbolTablePrinter.java index 8cf3ce3608..a1957bbcad 100644 --- a/sources/scalac/symtab/SymbolTablePrinter.java +++ b/sources/scalac/symtab/SymbolTablePrinter.java @@ -298,16 +298,16 @@ public class SymbolTablePrinter { /** Returns the name of the given symbol. */ public String getSymbolName(Symbol symbol) { - Name name = symbol.simpleName(); + String name = symbol.simpleName().toString(); if (!global.debug) name = NameTransformer.decode(name); - return name.toString(); + return name; } /** Returns the full name of the given symbol. */ public String getSymbolFullName(Symbol symbol) { - Name name = symbol.fullName(); + String name = symbol.fullName().toString(); if (!global.debug) name = NameTransformer.decode(name); - return name.toString(); + return name; } /** Returns the inner string of the given symbol. */ diff --git a/sources/scalac/typechecker/RefCheck.java b/sources/scalac/typechecker/RefCheck.java index 63b092c4f0..6a7b0f2e4f 100644 --- a/sources/scalac/typechecker/RefCheck.java +++ b/sources/scalac/typechecker/RefCheck.java @@ -636,10 +636,10 @@ public class RefCheck extends Transformer implements Modifiers, Kinds { Tree body; if (fields.length == 0) { body = gen.mkStringLit( - clazz.pos, NameTransformer.decode(clazz.name).toString()); + clazz.pos, NameTransformer.decode(clazz.name)); } else { body = gen.mkStringLit( - clazz.pos, NameTransformer.decode(clazz.name).toString() + "("); + clazz.pos, NameTransformer.decode(clazz.name) + "("); for (int i = 0; i < fields.length; i++) { String str = (i == fields.length - 1) ? ")" : ","; body = gen.Apply( diff --git a/sources/scalac/util/NameTransformer.java b/sources/scalac/util/NameTransformer.java index 1a7218c8f3..a347a6bf81 100644 --- a/sources/scalac/util/NameTransformer.java +++ b/sources/scalac/util/NameTransformer.java @@ -56,57 +56,38 @@ public class NameTransformer { /** Replace "$op_name" by corresponding operator symbols in names. */ - public static Name decode(Name name) { - int i = name.index; - int length = i + name.length(); - StringBuffer res = new StringBuffer(); - while (i < length) { - byte c = Name.names[i++]; - if ((char)c == '$') { - String op = cutOut(i, length); - res.append(decode("$" + op)); - i = i + op.length(); - } - else res.append((char)c); - } - return Name.fromString(res.toString()); + public static String decode(Name name) { + return decode(name.toString()); } - - /** Decodes (a prefix of) a string. - */ public static String decode(String string) { - for (int i = string.length(); i > 0; i--) { - String prefix = string.substring(0, i); - String c = lookup(prefix); - if (c != null) { - String suffix = string.substring(i, string.length()); - return c + suffix; - } - } - return string; - } - - /** Cuts out the name of an operator plus succeeding characters. - * Does NOT return the preceeding '$' symbol. - */ - private static String cutOut(int pos, int length) { - int i = pos; // avoid side-effects - StringBuffer res = new StringBuffer(); - while (i < length) { - char c = (char)Name.names[i++]; - if (c == '$') return res.toString(); - else res.append(c); - } - return res.toString(); + StringBuffer buffer = null; + for (int i = 0; i < string.length(); i++) { + char c = string.charAt(i); + if (c == '$') { + int index = -1; + int length = -1; // an operator may be a prefix of another one + for (int j = 0; j < operatorName.length; j++) { + String operator = operatorName[j]; + if (operator == null) continue; + if (operator.length() <= length) continue; + if (!string.startsWith(operator, i)) continue; + index = j; + length = operator.length(); + } + if (length >= 0) { + if (buffer == null) { + int capacity = string.length() - length + 1; + buffer = new StringBuffer(capacity); + buffer.append(string.substring(0, i)); + } + buffer.append((char)index); + i += length - 1; + continue; + } + } + if (buffer != null) buffer.append(c); + } + return buffer == null ? string : buffer.toString(); } - /** Looks up the array entry for the operator name. - */ - private static String lookup(String string) { - for (int i = 0; i < 128; i++) { - if ((operatorName[i] != null) && (string.compareTo(operatorName[i]) == 0)) - return String.valueOf((char)i); - } - return null; - } } |