From 007449aefac1a0606d6322ac04623c0fbadf753a Mon Sep 17 00:00:00 2001 From: hannesw Date: Thu, 9 Oct 2014 11:56:42 +0200 Subject: 8059938: NPE restoring cached script with optimistic types disabled Reviewed-by: lagergren, sundar --- src/jdk/nashorn/internal/runtime/Context.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'src/jdk') diff --git a/src/jdk/nashorn/internal/runtime/Context.java b/src/jdk/nashorn/internal/runtime/Context.java index 8695a5c7..945f919c 100644 --- a/src/jdk/nashorn/internal/runtime/Context.java +++ b/src/jdk/nashorn/internal/runtime/Context.java @@ -1138,6 +1138,9 @@ public final class Context { StoredScript storedScript = null; FunctionNode functionNode = null; + // We only use the code store here if optimistic types are disabled. With optimistic types, + // code is stored per function in RecompilableScriptFunctionData. + // TODO: This should really be triggered by lazy compilation, not optimistic types. final boolean useCodeStore = env._persistent_cache && !env._parse_only && !env._optimistic_types; final String cacheKey = useCodeStore ? CodeStore.getCacheKey(0, null) : null; @@ -1224,7 +1227,7 @@ public final class Context { final String mainClassName = storedScript.getMainClassName(); final byte[] mainClassBytes = classBytes.get(mainClassName); final Class mainClass = installer.install(mainClassName, mainClassBytes); - final Map initialzers = storedScript.getInitializers(); + final Map initializers = storedScript.getInitializers(); installedClasses.put(mainClassName, mainClass); @@ -1244,8 +1247,8 @@ public final class Context { if (constant instanceof RecompilableScriptFunctionData) { final RecompilableScriptFunctionData data = (RecompilableScriptFunctionData) constant; data.initTransients(source, installer); - if (initialzers != null) { - final FunctionInitializer initializer = initialzers.get(data.getFunctionNodeId()); + final FunctionInitializer initializer = initializers.get(data.getFunctionNodeId()); + if (initializer != null) { initializer.setCode(installedClasses.get(initializer.getClassName())); data.initializeCode(initializer); } -- cgit v1.2.3