UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

72 lines (70 loc) 13.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const constants_1 = require("../../constants"); const Helper_1 = require("../Helper"); class CreateClassHelper extends Helper_1.Helper { constructor(options) { super(); this.ctor = options.ctor; this.prototypeMethods = options.prototypeMethods === undefined ? {} : options.prototypeMethods; this.prototypeSymbolMethods = options.prototypeSymbolMethods === undefined ? {} : options.prototypeSymbolMethods; this.classMethods = options.classMethods === undefined ? {} : options.classMethods; this.classSymbolMethods = options.classSymbolMethods === undefined ? {} : options.classSymbolMethods; } emit(sb, node, optionsIn) { const options = sb.pushValueOptions(optionsIn); const createMethod = (body) => { sb.emitHelper(node, options, sb.helpers.createFunctionArray({ body: (innerOptions) => { body(sb.pushValueOptions(innerOptions)); sb.emitHelper(node, innerOptions, sb.helpers.return); }, })); sb.emitHelper(node, options, sb.helpers.createFunctionObject({ property: constants_1.InternalObjectProperty.Call, })); }; const createPropertyMethod = (name, body) => { sb.emitOp(node, 'DUP'); sb.emitPushString(node, name); createMethod(body); sb.emitHelper(node, options, sb.helpers.setDataPropertyObjectProperty); }; const wrapSymbolMethod = (name, body) => { sb.emitOp(node, 'DUP'); sb.emitPushString(node, name); createMethod(body); sb.emitHelper(node, options, sb.helpers.setDataSymbolObjectProperty); }; sb.emitHelper(node, options, sb.helpers.createObject); Object.entries(this.prototypeMethods).forEach(([name, body]) => { createPropertyMethod(name, body); }); Object.entries(this.prototypeSymbolMethods).forEach(([name, body]) => { wrapSymbolMethod(name, body); }); sb.emitHelper(node, options, sb.helpers.createConstructArray({ withScope: false, body: (innerOptions) => { if (this.ctor !== undefined) { this.ctor(innerOptions); } }, })); sb.emitHelper(node, options, sb.helpers.createFunctionObject({ property: constants_1.InternalObjectProperty.Construct, })); sb.emitOp(node, 'TUCK'); sb.emitPushString(node, 'prototype'); sb.emitOp(node, 'ROT'); sb.emitHelper(node, options, sb.helpers.setDataPropertyObjectProperty); Object.entries(this.classMethods).forEach(([name, body]) => { createPropertyMethod(name, body); }); Object.entries(this.classSymbolMethods).forEach(([name, body]) => { wrapSymbolMethod(name, body); }); } } exports.CreateClassHelper = CreateClassHelper; //# sourceMappingURL=data:application/json;charset=utf8;base64,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QUMsQ0FBQztRQUVyQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV2QixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBRXZFLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDekQsb0JBQW9CLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFO1lBQy9ELGdCQUFnQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQWxIRCw4Q0FrSEMiLCJmaWxlIjoibmVvLW9uZS1zbWFydC1jb250cmFjdC1jb21waWxlci9zcmMvY29tcGlsZS9oZWxwZXIvY2xhc3MvQ3JlYXRlQ2xhc3NIZWxwZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5pbXBvcnQgeyBJbnRlcm5hbE9iamVjdFByb3BlcnR5IH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFNjcmlwdEJ1aWxkZXIgfSBmcm9tICcuLi8uLi9zYic7XG5pbXBvcnQgeyBWaXNpdE9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBIZWxwZXIgfSBmcm9tICcuLi9IZWxwZXInO1xuXG50eXBlIFByb3AgPSAob3B0aW9uczogVmlzaXRPcHRpb25zKSA9PiB2b2lkO1xuaW50ZXJmYWNlIFByb3BlcnRpZXMge1xuICByZWFkb25seSBba2V5OiBzdHJpbmddOiBQcm9wO1xufVxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVDbGFzc0hlbHBlck9wdGlvbnMge1xuICByZWFkb25seSBjdG9yPzogKG9wdGlvbnM6IFZpc2l0T3B0aW9ucykgPT4gdm9pZDtcbiAgcmVhZG9ubHkgcHJvdG90eXBlTWV0aG9kcz86IFByb3BlcnRpZXM7XG4gIHJlYWRvbmx5IHByb3RvdHlwZVN5bWJvbE1ldGhvZHM/OiBQcm9wZXJ0aWVzO1xuICByZWFkb25seSBjbGFzc01ldGhvZHM/OiBQcm9wZXJ0aWVzO1xuICByZWFkb25seSBjbGFzc1N5bWJvbE1ldGhvZHM/OiBQcm9wZXJ0aWVzO1xufVxuXG4vLyBJbnB1dDogW11cbi8vIE91dHB1dDogW2NsYXNzVmFsXVxuZXhwb3J0IGNsYXNzIENyZWF0ZUNsYXNzSGVscGVyIGV4dGVuZHMgSGVscGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjdG9yPzogKG9wdGlvbnM6IFZpc2l0T3B0aW9ucykgPT4gdm9pZDtcbiAgcHJpdmF0ZSByZWFkb25seSBwcm90b3R5cGVNZXRob2RzOiBQcm9wZXJ0aWVzO1xuICBwcml2YXRlIHJlYWRvbmx5IHByb3RvdHlwZVN5bWJvbE1ldGhvZHM6IFByb3BlcnRpZXM7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2xhc3NNZXRob2RzOiBQcm9wZXJ0aWVzO1xuICBwcml2YXRlIHJlYWRvbmx5IGNsYXNzU3ltYm9sTWV0aG9kczogUHJvcGVydGllcztcblxuICBwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9uczogQ3JlYXRlQ2xhc3NIZWxwZXJPcHRpb25zKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmN0b3IgPSBvcHRpb25zLmN0b3I7XG4gICAgdGhpcy5wcm90b3R5cGVNZXRob2RzID0gb3B0aW9ucy5wcm90b3R5cGVNZXRob2RzID09PSB1bmRlZmluZWQgPyB7fSA6IG9wdGlvbnMucHJvdG90eXBlTWV0aG9kcztcbiAgICB0aGlzLnByb3RvdHlwZVN5bWJvbE1ldGhvZHMgPSBvcHRpb25zLnByb3RvdHlwZVN5bWJvbE1ldGhvZHMgPT09IHVuZGVmaW5lZCA/IHt9IDogb3B0aW9ucy5wcm90b3R5cGVTeW1ib2xNZXRob2RzO1xuICAgIHRoaXMuY2xhc3NNZXRob2RzID0gb3B0aW9ucy5jbGFzc01ldGhvZHMgPT09IHVuZGVmaW5lZCA/IHt9IDogb3B0aW9ucy5jbGFzc01ldGhvZHM7XG4gICAgdGhpcy5jbGFzc1N5bWJvbE1ldGhvZHMgPSBvcHRpb25zLmNsYXNzU3ltYm9sTWV0aG9kcyA9PT0gdW5kZWZpbmVkID8ge30gOiBvcHRpb25zLmNsYXNzU3ltYm9sTWV0aG9kcztcbiAgfVxuXG4gIHB1YmxpYyBlbWl0KHNiOiBTY3JpcHRCdWlsZGVyLCBub2RlOiB0cy5Ob2RlLCBvcHRpb25zSW46IFZpc2l0T3B0aW9ucyk6IHZvaWQge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBzYi5wdXNoVmFsdWVPcHRpb25zKG9wdGlvbnNJbik7XG5cbiAgICBjb25zdCBjcmVhdGVNZXRob2QgPSAoYm9keTogUHJvcCkgPT4ge1xuICAgICAgLy8gW2ZhcnIsIG5hbWUsIHByb3RvdHlwZVZhbCwgcHJvdG90eXBlVmFsXVxuICAgICAgc2IuZW1pdEhlbHBlcihcbiAgICAgICAgbm9kZSxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgc2IuaGVscGVycy5jcmVhdGVGdW5jdGlvbkFycmF5KHtcbiAgICAgICAgICBib2R5OiAoaW5uZXJPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBib2R5KHNiLnB1c2hWYWx1ZU9wdGlvbnMoaW5uZXJPcHRpb25zKSk7XG4gICAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIGlubmVyT3B0aW9ucywgc2IuaGVscGVycy5yZXR1cm4pO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICAgIC8vIFtmb2JqZWN0VmFsLCBuYW1lLCBwcm90b3R5cGVWYWwsIHByb3RvdHlwZVZhbF1cbiAgICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICAgIG5vZGUsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIHNiLmhlbHBlcnMuY3JlYXRlRnVuY3Rpb25PYmplY3Qoe1xuICAgICAgICAgIHByb3BlcnR5OiBJbnRlcm5hbE9iamVjdFByb3BlcnR5LkNhbGwsXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgY29uc3QgY3JlYXRlUHJvcGVydHlNZXRob2QgPSAobmFtZTogc3RyaW5nLCBib2R5OiBQcm9wKSA9PiB7XG4gICAgICAvLyBbcHJvdG90eXBlVmFsLCBwcm90b3R5cGVWYWxdXG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RVUCcpO1xuICAgICAgLy8gW25hbWUsIHByb3RvdHlwZVZhbCwgcHJvdG90eXBlVmFsXVxuICAgICAgc2IuZW1pdFB1c2hTdHJpbmcobm9kZSwgbmFtZSk7XG4gICAgICAvLyBbZk9iamVjdFZhbCwgbmFtZSwgcHJvdG90eXBlVmFsLCBwcm90b3R5cGVWYWxdXG4gICAgICBjcmVhdGVNZXRob2QoYm9keSk7XG4gICAgICAvLyBbcHJvdG90eXBlVmFsXVxuICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBvcHRpb25zLCBzYi5oZWxwZXJzLnNldERhdGFQcm9wZXJ0eU9iamVjdFByb3BlcnR5KTtcbiAgICB9O1xuXG4gICAgY29uc3Qgd3JhcFN5bWJvbE1ldGhvZCA9IChuYW1lOiBzdHJpbmcsIGJvZHk6IFByb3ApID0+IHtcbiAgICAgIC8vIFtwcm90b3R5cGVWYWwsIHByb3RvdHlwZVZhbF1cbiAgICAgIHNiLmVtaXRPcChub2RlLCAnRFVQJyk7XG4gICAgICAvLyBbbmFtZSwgcHJvdG90eXBlVmFsLCBwcm90b3R5cGVWYWxdXG4gICAgICBzYi5lbWl0UHVzaFN0cmluZyhub2RlLCBuYW1lKTtcbiAgICAgIC8vIFtmT2JqZWN0VmFsLCBuYW1lLCBwcm90b3R5cGVWYWwsIHByb3RvdHlwZVZhbF1cbiAgICAgIGNyZWF0ZU1ldGhvZChib2R5KTtcbiAgICAgIC8vIFtwcm90b3R5cGVWYWxdXG4gICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnMsIHNiLmhlbHBlcnMuc2V0RGF0YVN5bWJvbE9iamVjdFByb3BlcnR5KTtcbiAgICB9O1xuXG4gICAgLy8gY3JlYXRlIHByb3RvdHlwZVxuICAgIC8vIFtwcm90b3R5cGVWYWxdXG4gICAgc2IuZW1pdEhlbHBlcihub2RlLCBvcHRpb25zLCBzYi5oZWxwZXJzLmNyZWF0ZU9iamVjdCk7XG4gICAgLy8gW3Byb3RvdHlwZVZhbF1cbiAgICBPYmplY3QuZW50cmllcyh0aGlzLnByb3RvdHlwZU1ldGhvZHMpLmZvckVhY2goKFtuYW1lLCBib2R5XSkgPT4ge1xuICAgICAgY3JlYXRlUHJvcGVydHlNZXRob2QobmFtZSwgYm9keSk7XG4gICAgfSk7XG4gICAgLy8gW3Byb3RvdHlwZVZhbF1cbiAgICBPYmplY3QuZW50cmllcyh0aGlzLnByb3RvdHlwZVN5bWJvbE1ldGhvZHMpLmZvckVhY2goKFtuYW1lLCBib2R5XSkgPT4ge1xuICAgICAgd3JhcFN5bWJvbE1ldGhvZChuYW1lLCBib2R5KTtcbiAgICB9KTtcblxuICAgIC8vIGNyZWF0ZSBjbGFzc1xuICAgIC8vIFtmYXJyLCBwcm90b3R5cGVWYWxdXG4gICAgc2IuZW1pdEhlbHBlcihcbiAgICAgIG5vZGUsXG4gICAgICBvcHRpb25zLFxuICAgICAgc2IuaGVscGVycy5jcmVhdGVDb25zdHJ1Y3RBcnJheSh7XG4gICAgICAgIHdpdGhTY29wZTogZmFsc2UsXG4gICAgICAgIGJvZHk6IChpbm5lck9wdGlvbnMpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5jdG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY3Rvcihpbm5lck9wdGlvbnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgLy8gW2NsYXNzVmFsLCBwcm90b3R5cGVWYWxdXG4gICAgc2IuZW1pdEhlbHBlcihcbiAgICAgIG5vZGUsXG4gICAgICBvcHRpb25zLFxuICAgICAgc2IuaGVscGVycy5jcmVhdGVGdW5jdGlvbk9iamVjdCh7XG4gICAgICAgIHByb3BlcnR5OiBJbnRlcm5hbE9iamVjdFByb3BlcnR5LkNvbnN0cnVjdCxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgLy8gW2NsYXNzVmFsLCBwcm90b3R5cGVWYWwsIGNsYXNzVmFsXVxuICAgIHNiLmVtaXRPcChub2RlLCAnVFVDSycpO1xuICAgIC8vIFsncHJvdG90eXBlJywgY2xhc3NWYWwsIHByb3RvdHlwZVZhbCwgY2xhc3NWYWxdXG4gICAgc2IuZW1pdFB1c2hTdHJpbmcobm9kZSwgJ3Byb3RvdHlwZScpO1xuICAgIC8vIFtwcm90b3R5cGVWYWwsICdwcm90b3R5cGUnLCBjbGFzc1ZhbCwgY2xhc3NWYWxdXG4gICAgc2IuZW1pdE9wKG5vZGUsICdST1QnKTtcbiAgICAvLyBbY2xhc3NWYWxdXG4gICAgc2IuZW1pdEhlbHBlcihub2RlLCBvcHRpb25zLCBzYi5oZWxwZXJzLnNldERhdGFQcm9wZXJ0eU9iamVjdFByb3BlcnR5KTtcbiAgICAvLyBbY2xhc3NWYWxdXG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5jbGFzc01ldGhvZHMpLmZvckVhY2goKFtuYW1lLCBib2R5XSkgPT4ge1xuICAgICAgY3JlYXRlUHJvcGVydHlNZXRob2QobmFtZSwgYm9keSk7XG4gICAgfSk7XG4gICAgLy8gW2NsYXNzVmFsXVxuICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuY2xhc3NTeW1ib2xNZXRob2RzKS5mb3JFYWNoKChbbmFtZSwgYm9keV0pID0+IHtcbiAgICAgIHdyYXBTeW1ib2xNZXRob2QobmFtZSwgYm9keSk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==