diff options
Diffstat (limited to 'src/jdk/nashorn/internal/runtime/regexp/RegExpFactory.java')
-rw-r--r-- | src/jdk/nashorn/internal/runtime/regexp/RegExpFactory.java | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/jdk/nashorn/internal/runtime/regexp/RegExpFactory.java b/src/jdk/nashorn/internal/runtime/regexp/RegExpFactory.java index 08168b63..77b1b3dc 100644 --- a/src/jdk/nashorn/internal/runtime/regexp/RegExpFactory.java +++ b/src/jdk/nashorn/internal/runtime/regexp/RegExpFactory.java @@ -25,6 +25,9 @@ package jdk.nashorn.internal.runtime.regexp; +import java.util.Collections; +import java.util.Set; +import java.util.WeakHashMap; import jdk.nashorn.internal.runtime.ParserException; import jdk.nashorn.internal.runtime.options.Options; @@ -39,6 +42,15 @@ public class RegExpFactory { private final static String JDK = "jdk"; private final static String JONI = "joni"; + /** Weak cache of already validated regexps - when reparsing, we don't, for example + * need to recompile (reverify) all regexps that have previously been parsed by this + * RegExpFactory in a previous compilation. This saves significant time in e.g. avatar + * startup */ + private static final Set<String> VALID_CACHE_SET = + Collections.newSetFromMap( + Collections.synchronizedMap( + new WeakHashMap<String, Boolean>())); + static { final String impl = Options.getStringProperty("nashorn.regexp.impl", JONI); switch (impl) { @@ -88,7 +100,9 @@ public class RegExpFactory { */ // @SuppressWarnings({"unused"}) public static void validate(final String pattern, final String flags) throws ParserException { - instance.compile(pattern, flags); + if (VALID_CACHE_SET.add(pattern + flags)) { + instance.compile(pattern, flags); + } } /** |