diff options
author | paltherr <paltherr@epfl.ch> | 2004-03-19 01:57:37 +0000 |
---|---|---|
committer | paltherr <paltherr@epfl.ch> | 2004-03-19 01:57:37 +0000 |
commit | a32de8bd0c06eb9e400f3a8cf6fe958f7bd337ce (patch) | |
tree | c98749f6f437176ed4ce3014de12b9c42b34a17c /sources/scalac/util/Name.java | |
parent | a4eb56b88c6f2f6505cdd9a0f83d4a4a226a5996 (diff) | |
download | scala-a32de8bd0c06eb9e400f3a8cf6fe958f7bd337ce.tar.gz scala-a32de8bd0c06eb9e400f3a8cf6fe958f7bd337ce.tar.bz2 scala-a32de8bd0c06eb9e400f3a8cf6fe958f7bd337ce.zip |
- Added classes TermName and TypeName and made ...
- Added classes TermName and TypeName and made class Name abstract Added
- an ASCII table in TermName to speedup fromAscii operations
Diffstat (limited to 'sources/scalac/util/Name.java')
-rw-r--r-- | sources/scalac/util/Name.java | 156 |
1 files changed, 76 insertions, 80 deletions
diff --git a/sources/scalac/util/Name.java b/sources/scalac/util/Name.java index 82b1fc5055..c6da6ad003 100644 --- a/sources/scalac/util/Name.java +++ b/sources/scalac/util/Name.java @@ -2,128 +2,124 @@ ** / __// __ \/ __// __ \/ ____/ SOcos COmpiles Scala ** ** __\_ \/ /_/ / /__/ /_/ /\_ \ (c) 2002, LAMP/EPFL ** ** /_____/\____/\___/\____/____/ ** -** ** -** $Id$ \* */ +// $Id$ + package scalac.util; -import java.util.HashMap; +/** This class implements the common part of TermName and TypeName. */ +public abstract class Name { -public final class Name { + //######################################################################## + // Public Fields -/** address in the name memory - */ + /** The unique identifier */ public final int index; - private final String string; + //######################################################################## + // Private Fields + + /** The related term name */ + private final TermName term; -/** hashtable for finding term names quickly - */ - private static HashMap/*<String,TermName>*/ terms = new HashMap(); + /** The related type name (null if not yet created) */ + private TypeName type; - private final Name term; - private Name type; + //######################################################################## + // Protected Constructors -/** Constructor - */ - private Name(String string, Name dual) { - this.string = string; - this.index = dual != null ? dual.index + 1 : 2 * terms.size(); - this.term = dual != null ? dual : this; - this.type = dual != null ? this : null; - if (dual == null) terms.put(string, this); + /** Initializes this instance. */ + protected Name(int index, TermName term) { + this.index = index; + this.term = term == null ? (TermName)this : term; + this.type = term == null ? null : (TypeName)this; } -/** create a term name from the bytes in cs[offset..offset+len-1]. - * assume that bytes are in ascii format. - */ - public static Name fromAscii(byte cs[], int offset, int len) { - return fromString(SourceRepresentation.ascii2string(cs, offset, len)); + //######################################################################## + // Public Factories + + /** Returns the term name with given ASCII representation. */ + public static TermName fromAscii(byte[] bytes, int start, int count) { + return TermName.fromAscii(bytes, start, count); } -/** create a name from the characters in string s - */ - public static Name fromString(String s) { - Object value = terms.get(s); - if (value != null) return (Name)value; - return new Name(s, null); + /** Returns the term name with given string representation. */ + public static TermName fromString(String string) { + return TermName.fromString(string); } -/** return the string representation of this name - */ - public String toString() { - return string; + //######################################################################## + // Public Methods + + /** Is this name a variable identifier? */ + public final boolean isVariable() { + char first = charAt(0); + return (('a' <= first && first <= 'z') || first == '_') + && this != Names.false_ + && this != Names.true_ + && this != Names.null_; } -/** is this name a term name? - */ - public boolean isTermName() { + /** Is this name a term name? */ + public final boolean isTermName() { return this == term; } -/** is this name a type name? - */ - public boolean isTypeName() { + /** Is this name a type name? */ + public final boolean isTypeName() { return this == type; } -/** create a term name corresponding to this name - */ - public Name toTermName() { + /** Returns the term name with the same representation. */ + public final TermName toTermName() { return term; } -/** create a type name corresponding to this name - */ - public Name toTypeName() { - return type != null ? type : (type = new Name(string, this)); + /** Returns the type name with the same representation. */ + public final TypeName toTypeName() { + return type != null ? type : (type = new TypeName(term)); } -/** return the string hash value of this name - */ - public int hashCode() { - return index; + /** Returns the result of "toString().length()". */ + public final int length() { + return toString().length(); } -/** returns the length of this name - */ - public int length() { - return string.length(); + /** Returns the result of "toString().charAt(index)". */ + public final char charAt(int index) { + return toString().charAt(index); } -/** returns i'th char of this name - */ - public char charAt(int i) { - return string.charAt(i); + /** Returns the result of "toString().indexOf(ch)". */ + public final int indexOf(char ch) { + return toString().indexOf(ch); } -/** returns first occurrence of char c in this name, -1 if not found - */ - public int indexOf(char c) { - return indexOf(c, 0); + /** Returns the result of "toString().indexOf(ch, start)". */ + public final int indexOf(char ch, int start) { + return toString().indexOf(ch, start); } -/** returns first occurrence of char c in this name from `start', -1 if not found - */ - public int indexOf(char c, int start) { - return string.indexOf(c, start); + /** Returns the result of "toString().lastIndexOf(ch)". */ + public final int lastIndexOf(char ch) { + return toString().lastIndexOf(ch); } -/** returns last occurrence of char c in this name, -1 if not found. - */ - public int lastIndexOf(char c) { - return string.lastIndexOf(c); + /** Returns the result of "toString().lastIndexOf(ch, start)". */ + public final int lastIndexOf(char ch, int start) { + return toString().lastIndexOf(ch, start); } -/** is this name a variable identifier? - */ - public boolean isVariable() { - char first = string.charAt(0); - return ((first >= 'a' && first <= 'z') || first == '_') && - this != Names.null_ && - this != Names.true_ && - this != Names.false_; + /** Returns the hash code of this name. */ + public final int hashCode() { + return index; + } + + /** Returns the string representation of this name. */ + public String toString() { + return term.toString(); } + //######################################################################## } |