diff --git a/src/main/java/org/perlonjava/backend/jvm/EmitterMethodCreator.java b/src/main/java/org/perlonjava/backend/jvm/EmitterMethodCreator.java index 915eb8aec..42626fe7d 100644 --- a/src/main/java/org/perlonjava/backend/jvm/EmitterMethodCreator.java +++ b/src/main/java/org/perlonjava/backend/jvm/EmitterMethodCreator.java @@ -1480,6 +1480,12 @@ public static RuntimeCode createRuntimeCode( return compileToInterpreter(ast, ctx, useTryCatch); } throw e; + } catch (InterpreterFallbackException e) { + // InterpreterFallbackException already carries the InterpretedCode + if (SHOW_FALLBACK) { + System.err.println("Note: Using interpreter fallback (ASM frame compute crash)."); + } + return e.interpretedCode; } catch (RuntimeException e) { if (USE_INTERPRETER_FALLBACK && needsInterpreterFallback(e)) { if (SHOW_FALLBACK) { diff --git a/src/main/java/org/perlonjava/runtime/runtimetypes/RuntimeCode.java b/src/main/java/org/perlonjava/runtime/runtimetypes/RuntimeCode.java index db229846b..619e8b3a8 100644 --- a/src/main/java/org/perlonjava/runtime/runtimetypes/RuntimeCode.java +++ b/src/main/java/org/perlonjava/runtime/runtimetypes/RuntimeCode.java @@ -7,6 +7,7 @@ import org.perlonjava.backend.bytecode.InterpreterState; import org.perlonjava.backend.jvm.EmitterContext; import org.perlonjava.backend.jvm.EmitterMethodCreator; +import org.perlonjava.backend.jvm.InterpreterFallbackException; import org.perlonjava.backend.jvm.JavaClassInfo; import org.perlonjava.frontend.astnode.Node; import org.perlonjava.frontend.astnode.OperatorNode; diff --git a/src/main/perl/lib/POSIX.pm b/src/main/perl/lib/POSIX.pm index 1a13dde1c..c93821e4d 100644 --- a/src/main/perl/lib/POSIX.pm +++ b/src/main/perl/lib/POSIX.pm @@ -232,6 +232,8 @@ sub chdir { POSIX::_chdir(@_) } sub time { POSIX::_time() } sub sleep { POSIX::_sleep(@_) } sub alarm { POSIX::_alarm(@_) } +sub strftime { POSIX::_strftime(@_) } +sub mktime { POSIX::_mktime(@_) } # Math functions (many can use Perl builtins) sub abs { CORE::abs($_[0]) }