--- /dev/null
+package org.ibex.js;
+
+import org.ibex.util.*;
+
+final class JSString extends JSPrimitive {
+ final String s;
+ public JSString(String s) { this.s = s; }
+ public int hashCode() { return s.hashCode(); }
+
+ public boolean jsequals(JS o) {
+ if(o == this) return true;
+ if(o instanceof JSString) {
+ return ((JSString)o).s.equals(s);
+ } else if(o instanceof JSNumber) {
+ return o.jsequals(this);
+ } else {
+ return false;
+ }
+ }
+
+ int length() { return s.length(); }
+
+ private 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;
+ }
+ JS intern() { return intern(s); }
+
+ String coerceToString() { return s; }
+}