X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;ds=sidebyside;f=src%2Forg%2Fibex%2Fjs%2FJSString.java;fp=src%2Forg%2Fibex%2Fjs%2FJSString.java;h=5dc2334b003e378754e3d14fbb957936d8e097d4;hb=a19b897271a8ab6b25aba63e4b30223c2477c28d;hp=1484e54b271a9fd8018eefe71a270c5e5926cd3e;hpb=2d6763644359578428d56d004b998edd10463a84;p=org.ibex.core.git diff --git a/src/org/ibex/js/JSString.java b/src/org/ibex/js/JSString.java index 1484e54..5dc2334 100644 --- a/src/org/ibex/js/JSString.java +++ b/src/org/ibex/js/JSString.java @@ -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; } }