Skip to content

Commit

Permalink
[js] Implement nqp::p6scalarfromdesc.
Browse files Browse the repository at this point in the history
  • Loading branch information
pmurias committed Dec 19, 2016
1 parent b52586b commit 19dd959
Showing 1 changed file with 32 additions and 1 deletion.
33 changes: 32 additions & 1 deletion src/vm/js/perl6-runtime/runtime.js
Expand Up @@ -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');
Expand All @@ -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', "<element>");
defaultContainerDescriptor.$$bindattr_i(ContainerDescriptor, '$!rw', 1);
defaultContainerDescriptor.$$bindattr(ContainerDescriptor, '$!default', Any);

return types;
};

Expand Down Expand Up @@ -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) {
Expand Down

0 comments on commit 19dd959

Please sign in to comment.