UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

82 lines (80 loc) 12.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const ts_utils_1 = require("@neo-one/ts-utils"); const constants_1 = require("../../constants"); const BuiltinMemberCall_1 = require("../BuiltinMemberCall"); class ObjectKeys extends BuiltinMemberCall_1.BuiltinMemberCall { emitCall(sb, _func, node, optionsIn) { if (ts_utils_1.tsUtils.argumented.getArguments(node).length < 1) { return; } const options = sb.pushValueOptions(optionsIn); const arg = ts_utils_1.tsUtils.argumented.getArguments(node)[0]; const processArray = (innerOptions) => { sb.emitHelper(node, innerOptions, sb.helpers.unwrapArray); sb.emitOp(node, 'ARRAYSIZE'); sb.emitHelper(node, innerOptions, sb.helpers.arrRange({ map: (innerInnerOptions) => { sb.emitHelper(node, innerInnerOptions, sb.helpers.wrapNumber); sb.emitHelper(node, innerInnerOptions, sb.helpers.toString({ type: undefined, knownType: constants_1.Types.Number })); sb.emitHelper(node, innerInnerOptions, sb.helpers.wrapString); }, })); sb.emitHelper(node, innerOptions, sb.helpers.wrapArray); }; const emptyArray = (innerOptions) => { sb.emitOp(node, 'DROP'); sb.emitHelper(node, innerOptions, sb.helpers.createArray); }; const throwTypeError = (innerOptions) => { sb.emitOp(node, 'DROP'); sb.emitHelper(node, innerOptions, sb.helpers.throwTypeError); }; const processObject = (innerOptions) => { sb.emitHelper(node, innerOptions, sb.helpers.getPropertyObjectKeys); sb.emitHelper(node, innerOptions, sb.helpers.arrMap({ map: (innerInnerOptions) => { sb.emitHelper(node, innerInnerOptions, sb.helpers.wrapString); }, })); sb.emitHelper(node, innerOptions, sb.helpers.wrapArray); }; sb.visit(arg, options); sb.emitHelper(node, options, sb.helpers.forBuiltinType({ type: sb.context.analysis.getType(arg), array: processArray, arrayStorage: emptyArray, boolean: emptyArray, buffer: emptyArray, null: throwTypeError, number: emptyArray, object: processObject, string: emptyArray, symbol: emptyArray, undefined: throwTypeError, map: emptyArray, mapStorage: emptyArray, set: emptyArray, setStorage: emptyArray, error: emptyArray, forwardValue: emptyArray, iteratorResult: emptyArray, iterable: emptyArray, iterableIterator: emptyArray, transaction: emptyArray, output: emptyArray, attribute: emptyArray, input: emptyArray, account: emptyArray, asset: emptyArray, contract: emptyArray, header: emptyArray, block: emptyArray, })); if (!optionsIn.pushValue) { sb.emitOp(node, 'DROP'); } } } exports.ObjectKeys = ObjectKeys; //# sourceMappingURL=data:application/json;charset=utf8;base64,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akIsUUFBUSxFQUFFLFVBQVU7WUFDcEIsTUFBTSxFQUFFLFVBQVU7WUFDbEIsS0FBSyxFQUFFLFVBQVU7U0FDbEIsQ0FBQyxDQUNILENBQUM7UUFFRixJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRTtZQUN4QixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztTQUN6QjtJQUNILENBQUM7Q0FDRjtBQTdHRCxnQ0E2R0MiLCJmaWxlIjoibmVvLW9uZS1zbWFydC1jb250cmFjdC1jb21waWxlci9zcmMvY29tcGlsZS9idWlsdGlucy9vYmplY3Qva2V5cy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHRzVXRpbHMgfSBmcm9tICdAbmVvLW9uZS90cy11dGlscyc7XG5pbXBvcnQgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5pbXBvcnQgeyBUeXBlcyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBTY3JpcHRCdWlsZGVyIH0gZnJvbSAnLi4vLi4vc2InO1xuaW1wb3J0IHsgVmlzaXRPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgQnVpbHRpbk1lbWJlckNhbGwgfSBmcm9tICcuLi9CdWlsdGluTWVtYmVyQ2FsbCc7XG5pbXBvcnQgeyBNZW1iZXJMaWtlRXhwcmVzc2lvbiB9IGZyb20gJy4uL3R5cGVzJztcblxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lIGV4cG9ydC1uYW1lXG5leHBvcnQgY2xhc3MgT2JqZWN0S2V5cyBleHRlbmRzIEJ1aWx0aW5NZW1iZXJDYWxsIHtcbiAgcHVibGljIGVtaXRDYWxsKFxuICAgIHNiOiBTY3JpcHRCdWlsZGVyLFxuICAgIF9mdW5jOiBNZW1iZXJMaWtlRXhwcmVzc2lvbixcbiAgICBub2RlOiB0cy5DYWxsRXhwcmVzc2lvbixcbiAgICBvcHRpb25zSW46IFZpc2l0T3B0aW9ucyxcbiAgKTogdm9pZCB7XG4gICAgaWYgKHRzVXRpbHMuYXJndW1lbnRlZC5nZXRBcmd1bWVudHMobm9kZSkubGVuZ3RoIDwgMSkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBvcHRpb25zID0gc2IucHVzaFZhbHVlT3B0aW9ucyhvcHRpb25zSW4pO1xuICAgIGNvbnN0IGFyZyA9IHRzVXRpbHMuYXJndW1lbnRlZC5nZXRBcmd1bWVudHMobm9kZSlbMF07XG5cbiAgICBjb25zdCBwcm9jZXNzQXJyYXkgPSAoaW5uZXJPcHRpb25zOiBWaXNpdE9wdGlvbnMpID0+IHtcbiAgICAgIC8vIFthcnJdXG4gICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIGlubmVyT3B0aW9ucywgc2IuaGVscGVycy51bndyYXBBcnJheSk7XG4gICAgICAvLyBbbnVtYmVyXVxuICAgICAgc2IuZW1pdE9wKG5vZGUsICdBUlJBWVNJWkUnKTtcbiAgICAgIC8vIFthcnJdXG4gICAgICBzYi5lbWl0SGVscGVyKFxuICAgICAgICBub2RlLFxuICAgICAgICBpbm5lck9wdGlvbnMsXG4gICAgICAgIHNiLmhlbHBlcnMuYXJyUmFuZ2Uoe1xuICAgICAgICAgIG1hcDogKGlubmVySW5uZXJPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIGlubmVySW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLndyYXBOdW1iZXIpO1xuICAgICAgICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBpbm5lcklubmVyT3B0aW9ucywgc2IuaGVscGVycy50b1N0cmluZyh7IHR5cGU6IHVuZGVmaW5lZCwga25vd25UeXBlOiBUeXBlcy5OdW1iZXIgfSkpO1xuICAgICAgICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBpbm5lcklubmVyT3B0aW9ucywgc2IuaGVscGVycy53cmFwU3RyaW5nKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgICAvLyBbYXJyYXlWYWxdXG4gICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIGlubmVyT3B0aW9ucywgc2IuaGVscGVycy53cmFwQXJyYXkpO1xuICAgIH07XG5cbiAgICBjb25zdCBlbXB0eUFycmF5ID0gKGlubmVyT3B0aW9uczogVmlzaXRPcHRpb25zKSA9PiB7XG4gICAgICAvLyBbXVxuICAgICAgc2IuZW1pdE9wKG5vZGUsICdEUk9QJyk7XG4gICAgICAvLyBbYXJyYXlWYWxdXG4gICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIGlubmVyT3B0aW9ucywgc2IuaGVscGVycy5jcmVhdGVBcnJheSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHRocm93VHlwZUVycm9yID0gKGlubmVyT3B0aW9uczogVmlzaXRPcHRpb25zKSA9PiB7XG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgaW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLnRocm93VHlwZUVycm9yKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcHJvY2Vzc09iamVjdCA9IChpbm5lck9wdGlvbnM6IFZpc2l0T3B0aW9ucykgPT4ge1xuICAgICAgLy8gW2Fycl1cbiAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgaW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLmdldFByb3BlcnR5T2JqZWN0S2V5cyk7XG4gICAgICAvLyBbYXJyXVxuICAgICAgc2IuZW1pdEhlbHBlcihcbiAgICAgICAgbm9kZSxcbiAgICAgICAgaW5uZXJPcHRpb25zLFxuICAgICAgICBzYi5oZWxwZXJzLmFyck1hcCh7XG4gICAgICAgICAgbWFwOiAoaW5uZXJJbm5lck9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIC8vIFt2YWxdXG4gICAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIGlubmVySW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLndyYXBTdHJpbmcpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICAgIC8vIFthcnJheVZhbF1cbiAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgaW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLndyYXBBcnJheSk7XG4gICAgfTtcblxuICAgIC8vIFt2YWxdXG4gICAgc2IudmlzaXQoYXJnLCBvcHRpb25zKTtcbiAgICAvLyBbb2JqZWN0VmFsXVxuICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICBub2RlLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHNiLmhlbHBlcnMuZm9yQnVpbHRpblR5cGUoe1xuICAgICAgICB0eXBlOiBzYi5jb250ZXh0LmFuYWx5c2lzLmdldFR5cGUoYXJnKSxcbiAgICAgICAgYXJyYXk6IHByb2Nlc3NBcnJheSxcbiAgICAgICAgYXJyYXlTdG9yYWdlOiBlbXB0eUFycmF5LFxuICAgICAgICBib29sZWFuOiBlbXB0eUFycmF5LFxuICAgICAgICBidWZmZXI6IGVtcHR5QXJyYXksXG4gICAgICAgIG51bGw6IHRocm93VHlwZUVycm9yLFxuICAgICAgICBudW1iZXI6IGVtcHR5QXJyYXksXG4gICAgICAgIG9iamVjdDogcHJvY2Vzc09iamVjdCxcbiAgICAgICAgc3RyaW5nOiBlbXB0eUFycmF5LFxuICAgICAgICBzeW1ib2w6IGVtcHR5QXJyYXksXG4gICAgICAgIHVuZGVmaW5lZDogdGhyb3dUeXBlRXJyb3IsXG4gICAgICAgIG1hcDogZW1wdHlBcnJheSxcbiAgICAgICAgbWFwU3RvcmFnZTogZW1wdHlBcnJheSxcbiAgICAgICAgc2V0OiBlbXB0eUFycmF5LFxuICAgICAgICBzZXRTdG9yYWdlOiBlbXB0eUFycmF5LFxuICAgICAgICBlcnJvcjogZW1wdHlBcnJheSxcbiAgICAgICAgZm9yd2FyZFZhbHVlOiBlbXB0eUFycmF5LFxuICAgICAgICBpdGVyYXRvclJlc3VsdDogZW1wdHlBcnJheSxcbiAgICAgICAgaXRlcmFibGU6IGVtcHR5QXJyYXksXG4gICAgICAgIGl0ZXJhYmxlSXRlcmF0b3I6IGVtcHR5QXJyYXksXG4gICAgICAgIHRyYW5zYWN0aW9uOiBlbXB0eUFycmF5LFxuICAgICAgICBvdXRwdXQ6IGVtcHR5QXJyYXksXG4gICAgICAgIGF0dHJpYnV0ZTogZW1wdHlBcnJheSxcbiAgICAgICAgaW5wdXQ6IGVtcHR5QXJyYXksXG4gICAgICAgIGFjY291bnQ6IGVtcHR5QXJyYXksXG4gICAgICAgIGFzc2V0OiBlbXB0eUFycmF5LFxuICAgICAgICBjb250cmFjdDogZW1wdHlBcnJheSxcbiAgICAgICAgaGVhZGVyOiBlbXB0eUFycmF5LFxuICAgICAgICBibG9jazogZW1wdHlBcnJheSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBpZiAoIW9wdGlvbnNJbi5wdXNoVmFsdWUpIHtcbiAgICAgIHNiLmVtaXRPcChub2RlLCAnRFJPUCcpO1xuICAgIH1cbiAgfVxufVxuIl19