src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/Context.java
Print this page
*** 27,36 ****
--- 27,37 ----
import static jdk.nashorn.internal.codegen.CompilerConstants.CONSTANTS;
import static jdk.nashorn.internal.codegen.CompilerConstants.CREATE_PROGRAM_FUNCTION;
import static jdk.nashorn.internal.codegen.CompilerConstants.SOURCE;
import static jdk.nashorn.internal.codegen.CompilerConstants.STRICT_MODE;
+ import static jdk.nashorn.internal.runtime.CodeStore.newCodeStore;
import static jdk.nashorn.internal.runtime.ECMAErrors.typeError;
import static jdk.nashorn.internal.runtime.ScriptRuntime.UNDEFINED;
import static jdk.nashorn.internal.runtime.Source.sourceFor;
import java.io.File;
*** 198,215 ****
@Override
public void storeScript(final String cacheKey, final Source source, final String mainClassName,
final Map<String,byte[]> classBytes, final Map<Integer, FunctionInitializer> initializers,
final Object[] constants, final int compilationId) {
if (context.codeStore != null) {
! context.codeStore.storeScript(cacheKey, source, mainClassName, classBytes, initializers, constants, compilationId);
}
}
@Override
public StoredScript loadScript(final Source source, final String functionKey) {
if (context.codeStore != null) {
! return context.codeStore.loadScript(source, functionKey);
}
return null;
}
}
--- 199,216 ----
@Override
public void storeScript(final String cacheKey, final Source source, final String mainClassName,
final Map<String,byte[]> classBytes, final Map<Integer, FunctionInitializer> initializers,
final Object[] constants, final int compilationId) {
if (context.codeStore != null) {
! context.codeStore.store(cacheKey, source, mainClassName, classBytes, initializers, constants, compilationId);
}
}
@Override
public StoredScript loadScript(final Source source, final String functionKey) {
if (context.codeStore != null) {
! return context.codeStore.load(source, functionKey);
}
return null;
}
}
*** 461,472 ****
classCache = new ClassCache(cacheSize);
}
if (env._persistent_cache) {
try {
! final String cacheDir = Options.getStringProperty("nashorn.persistent.code.cache", "nashorn_code_cache");
! codeStore = new CodeStore(this, cacheDir);
} catch (final IOException e) {
throw new RuntimeException("Error initializing code cache", e);
}
}
--- 462,472 ----
classCache = new ClassCache(cacheSize);
}
if (env._persistent_cache) {
try {
! codeStore = newCodeStore(this);
} catch (final IOException e) {
throw new RuntimeException("Error initializing code cache", e);
}
}
*** 1115,1125 ****
FunctionNode functionNode = null;
final boolean useCodeStore = env._persistent_cache && !env._parse_only && !env._optimistic_types;
final String cacheKey = useCodeStore ? CodeStore.getCacheKey(0, null) : null;
if (useCodeStore) {
! storedScript = codeStore.loadScript(source, cacheKey);
}
if (storedScript == null) {
functionNode = new Parser(env, source, errMan, strict, getLogger(Parser.class)).parse();
--- 1115,1125 ----
FunctionNode functionNode = null;
final boolean useCodeStore = env._persistent_cache && !env._parse_only && !env._optimistic_types;
final String cacheKey = useCodeStore ? CodeStore.getCacheKey(0, null) : null;
if (useCodeStore) {
! storedScript = codeStore.load(source, cacheKey);
}
if (storedScript == null) {
functionNode = new Parser(env, source, errMan, strict, getLogger(Parser.class)).parse();
*** 1192,1210 ****
* @return main script class
*/
private static Class<?> install(final StoredScript storedScript, final Source source, final CodeInstaller<ScriptEnvironment> installer) {
final Map<String, Class<?>> installedClasses = new HashMap<>();
final Object[] constants = storedScript.getConstants();
final String mainClassName = storedScript.getMainClassName();
! final byte[] mainClassBytes = storedScript.getClassBytes().get(mainClassName);
final Class<?> mainClass = installer.install(mainClassName, mainClassBytes);
final Map<Integer, FunctionInitializer> initialzers = storedScript.getInitializers();
installedClasses.put(mainClassName, mainClass);
! for (final Map.Entry<String, byte[]> entry : storedScript.getClassBytes().entrySet()) {
final String className = entry.getKey();
if (className.equals(mainClassName)) {
continue;
}
final byte[] code = entry.getValue();
--- 1192,1211 ----
* @return main script class
*/
private static Class<?> install(final StoredScript storedScript, final Source source, final CodeInstaller<ScriptEnvironment> installer) {
final Map<String, Class<?>> installedClasses = new HashMap<>();
+ final Map<String, byte[]> classBytes = storedScript.getClassBytes();
final Object[] constants = storedScript.getConstants();
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();
installedClasses.put(mainClassName, mainClass);
! for (final Map.Entry<String, byte[]> entry : classBytes.entrySet()) {
final String className = entry.getKey();
if (className.equals(mainClassName)) {
continue;
}
final byte[] code = entry.getValue();