On Tue Oct 21 00:20:02 2014, barto...@gmx.de wrote: > Those are the emergency hot-fix commits, which are still in nom: > > * > https://github.com/rakudo/rakudo/commit/33131e00d76fef9d4d8b6c93cdd0c110fd2897fe > > * > https://github.com/rakudo/rakudo/commit/94d83c1f7c4976c0fc0e7414e588d59ecf171628
As an experiment I made the following change to nqp: ==== diff --git a/src/vm/jvm/runtime/org/perl6/nqp/runtime/Ops.java b/src/vm/jvm/runtime/org/perl6/nqp/runtime/Ops.java index fb95495..b0b4ba4 100644 --- a/src/vm/jvm/runtime/org/perl6/nqp/runtime/Ops.java +++ b/src/vm/jvm/runtime/org/perl6/nqp/runtime/Ops.java @@ -2386,8 +2386,6 @@ public final class Ops { ArgsExpectation.invokeByExpectation(tc, cr, csd, args); } catch (ControlException e) { - if (barrier && (e instanceof SaveStackException)) - ExceptionHandling.dieInternal(tc, "control operator crossed continuation barrier"); throw e; } catch (Throwable e) { ==== Afterwards I removed the mentioned special cases for JVM ("emergency hostfixes") in rakudo's code. I was able to build rakudo-j and to run 'make install'. Also, 'make test' and 'make spectest' didn't show any new failures. ==== diff --git a/src/core/control.pm b/src/core/control.pm index 4d82aa0..3037767 100644 --- a/src/core/control.pm +++ b/src/core/control.pm @@ -51,31 +51,13 @@ multi sub return(**@x is raw --> Nil) { nqp::throwpayloadlexcaller(nqp::const::CONTROL_RETURN, @x); } -# RT #122732 - control operator crossed continuation barrier -#?if jvm -my &take-rw := -> | { - THROW(nqp::const::CONTROL_TAKE,RETURN-LIST(nqp::p6argvmarray)); -} -#?endif -#?if !jvm proto sub take-rw(|) { * } multi sub take-rw() { die "take-rw without parameters doesn't make sense" } multi sub take-rw(\x) { THROW(nqp::const::CONTROL_TAKE, x) } multi sub take-rw(|) { THROW(nqp::const::CONTROL_TAKE,RETURN-LIST(nqp::p6argvmarray)) } -#?endif -# RT #122732 - control operator crossed continuation barrier -#?if jvm -my &take := -> | { - THROW( - nqp::const::CONTROL_TAKE, - nqp::p6recont_ro(RETURN-LIST(nqp::p6argvmarray)) - ) -} -#?endif -#?if !jvm proto sub take(|) { * } multi sub take() { die "take without parameters doesn't make sense" } multi sub take(\x) { @@ -87,7 +69,6 @@ multi sub take(|) { nqp::p6recont_ro(RETURN-LIST(nqp::p6argvmarray)) ) } -#?endif proto sub goto(|) { * } multi sub goto(Label:D \x --> Nil) { x.goto } ==== I must admit that I don't understand the purpose of the two lines I removed from src/vm/jvm/runtime/org/perl6/nqp/runtime/Ops.java. They were added with nqp commit bfee0177b1 back in 2013.