diff --git a/src/vm/js/Perl6/Ops.nqp b/src/vm/js/Perl6/Ops.nqp index 461274a28f4..8467439547f 100644 --- a/src/vm/js/Perl6/Ops.nqp +++ b/src/vm/js/Perl6/Ops.nqp @@ -74,3 +74,5 @@ $ops.add_simple_op('p6definite', $ops.OBJ, [$ops.OBJ], :decont(0)); $ops.add_simple_op('p6captureouters2', $ops.OBJ, [$ops.OBJ, $ops.OBJ], :ctx); $ops.add_simple_op('p6captureouters', $ops.OBJ, [$ops.OBJ], :ctx); $ops.add_simple_op('p6capturelex', $ops.OBJ, [$ops.OBJ], :ctx); + +$ops.add_simple_op('p6var', $ops.OBJ, [$ops.OBJ], :sideffects); # TODO not really just needs marking as returning a fresh value diff --git a/src/vm/js/perl6-runtime/runtime.js b/src/vm/js/perl6-runtime/runtime.js index 1ea30b2c3ef..8ea79e0f37a 100644 --- a/src/vm/js/perl6-runtime/runtime.js +++ b/src/vm/js/perl6-runtime/runtime.js @@ -103,6 +103,15 @@ op.p6capturelex = function(ctx, codeObj) { return codeObj; }; +op.p6var = function(cont) { + if (cont != null && cont.$$iscont && cont.$$iscont()) { + var wrapper = Scalar._STable.REPR.allocate(Scalar._STable); + wrapper.$$bindattr(Scalar, '$!value', cont); + return wrapper; + } else { + return cont; + } +} var containerSpecs = require('nqp-runtime/container-specs.js');