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.

Reply via email to