From 19dd95990001018e1d255ecc366dac0f625fb8bb Mon Sep 17 00:00:00 2001 From: Pawel Murias Date: Mon, 19 Dec 2016 15:11:20 +0100 Subject: [PATCH] [js] Implement nqp::p6scalarfromdesc. --- src/vm/js/perl6-runtime/runtime.js | 33 +++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/src/vm/js/perl6-runtime/runtime.js b/src/vm/js/perl6-runtime/runtime.js index f85649549ad..35785864416 100644 --- a/src/vm/js/perl6-runtime/runtime.js +++ b/src/vm/js/perl6-runtime/runtime.js @@ -3,7 +3,9 @@ var Null = nqp.Null; var CodeRef = require('nqp-runtime/code-ref'); var op = {}; -var Scalar, True, False, Int, Num, Str, Code; +var Scalar, True, False, Int, Num, Str, Code, Mu, Any, ContainerDescriptor; + +var defaultContainerDescriptor; op.p6settypes = function(types) { Scalar = types.content.get('Scalar'); @@ -14,6 +16,17 @@ op.p6settypes = function(types) { Str = types.content.get('Str'); Code = types.content.get('Code'); Mu = types.content.get('Mu'); + Any = types.content.get('Any'); + ContainerDescriptor = types.content.get('ContainerDescriptor'); + + defaultContainerDescriptor = ContainerDescriptor._STable.REPR.allocate(ContainerDescriptor._STable); + + defaultContainerDescriptor.$$bindattr(ContainerDescriptor, '$!of', Mu); + + defaultContainerDescriptor.$$bindattr_s(ContainerDescriptor, '$!name', ""); + defaultContainerDescriptor.$$bindattr_i(ContainerDescriptor, '$!rw', 1); + defaultContainerDescriptor.$$bindattr(ContainerDescriptor, '$!default', Any); + return types; }; @@ -146,6 +159,24 @@ op.p6argvmarray = function(ctx, args) { return nqp.createArray(array); }; +op.p6scalarfromdesc = function(desc) { + console.log("p6scalarfromdesc"); + + if (desc === Null || desc.typeObject_) + desc = defaultContainerDescriptor; + + let defVal = desc.$$getattr(ContainerDescriptor, '$!default'); + + let cont = Scalar._STable.REPR.allocate(Scalar._STable); + + cont.$$bindattr(Scalar, '$!descriptor', desc); + + cont.$$bindattr(Scalar, '$!value', defVal); + + return cont; + +}; + var containerSpecs = require('nqp-runtime/container-specs.js'); function RakudoScalar(STable) {