import org.ibex.util.*;
-final class JSString extends JSPrimitive {
+class JSString extends JSPrimitive {
final String s;
public JSString(String s) { this.s = s; }
public int hashCode() { return s.hashCode(); }
}
}
- int length() { return s.length(); }
-
- private static Hash internHash = new Hash();
+ private final static Hash internHash = new Hash();
static synchronized JS intern(String s) {
- JS js = (JS)internHash.get(s);
- if(js == null) internHash.put(s,js = new JSString(s));
- return js;
+ synchronized(internHash) {
+ JS js = (JS)internHash.get(s);
+ if(js == null) internHash.put(s,js = new Intern(s));
+ return js;
+ }
+ }
+ static class Intern extends JSString {
+ public Intern(String s) { super(s); }
+ protected void finalize() { synchronized(internHash) { internHash.put(s,null); } }
}
- JS intern() { return intern(s); }
String coerceToString() { return s; }
}