summaryrefslogtreecommitdiff
path: root/sources/scalac
diff options
context:
space:
mode:
authorpaltherr <paltherr@epfl.ch>2004-02-27 22:56:35 +0000
committerpaltherr <paltherr@epfl.ch>2004-02-27 22:56:35 +0000
commit01599fa37b24e623d1bc6836a8f65548bd5fdcea (patch)
tree295dcb780d72eb2fb7db075be8ca84014573cc9b /sources/scalac
parent0b75ded56f99a77dc19892fe8c3ceda16e72148e (diff)
downloadscala-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.java4
-rw-r--r--sources/scalac/symtab/SymbolTablePrinter.java8
-rw-r--r--sources/scalac/typechecker/RefCheck.java4
-rw-r--r--sources/scalac/util/NameTransformer.java79
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;
- }
}