@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
77 lines (75 loc) • 10.9 kB
JavaScript
;
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