diff --git a/src/main/java/erjang/EProc.java b/src/main/java/erjang/EProc.java index c109def0..c9259f0b 100644 --- a/src/main/java/erjang/EProc.java +++ b/src/main/java/erjang/EProc.java @@ -454,6 +454,9 @@ public void execute() throws Pausable { result = e.reason(); death = e; + } catch (ErlangHalt e) { + throw e; + } catch (Throwable e) { log.log(Level.SEVERE, "[java] exiting "+self_handle()+" with: ", e); @@ -480,6 +483,8 @@ public void execute() throws Pausable { try { fun.invoke(this, new EObject[] { EString.fromString(msg) }); + } catch (ErlangHalt e) { + throw e; } catch (ThreadDeath e) { throw e; } catch (Throwable e) { @@ -493,6 +498,9 @@ public void execute() throws Pausable { do_proc_termination(result); + } catch (ErlangHalt e) { + throw e; + } catch (ThreadDeath e) { throw e; diff --git a/src/main/java/erjang/ErlangHalt.java b/src/main/java/erjang/ErlangHalt.java new file mode 100644 index 00000000..a36bfb13 --- /dev/null +++ b/src/main/java/erjang/ErlangHalt.java @@ -0,0 +1,6 @@ +package erjang; + +/** thrown when erlang:halt is invoked */ +public class ErlangHalt extends java.lang.Error { + +} diff --git a/src/main/java/erjang/m/erlang/ErlProc.java b/src/main/java/erjang/m/erlang/ErlProc.java index 6509efbf..75fe472b 100644 --- a/src/main/java/erjang/m/erlang/ErlProc.java +++ b/src/main/java/erjang/m/erlang/ErlProc.java @@ -51,6 +51,7 @@ import erjang.ErjangHibernateException; import erjang.ErlangException; import erjang.ErlangExit; +import erjang.ErlangHalt; import erjang.ErlangUndefined; import erjang.FunID; import erjang.Import; @@ -299,7 +300,7 @@ public static EObject halt(EProc proc, EObject value) { } ERT.shutdown(); - return null; + throw new erjang.ErlangHalt(); } @BIF