updated Makefile.common
[org.ibex.core.git] / src / org / ibex / js / JSString.java
1 package org.ibex.js;
2
3 import org.ibex.util.*;
4
5 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     private final static Hash internHash = new Hash();
22     static synchronized JS intern(String s) {
23         synchronized(internHash) {
24             JS js = (JS)internHash.get(s);
25             if(js == null) internHash.put(s,js = new Intern(s));
26             return js;
27         }
28     }
29     static class Intern extends JSString {
30         public Intern(String s) { super(s); }
31         protected void finalize() { synchronized(internHash) { internHash.put(s,null); } }
32     }
33     
34     String coerceToString() { return s; }
35 }