@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
34 lines (32 loc) • 4.69 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const ts_utils_1 = require("@neo-one/ts-utils");
const typescript_1 = tslib_1.__importDefault(require("typescript"));
const NodeCompiler_1 = require("../NodeCompiler");
class SuperExpressionCompiler extends NodeCompiler_1.NodeCompiler {
constructor() {
super(...arguments);
this.kind = typescript_1.default.SyntaxKind.SuperKeyword;
}
visitNode(sb, node, options) {
if (options.pushValue) {
const superClass = options.superClass;
if (superClass === undefined) {
throw new Error('Something went wrong, expected super class to be defined.');
}
const methodDeclaration = ts_utils_1.tsUtils.node.getFirstAncestorByKind(node, typescript_1.default.SyntaxKind.MethodDeclaration);
if (methodDeclaration === undefined) {
sb.context.reportUnsupported(node);
return;
}
sb.scope.get(sb, node, options, superClass);
if (!ts_utils_1.tsUtils.modifier.isStatic(methodDeclaration)) {
sb.emitPushString(node, 'prototype');
sb.emitHelper(node, options, sb.helpers.getPropertyObjectProperty);
}
}
}
}
exports.SuperExpressionCompiler = SuperExpressionCompiler;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlN1cGVyRXhwcmVzc2lvbkNvbXBpbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGdEQUE0QztBQUM1QyxvRUFBNEI7QUFDNUIsa0RBQStDO0FBSS9DLE1BQWEsdUJBQXdCLFNBQVEsMkJBQWdDO0lBQTdFOztRQUNrQixTQUFJLEdBQUcsb0JBQUUsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDO0lBOEJwRCxDQUFDO0lBNUJRLFNBQVMsQ0FBQyxFQUFpQixFQUFFLElBQXdCLEVBQUUsT0FBcUI7UUFDakYsSUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFO1lBQ3JCLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7WUFDdEMsSUFBSSxVQUFVLEtBQUssU0FBUyxFQUFFO2dCQUU1QixNQUFNLElBQUksS0FBSyxDQUFDLDJEQUEyRCxDQUFDLENBQUM7YUFDOUU7WUFFRCxNQUFNLGlCQUFpQixHQUFHLGtCQUFPLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksRUFBRSxvQkFBRSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBRXJHLElBQUksaUJBQWlCLEtBQUssU0FBUyxFQUFFO2dCQUVuQyxFQUFFLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUduQyxPQUFPO2FBQ1I7WUFHRCxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsa0JBQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEVBQUU7Z0JBRWpELEVBQUUsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO2dCQUVyQyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO2FBQ3BFO1NBQ0Y7SUFDSCxDQUFDO0NBQ0Y7QUEvQkQsMERBK0JDIiwiZmlsZSI6Im5lby1vbmUtc21hcnQtY29udHJhY3QtY29tcGlsZXIvc3JjL2NvbXBpbGUvZXhwcmVzc2lvbi9TdXBlckV4cHJlc3Npb25Db21waWxlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHRzVXRpbHMgfSBmcm9tICdAbmVvLW9uZS90cy11dGlscyc7XG5pbXBvcnQgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5pbXBvcnQgeyBOb2RlQ29tcGlsZXIgfSBmcm9tICcuLi9Ob2RlQ29tcGlsZXInO1xuaW1wb3J0IHsgU2NyaXB0QnVpbGRlciB9IGZyb20gJy4uL3NiJztcbmltcG9ydCB7IFZpc2l0T3B0aW9ucyB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIFN1cGVyRXhwcmVzc2lvbkNvbXBpbGVyIGV4dGVuZHMgTm9kZUNvbXBpbGVyPHRzLlN1cGVyRXhwcmVzc2lvbj4ge1xuICBwdWJsaWMgcmVhZG9ubHkga2luZCA9IHRzLlN5bnRheEtpbmQuU3VwZXJLZXl3b3JkO1xuXG4gIHB1YmxpYyB2aXNpdE5vZGUoc2I6IFNjcmlwdEJ1aWxkZXIsIG5vZGU6IHRzLlN1cGVyRXhwcmVzc2lvbiwgb3B0aW9uczogVmlzaXRPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKG9wdGlvbnMucHVzaFZhbHVlKSB7XG4gICAgICBjb25zdCBzdXBlckNsYXNzID0gb3B0aW9ucy5zdXBlckNsYXNzO1xuICAgICAgaWYgKHN1cGVyQ2xhc3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NvbWV0aGluZyB3ZW50IHdyb25nLCBleHBlY3RlZCBzdXBlciBjbGFzcyB0byBiZSBkZWZpbmVkLicpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtZXRob2REZWNsYXJhdGlvbiA9IHRzVXRpbHMubm9kZS5nZXRGaXJzdEFuY2VzdG9yQnlLaW5kKG5vZGUsIHRzLlN5bnRheEtpbmQuTWV0aG9kRGVjbGFyYXRpb24pO1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIGlmIChtZXRob2REZWNsYXJhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIHNiLmNvbnRleHQucmVwb3J0VW5zdXBwb3J0ZWQobm9kZSk7XG5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBbc3VwZXJDbGFzc11cbiAgICAgIHNiLnNjb3BlLmdldChzYiwgbm9kZSwgb3B0aW9ucywgc3VwZXJDbGFzcyk7XG4gICAgICBpZiAoIXRzVXRpbHMubW9kaWZpZXIuaXNTdGF0aWMobWV0aG9kRGVjbGFyYXRpb24pKSB7XG4gICAgICAgIC8vIFsncHJvdG90eXBlJywgc3VwZXJDbGFzc11cbiAgICAgICAgc2IuZW1pdFB1c2hTdHJpbmcobm9kZSwgJ3Byb3RvdHlwZScpO1xuICAgICAgICAvLyBbc3VwZXJQcm90b3R5cGVdXG4gICAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgb3B0aW9ucywgc2IuaGVscGVycy5nZXRQcm9wZXJ0eU9iamVjdFByb3BlcnR5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==