summaryrefslogtreecommitdiff
path: root/sources/scalac/util/NameTransformer.java
diff options
context:
space:
mode:
Diffstat (limited to 'sources/scalac/util/NameTransformer.java')
-rw-r--r--sources/scalac/util/NameTransformer.java31
1 files changed, 19 insertions, 12 deletions
diff --git a/sources/scalac/util/NameTransformer.java b/sources/scalac/util/NameTransformer.java
index a347a6bf81..b04b665379 100644
--- a/sources/scalac/util/NameTransformer.java
+++ b/sources/scalac/util/NameTransformer.java
@@ -40,18 +40,25 @@ public class NameTransformer {
/** Replace operator symbols by corresponding "$op_name" in names.
*/
public static Name encode(Name name) {
- int i = name.index;
- int len = i + name.length();
- StringBuffer res = new StringBuffer();
- while (i < len) {
- byte c = Name.names[i++];
- String nop = operatorName[c];
- if (nop == null)
- res.append((char)c);
- else
- res.append(nop);
- }
- return Name.fromString(res.toString());
+ String string = name.toString();
+ StringBuffer buffer = null;
+ for (int i = 0; i < string.length(); i++) {
+ char c = string.charAt(i);
+ if (c < 128) {
+ String operator = operatorName[c];
+ if (operator != null) {
+ if (buffer == null) {
+ int capacity = string.length() - 1 + operator.length();
+ buffer = new StringBuffer(capacity);
+ buffer.append(string.substring(0, i));
+ }
+ buffer.append(operator);
+ continue;
+ }
+ }
+ if (buffer != null) buffer.append(c);
+ }
+ return buffer == null ? name : Name.fromString(buffer.toString());
}
/** Replace "$op_name" by corresponding operator symbols in names.