UNPKG

clvm_tools

Version:

Javascript implementation of clvm_tools

67 lines (66 loc) 2.61 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.run_program = exports.RunProgram = exports.brun = exports.run = exports.BINDINGS = exports.do_binding = exports.make_bindings = exports.make_invocation = void 0; const clvm_1 = require("clvm"); const stage_0_1 = require("./stage_0"); const binutils = require("../clvm_tools/binutils"); function make_invocation(code) { return function invoke(args) { return exports.run_program(code, args); }; } exports.make_invocation = make_invocation; function make_bindings(bindings_sexp) { const binding_table = {}; for (const pair of bindings_sexp.as_iter()) { const name = pair.first().atom; binding_table[name.hex()] = make_invocation(pair.rest().first()); } return binding_table; } exports.make_bindings = make_bindings; function do_binding(args) { if (args.as_javascript().length !== 3) { const errMsg = "bind requires 3 arguments"; // printError(`SyntaxError: ${errMsg}`); throw new SyntaxError(errMsg); } const bindings = args.first(); const sexp = args.rest().first(); const env = args.rest().rest().first(); const new_bindings = make_bindings(bindings); const original_operator_lookup = exports.run_program.operator_lookup; exports.run_program.operator_lookup = clvm_1.OperatorDict(original_operator_lookup); merge(exports.run_program.operator_lookup, new_bindings); const [cost, r] = exports.run_program(sexp, env); exports.run_program.operator_lookup = original_operator_lookup; return clvm_1.t(cost, r); } exports.do_binding = do_binding; exports.BINDINGS = { bind: do_binding, }; exports.run = binutils.assemble("(a 2 3)"); exports.brun = exports.run; function merge(obj1, obj2) { Object.keys(obj2).forEach(key => { obj1[key] = obj2[key]; }); } function RunProgram() { const operator_lookup = clvm_1.OperatorDict(clvm_1.OPERATOR_LOOKUP); const bindings_obj = {}; Object.entries(exports.BINDINGS).forEach(([key, val]) => { const bin_name = clvm_1.b(key).hex(); // bind: 61696e64 bindings_obj[bin_name] = val; }); merge(operator_lookup, bindings_obj); const f = function (program, args, option) { const option2 = option ? Object.assign(Object.assign({}, option), { operator_lookup: f.operator_lookup }) : { operator_lookup: f.operator_lookup }; return stage_0_1.run_program(program, args, option2); }; f.operator_lookup = operator_lookup; return f; } exports.RunProgram = RunProgram; exports.run_program = RunProgram();