@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
63 lines (61 loc) • 8.18 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const BuiltinInterface_1 = require("../BuiltinInterface");
const BuiltinNew_1 = require("../BuiltinNew");
const delete_1 = require("./delete");
const forEach_1 = require("./forEach");
const get_1 = require("./get");
const has_1 = require("./has");
const iterator_1 = require("./iterator");
const set_1 = require("./set");
const size_1 = require("./size");
class MapInterface extends BuiltinInterface_1.BuiltinInterface {
}
class ReadonlyMapInterface extends BuiltinInterface_1.BuiltinInterface {
}
class MapValue extends BuiltinNew_1.BuiltinNew {
constructor() {
super(...arguments);
this.type = 'MapConstructor';
}
emitInstanceOf(sb, node, optionsIn) {
const options = sb.pushValueOptions(optionsIn);
sb.visit(node, options);
if (optionsIn.pushValue) {
sb.emitHelper(node, options, sb.helpers.isMap);
sb.emitHelper(node, options, sb.helpers.wrapBoolean);
}
else {
sb.emitOp(node, 'DROP');
}
}
emitNew(sb, node, options) {
if (!options.pushValue) {
return;
}
sb.emitOp(node, 'NEWMAP');
sb.emitHelper(node, options, sb.helpers.wrapMap);
}
}
class MapConstructorInterface extends BuiltinInterface_1.BuiltinInterface {
}
const COMMON = [
['__@iterator', new iterator_1.MapIterator()],
['forEach', new forEach_1.MapForEach()],
['get', new get_1.MapGet()],
['has', new has_1.MapHas()],
['size', new size_1.MapSize()],
];
exports.add = (builtins) => {
builtins.addInterface('Map', new MapInterface());
builtins.addInterface('ReadonlyMap', new ReadonlyMapInterface());
builtins.addValue('Map', new MapValue());
COMMON.forEach(([name, builtin]) => {
builtins.addGlobalMember('Map', name, builtin);
builtins.addGlobalMember('ReadonlyMap', name, builtin);
});
builtins.addGlobalMember('Map', 'delete', new delete_1.MapDelete());
builtins.addGlobalMember('Map', 'set', new set_1.MapSet());
builtins.addInterface('MapConstructor', new MapConstructorInterface());
};
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBR0EsMERBQXVEO0FBQ3ZELDhDQUEyQztBQUczQyxxQ0FBcUM7QUFDckMsdUNBQXVDO0FBQ3ZDLCtCQUErQjtBQUMvQiwrQkFBK0I7QUFDL0IseUNBQXlDO0FBQ3pDLCtCQUErQjtBQUMvQixpQ0FBaUM7QUFFakMsTUFBTSxZQUFhLFNBQVEsbUNBQWdCO0NBQUc7QUFDOUMsTUFBTSxvQkFBcUIsU0FBUSxtQ0FBZ0I7Q0FBRztBQUN0RCxNQUFNLFFBQVMsU0FBUSx1QkFBVTtJQUFqQzs7UUFDa0IsU0FBSSxHQUFHLGdCQUFnQixDQUFDO0lBNEIxQyxDQUFDO0lBMUJRLGNBQWMsQ0FBQyxFQUFpQixFQUFFLElBQW1CLEVBQUUsU0FBdUI7UUFDbkYsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRS9DLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3hCLElBQUksU0FBUyxDQUFDLFNBQVMsRUFBRTtZQUV2QixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUUvQyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUN0RDthQUFNO1lBR0wsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDekI7SUFDSCxDQUFDO0lBRU0sT0FBTyxDQUFDLEVBQWlCLEVBQUUsSUFBc0IsRUFBRSxPQUFxQjtRQUM3RSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRTtZQUN0QixPQUFPO1NBQ1I7UUFHRCxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUUxQixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuRCxDQUFDO0NBQ0Y7QUFDRCxNQUFNLHVCQUF3QixTQUFRLG1DQUFnQjtDQUFHO0FBRXpELE1BQU0sTUFBTSxHQUE4QztJQUN4RCxDQUFDLGFBQWEsRUFBRSxJQUFJLHNCQUFXLEVBQUUsQ0FBVTtJQUMzQyxDQUFDLFNBQVMsRUFBRSxJQUFJLG9CQUFVLEVBQUUsQ0FBVTtJQUN0QyxDQUFDLEtBQUssRUFBRSxJQUFJLFlBQU0sRUFBRSxDQUFVO0lBQzlCLENBQUMsS0FBSyxFQUFFLElBQUksWUFBTSxFQUFFLENBQVU7SUFDOUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxjQUFPLEVBQUUsQ0FBVTtDQUNqQyxDQUFDO0FBR1csUUFBQSxHQUFHLEdBQUcsQ0FBQyxRQUFrQixFQUFRLEVBQUU7SUFDOUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxZQUFZLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELFFBQVEsQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLElBQUksb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO0lBQ2pFLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksUUFBUSxFQUFFLENBQUMsQ0FBQztJQUN6QyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRTtRQUNqQyxRQUFRLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDL0MsUUFBUSxDQUFDLGVBQWUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3pELENBQUMsQ0FBQyxDQUFDO0lBQ0gsUUFBUSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksa0JBQVMsRUFBRSxDQUFDLENBQUM7SUFDM0QsUUFBUSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksWUFBTSxFQUFFLENBQUMsQ0FBQztJQUNyRCxRQUFRLENBQUMsWUFBWSxDQUFDLGdCQUFnQixFQUFFLElBQUksdUJBQXVCLEVBQUUsQ0FBQyxDQUFDO0FBQ3pFLENBQUMsQ0FBQyIsImZpbGUiOiJuZW8tb25lLXNtYXJ0LWNvbnRyYWN0LWNvbXBpbGVyL3NyYy9jb21waWxlL2J1aWx0aW5zL21hcC9pbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0cyBmcm9tICd0eXBlc2NyaXB0JztcbmltcG9ydCB7IFNjcmlwdEJ1aWxkZXIgfSBmcm9tICcuLi8uLi9zYic7XG5pbXBvcnQgeyBWaXNpdE9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBCdWlsdGluSW50ZXJmYWNlIH0gZnJvbSAnLi4vQnVpbHRpbkludGVyZmFjZSc7XG5pbXBvcnQgeyBCdWlsdGluTmV3IH0gZnJvbSAnLi4vQnVpbHRpbk5ldyc7XG5pbXBvcnQgeyBCdWlsdGlucyB9IGZyb20gJy4uL0J1aWx0aW5zJztcbmltcG9ydCB7IEJ1aWx0aW4gfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBNYXBEZWxldGUgfSBmcm9tICcuL2RlbGV0ZSc7XG5pbXBvcnQgeyBNYXBGb3JFYWNoIH0gZnJvbSAnLi9mb3JFYWNoJztcbmltcG9ydCB7IE1hcEdldCB9IGZyb20gJy4vZ2V0JztcbmltcG9ydCB7IE1hcEhhcyB9IGZyb20gJy4vaGFzJztcbmltcG9ydCB7IE1hcEl0ZXJhdG9yIH0gZnJvbSAnLi9pdGVyYXRvcic7XG5pbXBvcnQgeyBNYXBTZXQgfSBmcm9tICcuL3NldCc7XG5pbXBvcnQgeyBNYXBTaXplIH0gZnJvbSAnLi9zaXplJztcblxuY2xhc3MgTWFwSW50ZXJmYWNlIGV4dGVuZHMgQnVpbHRpbkludGVyZmFjZSB7fVxuY2xhc3MgUmVhZG9ubHlNYXBJbnRlcmZhY2UgZXh0ZW5kcyBCdWlsdGluSW50ZXJmYWNlIHt9XG5jbGFzcyBNYXBWYWx1ZSBleHRlbmRzIEJ1aWx0aW5OZXcge1xuICBwdWJsaWMgcmVhZG9ubHkgdHlwZSA9ICdNYXBDb25zdHJ1Y3Rvcic7XG5cbiAgcHVibGljIGVtaXRJbnN0YW5jZU9mKHNiOiBTY3JpcHRCdWlsZGVyLCBub2RlOiB0cy5FeHByZXNzaW9uLCBvcHRpb25zSW46IFZpc2l0T3B0aW9ucyk6IHZvaWQge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBzYi5wdXNoVmFsdWVPcHRpb25zKG9wdGlvbnNJbik7XG4gICAgLy8gW3ZhbF1cbiAgICBzYi52aXNpdChub2RlLCBvcHRpb25zKTtcbiAgICBpZiAob3B0aW9uc0luLnB1c2hWYWx1ZSkge1xuICAgICAgLy8gW2Jvb2xlYW5dXG4gICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnMsIHNiLmhlbHBlcnMuaXNNYXApO1xuICAgICAgLy8gW3ZhbF1cbiAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgb3B0aW9ucywgc2IuaGVscGVycy53cmFwQm9vbGVhbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFtdXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgc2IuZW1pdE9wKG5vZGUsICdEUk9QJyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGVtaXROZXcoc2I6IFNjcmlwdEJ1aWxkZXIsIG5vZGU6IHRzLk5ld0V4cHJlc3Npb24sIG9wdGlvbnM6IFZpc2l0T3B0aW9ucyk6IHZvaWQge1xuICAgIGlmICghb3B0aW9ucy5wdXNoVmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBbbWFwXVxuICAgIHNiLmVtaXRPcChub2RlLCAnTkVXTUFQJyk7XG4gICAgLy8gW3ZhbF1cbiAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnMsIHNiLmhlbHBlcnMud3JhcE1hcCk7XG4gIH1cbn1cbmNsYXNzIE1hcENvbnN0cnVjdG9ySW50ZXJmYWNlIGV4dGVuZHMgQnVpbHRpbkludGVyZmFjZSB7fVxuXG5jb25zdCBDT01NT046IFJlYWRvbmx5QXJyYXk8cmVhZG9ubHkgW3N0cmluZywgQnVpbHRpbl0+ID0gW1xuICBbJ19fQGl0ZXJhdG9yJywgbmV3IE1hcEl0ZXJhdG9yKCldIGFzIGNvbnN0LFxuICBbJ2ZvckVhY2gnLCBuZXcgTWFwRm9yRWFjaCgpXSBhcyBjb25zdCxcbiAgWydnZXQnLCBuZXcgTWFwR2V0KCldIGFzIGNvbnN0LFxuICBbJ2hhcycsIG5ldyBNYXBIYXMoKV0gYXMgY29uc3QsXG4gIFsnc2l6ZScsIG5ldyBNYXBTaXplKCldIGFzIGNvbnN0LFxuXTtcblxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lIGV4cG9ydC1uYW1lXG5leHBvcnQgY29uc3QgYWRkID0gKGJ1aWx0aW5zOiBCdWlsdGlucyk6IHZvaWQgPT4ge1xuICBidWlsdGlucy5hZGRJbnRlcmZhY2UoJ01hcCcsIG5ldyBNYXBJbnRlcmZhY2UoKSk7XG4gIGJ1aWx0aW5zLmFkZEludGVyZmFjZSgnUmVhZG9ubHlNYXAnLCBuZXcgUmVhZG9ubHlNYXBJbnRlcmZhY2UoKSk7XG4gIGJ1aWx0aW5zLmFkZFZhbHVlKCdNYXAnLCBuZXcgTWFwVmFsdWUoKSk7XG4gIENPTU1PTi5mb3JFYWNoKChbbmFtZSwgYnVpbHRpbl0pID0+IHtcbiAgICBidWlsdGlucy5hZGRHbG9iYWxNZW1iZXIoJ01hcCcsIG5hbWUsIGJ1aWx0aW4pO1xuICAgIGJ1aWx0aW5zLmFkZEdsb2JhbE1lbWJlcignUmVhZG9ubHlNYXAnLCBuYW1lLCBidWlsdGluKTtcbiAgfSk7XG4gIGJ1aWx0aW5zLmFkZEdsb2JhbE1lbWJlcignTWFwJywgJ2RlbGV0ZScsIG5ldyBNYXBEZWxldGUoKSk7XG4gIGJ1aWx0aW5zLmFkZEdsb2JhbE1lbWJlcignTWFwJywgJ3NldCcsIG5ldyBNYXBTZXQoKSk7XG4gIGJ1aWx0aW5zLmFkZEludGVyZmFjZSgnTWFwQ29uc3RydWN0b3InLCBuZXcgTWFwQ29uc3RydWN0b3JJbnRlcmZhY2UoKSk7XG59O1xuIl19