UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

141 lines (139 loc) 6.06 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.GenericLogSerializeHelper = void 0; const constants_1 = require("../../constants"); const Helper_1 = require("../Helper"); const serialize_1 = require("./serialize"); class GenericLogSerializeHelper extends Helper_1.Helper { constructor() { super(...arguments); this.needsGlobal = true; } emitGlobal(sb, node, optionsIn) { const options = sb.pushValueOptions(optionsIn); const doNothing = () => { }; const throwTypeError = (innerOptions) => { sb.emitOp(node, 'DROP'); sb.emitHelper(node, innerOptions, sb.helpers.throwTypeError); }; const handleArray = (innerOptions) => { sb.emitHelper(node, innerOptions, sb.helpers.unwrapArray); sb.emitHelper(node, innerOptions, sb.helpers.arrMap({ map: (innerInnerOptions) => { serialize_1.invokeLogSerialize(sb, node, innerInnerOptions); }, })); sb.emitHelper(node, innerOptions, sb.helpers.wrapArray); }; const handleMap = (innerOptions) => { sb.emitHelper(node, innerOptions, sb.helpers.unwrapMap); sb.emitPushInt(node, 0); sb.emitOp(node, 'NEWARRAY'); sb.emitHelper(node, innerOptions, sb.helpers.mapReduce({ deserializeKey: true, each: (innerInnerOptions) => { sb.emitOp(node, 'ROT'); serialize_1.invokeLogSerialize(sb, node, innerInnerOptions); sb.emitOp(node, 'ROT'); serialize_1.invokeLogSerialize(sb, node, innerInnerOptions); sb.emitPushInt(node, 2); sb.emitOp(node, 'PACK'); sb.emitOp(node, 'OVER'); sb.emitOp(node, 'SWAP'); sb.emitOp(node, 'APPEND'); }, })); sb.emitHelper(node, innerOptions, sb.helpers.wrapMap); }; const handleSet = (innerOptions) => { sb.emitHelper(node, innerOptions, sb.helpers.unwrapSet); sb.emitPushInt(node, 0); sb.emitOp(node, 'NEWARRAY'); sb.emitHelper(node, innerOptions, sb.helpers.mapReduce({ deserializeKey: true, each: (innerInnerOptions) => { sb.emitOp(node, 'ROT'); sb.emitOp(node, 'DROP'); sb.emitOp(node, 'TUCK'); sb.emitOp(node, 'SWAP'); serialize_1.invokeLogSerialize(sb, node, innerInnerOptions); sb.emitOp(node, 'APPEND'); }, })); sb.emitHelper(node, innerOptions, sb.helpers.wrapSet); }; const handleObject = (innerOptions) => { sb.emitOp(node, 'DUP'); sb.emitHelper(node, innerOptions, sb.helpers.getPropertyObjectValues); sb.emitHelper(node, innerOptions, sb.helpers.arrMap({ map: (innerInnerOptions) => { serialize_1.invokeLogSerialize(sb, node, innerInnerOptions); }, })); sb.emitOp(node, 'SWAP'); sb.emitHelper(node, innerOptions, sb.helpers.getPropertyObjectKeys); sb.emitHelper(node, innerOptions, sb.helpers.arrMap({ map: (innerInnerOptions) => { sb.emitHelper(node, innerInnerOptions, sb.helpers.wrapString); }, })); sb.emitPushInt(node, 2); sb.emitOp(node, 'PACK'); sb.emitHelper(node, innerOptions, sb.helpers.wrapObject); }; sb.emitPushInt(node, constants_1.GlobalProperty.GenericLogSerialize); sb.emitHelper(node, options, sb.helpers.createFunctionArray({ body: (innerOptionsIn) => { const innerOptions = sb.pushValueOptions(innerOptionsIn); sb.emitPushInt(node, 0); sb.emitOp(node, 'PICKITEM'); sb.emitHelper(node, innerOptions, sb.helpers.forBuiltinType({ type: undefined, array: handleArray, arrayStorage: throwTypeError, boolean: doNothing, buffer: doNothing, null: doNothing, number: doNothing, object: handleObject, string: doNothing, symbol: doNothing, undefined: doNothing, map: handleMap, mapStorage: throwTypeError, set: handleSet, setStorage: throwTypeError, error: throwTypeError, forwardValue: throwTypeError, iteratorResult: throwTypeError, iterable: throwTypeError, iterableIterator: throwTypeError, transaction: throwTypeError, output: throwTypeError, attribute: throwTypeError, input: throwTypeError, account: throwTypeError, asset: throwTypeError, contract: throwTypeError, header: throwTypeError, block: throwTypeError, })); sb.emitHelper(node, innerOptions, sb.helpers.return); }, })); sb.emitHelper(node, options, sb.helpers.createFunctionObject({ property: constants_1.InternalObjectProperty.Call, })); sb.emitOp(node, 'SETITEM'); } emit(sb, node, options) { if (!options.pushValue) { sb.emitOp(node, 'DROP'); return; } serialize_1.invokeLogSerialize(sb, node, options); } } exports.GenericLogSerializeHelper = GenericLogSerializeHelper; //# sourceMappingURL=GenericLogSerializeHelper.js.map