updated Makefile.common
[org.ibex.core.git] / src / org / ibex / js / JSString.java
index 1484e54..5dc2334 100644 (file)
@@ -2,7 +2,7 @@ package org.ibex.js;
 
 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(); }
@@ -18,15 +18,18 @@ final class JSString extends JSPrimitive {
         }
     }
     
-    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; }
 }