# HG changeset patch # User hannesw # Date 1412781629 -7200 # Node ID 7819ff15e698ede7354c1c048e9ea106e2f4aa3d # Parent ab7cd4002e1e74bab979ca439d978a165af83ff9 8059938: NPE restoring cached script with optimistic types disabled Reviewed-by: lagergren, sundar diff -r ab7cd4002e1e -r 7819ff15e698 src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/Context.java --- a/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/Context.java Wed Oct 08 15:50:36 2014 +0200 +++ b/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 initialzers = storedScript.getInitializers(); + final Map 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); }