UNPKG

clvm

Version:

Javascript implementation of chia lisp

53 lines (52 loc) 1.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.as_javascript = void 0; const __type_compatibility__1 = require("./__type_compatibility__"); function as_javascript(sexp) { function _roll(op_stack, val_stack) { const v1 = val_stack.pop(); const v2 = val_stack.pop(); val_stack.push(v1); val_stack.push(v2); } function _make_tuple(op_stack, val_stack) { const left = val_stack.pop(); const right = val_stack.pop(); if ((0, __type_compatibility__1.isBytes)(right) && right.equal_to(__type_compatibility__1.Bytes.NULL)) { val_stack.push([left]); } else if ((0, __type_compatibility__1.isList)(right)) { const v = [left].concat(right); val_stack.push(v); } else { val_stack.push((0, __type_compatibility__1.t)(left, right)); } } function _as_javascript(op_stack, val_stack) { const v = val_stack.pop(); const pair = v.as_pair(); if (pair) { const [left, right] = pair; op_stack.push(_make_tuple); op_stack.push(_as_javascript); op_stack.push(_roll); op_stack.push(_as_javascript); val_stack.push(left); val_stack.push(right); } else { val_stack.push(v.atom); } } const op_stack = [_as_javascript]; const val_stack = [sexp]; while (op_stack.length) { const op_f = op_stack.pop(); if (op_f) { op_f(op_stack, val_stack); } } return val_stack[val_stack.length - 1]; } exports.as_javascript = as_javascript;