UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

77 lines (75 loc) 10.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const ts_utils_1 = require("@neo-one/ts-utils"); const BuiltinInterface_1 = require("../BuiltinInterface"); const BuiltinNew_1 = require("../BuiltinNew"); const delete_1 = require("../map/delete"); const has_1 = require("../map/has"); const size_1 = require("../map/size"); const add_1 = require("./add"); const forEach_1 = require("./forEach"); const iterator_1 = require("./iterator"); class SetInterface extends BuiltinInterface_1.BuiltinInterface { } class ReadonlySetInterface extends BuiltinInterface_1.BuiltinInterface { } class SetValue extends BuiltinNew_1.BuiltinNew { constructor() { super(...arguments); this.type = 'SetConstructor'; } emitInstanceOf(sb, node, optionsIn) { const options = sb.pushValueOptions(optionsIn); sb.visit(node, options); if (optionsIn.pushValue) { sb.emitHelper(node, options, sb.helpers.isSet); sb.emitHelper(node, options, sb.helpers.wrapBoolean); } else { sb.emitOp(node, 'DROP'); } } emitNew(sb, node, optionsIn) { const options = sb.pushValueOptions(optionsIn); const args = ts_utils_1.tsUtils.argumented.getArgumentsArray(node); sb.emitOp(node, 'NEWMAP'); if (args.length > 0) { sb.visit(args[0], options); sb.emitHelper(node, options, sb.helpers.unwrapArray); sb.emitOp(node, 'SWAP'); sb.emitHelper(node, options, sb.helpers.arrReduce({ each: () => { sb.emitOp(node, 'TUCK'); sb.emitOp(node, 'SWAP'); sb.emitPushBoolean(node, true); sb.emitOp(node, 'SETITEM'); }, })); } sb.emitHelper(node, options, sb.helpers.wrapSet); if (!optionsIn.pushValue) { sb.emitOp(node, 'DROP'); } } } class SetConstructorInterface extends BuiltinInterface_1.BuiltinInterface { } const COMMON = [ ['__@iterator', new iterator_1.SetIterator()], ['forEach', new forEach_1.SetForEach()], ['has', new has_1.MapHas()], ['size', new size_1.MapSize()], ]; exports.add = (builtins) => { builtins.addInterface('Set', new SetInterface()); builtins.addInterface('ReadonlySet', new ReadonlySetInterface()); builtins.addValue('Set', new SetValue()); COMMON.forEach(([name, builtin]) => { builtins.addGlobalMember('Set', name, builtin); builtins.addGlobalMember('ReadonlySet', name, builtin); }); builtins.addGlobalMember('Set', 'delete', new delete_1.MapDelete()); builtins.addGlobalMember('Set', 'add', new add_1.SetAdd()); builtins.addInterface('SetConstructor', new SetConstructorInterface()); }; //# sourceMappingURL=data:application/json;charset=utf8;base64,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QUFDLGFBQWEsRUFBRSxJQUFJLHNCQUFXLEVBQUUsQ0FBVTtJQUMzQyxDQUFDLFNBQVMsRUFBRSxJQUFJLG9CQUFVLEVBQUUsQ0FBVTtJQUN0QyxDQUFDLEtBQUssRUFBRSxJQUFJLFlBQU0sRUFBRSxDQUFVO0lBQzlCLENBQUMsTUFBTSxFQUFFLElBQUksY0FBTyxFQUFFLENBQVU7Q0FDakMsQ0FBQztBQUdXLFFBQUEsR0FBRyxHQUFHLENBQUMsUUFBa0IsRUFBUSxFQUFFO0lBQzlDLFFBQVEsQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLElBQUksWUFBWSxFQUFFLENBQUMsQ0FBQztJQUNqRCxRQUFRLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxJQUFJLG9CQUFvQixFQUFFLENBQUMsQ0FBQztJQUNqRSxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDekMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUU7UUFDakMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQy9DLFFBQVEsQ0FBQyxlQUFlLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN6RCxDQUFDLENBQUMsQ0FBQztJQUNILFFBQVEsQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLGtCQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQzNELFFBQVEsQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLFlBQU0sRUFBRSxDQUFDLENBQUM7SUFDckQsUUFBUSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLHVCQUF1QixFQUFFLENBQUMsQ0FBQztBQUN6RSxDQUFDLENBQUMiLCJmaWxlIjoibmVvLW9uZS1zbWFydC1jb250cmFjdC1jb21waWxlci9zcmMvY29tcGlsZS9idWlsdGlucy9zZXQvaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0c1V0aWxzIH0gZnJvbSAnQG5lby1vbmUvdHMtdXRpbHMnO1xuaW1wb3J0IHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuaW1wb3J0IHsgU2NyaXB0QnVpbGRlciB9IGZyb20gJy4uLy4uL3NiJztcbmltcG9ydCB7IFZpc2l0T3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEJ1aWx0aW5JbnRlcmZhY2UgfSBmcm9tICcuLi9CdWlsdGluSW50ZXJmYWNlJztcbmltcG9ydCB7IEJ1aWx0aW5OZXcgfSBmcm9tICcuLi9CdWlsdGluTmV3JztcbmltcG9ydCB7IEJ1aWx0aW5zIH0gZnJvbSAnLi4vQnVpbHRpbnMnO1xuaW1wb3J0IHsgTWFwRGVsZXRlIH0gZnJvbSAnLi4vbWFwL2RlbGV0ZSc7XG5pbXBvcnQgeyBNYXBIYXMgfSBmcm9tICcuLi9tYXAvaGFzJztcbmltcG9ydCB7IE1hcFNpemUgfSBmcm9tICcuLi9tYXAvc2l6ZSc7XG5pbXBvcnQgeyBCdWlsdGluIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgU2V0QWRkIH0gZnJvbSAnLi9hZGQnO1xuaW1wb3J0IHsgU2V0Rm9yRWFjaCB9IGZyb20gJy4vZm9yRWFjaCc7XG5pbXBvcnQgeyBTZXRJdGVyYXRvciB9IGZyb20gJy4vaXRlcmF0b3InO1xuXG5jbGFzcyBTZXRJbnRlcmZhY2UgZXh0ZW5kcyBCdWlsdGluSW50ZXJmYWNlIHt9XG5jbGFzcyBSZWFkb25seVNldEludGVyZmFjZSBleHRlbmRzIEJ1aWx0aW5JbnRlcmZhY2Uge31cbmNsYXNzIFNldFZhbHVlIGV4dGVuZHMgQnVpbHRpbk5ldyB7XG4gIHB1YmxpYyByZWFkb25seSB0eXBlID0gJ1NldENvbnN0cnVjdG9yJztcblxuICBwdWJsaWMgZW1pdEluc3RhbmNlT2Yoc2I6IFNjcmlwdEJ1aWxkZXIsIG5vZGU6IHRzLkV4cHJlc3Npb24sIG9wdGlvbnNJbjogVmlzaXRPcHRpb25zKTogdm9pZCB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHNiLnB1c2hWYWx1ZU9wdGlvbnMob3B0aW9uc0luKTtcbiAgICAvLyBbdmFsXVxuICAgIHNiLnZpc2l0KG5vZGUsIG9wdGlvbnMpO1xuICAgIGlmIChvcHRpb25zSW4ucHVzaFZhbHVlKSB7XG4gICAgICAvLyBbYm9vbGVhbl1cbiAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgb3B0aW9ucywgc2IuaGVscGVycy5pc1NldCk7XG4gICAgICAvLyBbdmFsXVxuICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBvcHRpb25zLCBzYi5oZWxwZXJzLndyYXBCb29sZWFuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gW11cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZW1pdE5ldyhzYjogU2NyaXB0QnVpbGRlciwgbm9kZTogdHMuTmV3RXhwcmVzc2lvbiwgb3B0aW9uc0luOiBWaXNpdE9wdGlvbnMpOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID0gc2IucHVzaFZhbHVlT3B0aW9ucyhvcHRpb25zSW4pO1xuICAgIGNvbnN0IGFyZ3MgPSB0c1V0aWxzLmFyZ3VtZW50ZWQuZ2V0QXJndW1lbnRzQXJyYXkobm9kZSk7XG5cbiAgICAvLyBbbWFwXVxuICAgIHNiLmVtaXRPcChub2RlLCAnTkVXTUFQJyk7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID4gMCkge1xuICAgICAgLy8gW3ZhbCwgbWFwXVxuICAgICAgc2IudmlzaXQoYXJnc1swXSwgb3B0aW9ucyk7XG4gICAgICAvLyBbYXJyLCBtYXBdXG4gICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnMsIHNiLmhlbHBlcnMudW53cmFwQXJyYXkpO1xuICAgICAgLy8gW21hcCwgYXJyXVxuICAgICAgc2IuZW1pdE9wKG5vZGUsICdTV0FQJyk7XG4gICAgICAvLyBbbWFwXVxuICAgICAgc2IuZW1pdEhlbHBlcihcbiAgICAgICAgbm9kZSxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgc2IuaGVscGVycy5hcnJSZWR1Y2Uoe1xuICAgICAgICAgIGVhY2g6ICgpID0+IHtcbiAgICAgICAgICAgIC8vIFttYXAsIHZhbCwgbWFwXVxuICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdUVUNLJyk7XG4gICAgICAgICAgICAvLyBbdmFsLCBtYXAsIG1hcF1cbiAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnU1dBUCcpO1xuICAgICAgICAgICAgLy8gW2Jvb2xlYW4sIHZhbCwgbWFwLCBtYXBdXG4gICAgICAgICAgICBzYi5lbWl0UHVzaEJvb2xlYW4obm9kZSwgdHJ1ZSk7XG4gICAgICAgICAgICAvLyBbbWFwXVxuICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdTRVRJVEVNJyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cbiAgICAvLyBbdmFsXVxuICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgb3B0aW9ucywgc2IuaGVscGVycy53cmFwU2V0KTtcblxuICAgIGlmICghb3B0aW9uc0luLnB1c2hWYWx1ZSkge1xuICAgICAgLy8gW11cbiAgICAgIHNiLmVtaXRPcChub2RlLCAnRFJPUCcpO1xuICAgIH1cbiAgfVxufVxuY2xhc3MgU2V0Q29uc3RydWN0b3JJbnRlcmZhY2UgZXh0ZW5kcyBCdWlsdGluSW50ZXJmYWNlIHt9XG5cbmNvbnN0IENPTU1PTjogUmVhZG9ubHlBcnJheTxyZWFkb25seSBbc3RyaW5nLCBCdWlsdGluXT4gPSBbXG4gIFsnX19AaXRlcmF0b3InLCBuZXcgU2V0SXRlcmF0b3IoKV0gYXMgY29uc3QsXG4gIFsnZm9yRWFjaCcsIG5ldyBTZXRGb3JFYWNoKCldIGFzIGNvbnN0LFxuICBbJ2hhcycsIG5ldyBNYXBIYXMoKV0gYXMgY29uc3QsXG4gIFsnc2l6ZScsIG5ldyBNYXBTaXplKCldIGFzIGNvbnN0LFxuXTtcblxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lIGV4cG9ydC1uYW1lXG5leHBvcnQgY29uc3QgYWRkID0gKGJ1aWx0aW5zOiBCdWlsdGlucyk6IHZvaWQgPT4ge1xuICBidWlsdGlucy5hZGRJbnRlcmZhY2UoJ1NldCcsIG5ldyBTZXRJbnRlcmZhY2UoKSk7XG4gIGJ1aWx0aW5zLmFkZEludGVyZmFjZSgnUmVhZG9ubHlTZXQnLCBuZXcgUmVhZG9ubHlTZXRJbnRlcmZhY2UoKSk7XG4gIGJ1aWx0aW5zLmFkZFZhbHVlKCdTZXQnLCBuZXcgU2V0VmFsdWUoKSk7XG4gIENPTU1PTi5mb3JFYWNoKChbbmFtZSwgYnVpbHRpbl0pID0+IHtcbiAgICBidWlsdGlucy5hZGRHbG9iYWxNZW1iZXIoJ1NldCcsIG5hbWUsIGJ1aWx0aW4pO1xuICAgIGJ1aWx0aW5zLmFkZEdsb2JhbE1lbWJlcignUmVhZG9ubHlTZXQnLCBuYW1lLCBidWlsdGluKTtcbiAgfSk7XG4gIGJ1aWx0aW5zLmFkZEdsb2JhbE1lbWJlcignU2V0JywgJ2RlbGV0ZScsIG5ldyBNYXBEZWxldGUoKSk7XG4gIGJ1aWx0aW5zLmFkZEdsb2JhbE1lbWJlcignU2V0JywgJ2FkZCcsIG5ldyBTZXRBZGQoKSk7XG4gIGJ1aWx0aW5zLmFkZEludGVyZmFjZSgnU2V0Q29uc3RydWN0b3InLCBuZXcgU2V0Q29uc3RydWN0b3JJbnRlcmZhY2UoKSk7XG59O1xuIl19