1484e54b271a9fd8018eefe71a270c5e5926cd3e
[org.ibex.core.git] / src / org / ibex / js / JSString.java
1 package org.ibex.js;
2
3 import org.ibex.util.*;
4
5 final class JSString extends JSPrimitive {
6     final String s;
7     public JSString(String s) { this.s = s; }
8     public int hashCode() { return s.hashCode(); }
9     
10     public boolean jsequals(JS o) {
11         if(o == this) return true;
12         if(o instanceof JSString) {
13             return ((JSString)o).s.equals(s);
14         } else if(o instanceof JSNumber) {
15             return o.jsequals(this);
16         } else {
17             return false;
18         }
19     }
20     
21     int length() { return s.length(); }
22     
23     private static Hash internHash = new Hash();
24     static synchronized JS intern(String s) {
25         JS js = (JS)internHash.get(s);
26         if(js == null) internHash.put(s,js = new JSString(s));
27         return js;
28     }
29     JS intern() { return intern(s); }
30     
31     String coerceToString() { return s; }
32 }