Skip to content

Commit

Permalink
If JIT fails, fallback to interpreter
Browse files Browse the repository at this point in the history
This is actually a hack, but works if e.g. the
generated byte code is too large.
  • Loading branch information
krestenkrab committed Jun 6, 2012
1 parent 6b4fe22 commit e7c36cd
Showing 1 changed file with 12 additions and 3 deletions.
15 changes: 12 additions & 3 deletions src/main/java/erjang/EModuleLoader.java
Expand Up @@ -77,9 +77,18 @@ public static EModule load_module(String moduleName, EBinary beamBin) throws IOE
loaded_module = erjang.beam.interpreter.Interpreter.beamFileToEModule(bfd);
after = System.currentTimeMillis();
} else { // Use compiler
EModuleClassLoader moduleClassLoader = ErjangCodeCache.getModuleClassLoader(moduleName, beamBin, beamParser);
after = System.currentTimeMillis();
loaded_module = load_compiled_module(moduleName, moduleClassLoader);
try {
EModuleClassLoader moduleClassLoader = ErjangCodeCache.getModuleClassLoader(moduleName, beamBin, beamParser);
after = System.currentTimeMillis();
loaded_module = load_compiled_module(moduleName, moduleClassLoader);
} catch (RuntimeException e) {

use_interpreter = true;
// i something fails, ... try interpreted ...
BeamFileData bfd = beamParser.load(beamBin.toByteArray());
loaded_module = erjang.beam.interpreter.Interpreter.beamFileToEModule(bfd);
after = System.currentTimeMillis();
}
}
if (log.isLoggable(Level.FINE)) {
long after_load = System.currentTimeMillis();
Expand Down

0 comments on commit e7c36cd

Please sign in to comment.