added some files that had been left out
[org.ibex.js.git] / src / org / ibex / js / JSString.java
diff --git a/src/org/ibex/js/JSString.java b/src/org/ibex/js/JSString.java
new file mode 100644 (file)
index 0000000..5dc2334
--- /dev/null
@@ -0,0 +1,35 @@
+package org.ibex.js;
+
+import org.ibex.util.*;
+
+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;
+        }
+    }
+    
+    private final static Hash internHash = new Hash();
+    static synchronized JS intern(String s) {
+        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); } }
+    }
+    
+    String coerceToString() { return s; }
+}