diff --git a/src/vm/js/Perl6/Ops.nqp b/src/vm/js/Perl6/Ops.nqp index f7c27b1e0fd..7bcaf94a436 100644 --- a/src/vm/js/Perl6/Ops.nqp +++ b/src/vm/js/Perl6/Ops.nqp @@ -42,6 +42,10 @@ $ops.add_simple_op('p6settypes', $ops.OBJ, [$ops.OBJ], :sideffects); $ops.add_simple_op('p6init', $ops.OBJ, [], :sideffects, -> {'require("perl6-runtime")'}); $ops.add_simple_op('p6bool', $ops.OBJ, [$ops.BOOL], :sideffects); +$ops.add_simple_op('p6box_s', $ops.OBJ, [$ops.STR]); +$ops.add_simple_op('p6box_i', $ops.OBJ, [$ops.INT]); +$ops.add_simple_op('p6box_n', $ops.OBJ, [$ops.NUM]); + $ops.add_simple_op('p6typecheckrv', $ops.OBJ, [$ops.OBJ, $ops.OBJ, $ops.OBJ]); $ops.add_simple_op('p6decontrv', $ops.OBJ, [$ops.OBJ, $ops.OBJ]); diff --git a/src/vm/js/perl6-runtime/runtime.js b/src/vm/js/perl6-runtime/runtime.js index 91d5b67ebea..118a2b2fbd7 100644 --- a/src/vm/js/perl6-runtime/runtime.js +++ b/src/vm/js/perl6-runtime/runtime.js @@ -1,14 +1,15 @@ var nqp = require('nqp-runtime'); var op = {}; -var Scalar; -var True; -var False; +var Scalar, True, False, Int, Num, Str; op.p6settypes = function(types) { Scalar = types.content.get('Scalar'); True = types.content.get('True'); False = types.content.get('False'); + Int = types.content.get('Int'); + Num = types.content.get('Num'); + Str = types.content.get('Str'); return types; }; @@ -26,6 +27,27 @@ op.p6decontrv = function(rountine, cont) { return cont; }; +op.p6box_i = function(int) { + var repr = Int._STable.REPR; + var boxed = repr.allocate(Int._STable); + boxed.$$setInt(int.value); + return boxed; +}; + +op.p6box_n = function(num) { + var repr = Num._STable.REPR; + var boxed = repr.allocate(Num._STable); + boxed.$$setNum(num); + return boxed; +}; + +op.p6box_s = function(str) { + var repr = Str._STable.REPR; + var boxed = repr.allocate(Str._STable); + boxed.$$setStr(str); + return boxed; +}; + var containerSpecs = require('nqp-runtime/container-specs.js'); function RakudoScalar(STable) {