OpenJDK / jdk / jdk10
changeset 26981:1576872e7046
8059938: NPE restoring cached script with optimistic types disabled
Reviewed-by: lagergren, sundar
author | hannesw |
---|---|
date | Wed, 08 Oct 2014 17:20:29 +0200 |
parents | 381b7cf1729a |
children | ff5dd57a40f2 |
files | nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/Context.java |
diffstat | 1 files changed, 6 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/Context.java Wed Oct 08 15:50:36 2014 +0200 +++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/Context.java Wed Oct 08 17:20:29 2014 +0200 @@ -1138,6 +1138,9 @@ 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 @@ final String mainClassName = storedScript.getMainClassName(); final byte[] mainClassBytes = classBytes.get(mainClassName); final Class<?> mainClass = installer.install(mainClassName, mainClassBytes); - final Map<Integer, FunctionInitializer> initialzers = storedScript.getInitializers(); + final Map<Integer, FunctionInitializer> initializers = storedScript.getInitializers(); installedClasses.put(mainClassName, mainClass); @@ -1244,8 +1247,8 @@ 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); }