UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

35 lines (33 loc) 4.87 kB
"use strict"; 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 DiagnosticCode_1 = require("../../DiagnosticCode"); const DiagnosticMessage_1 = require("../../DiagnosticMessage"); const builtins_1 = require("../builtins"); const NodeCompiler_1 = require("../NodeCompiler"); class NewExpressionCompiler extends NodeCompiler_1.NodeCompiler { constructor() { super(...arguments); this.kind = typescript_1.default.SyntaxKind.NewExpression; } visitNode(sb, expr, optionsIn) { const options = sb.pushValueOptions(optionsIn); const newExpr = ts_utils_1.tsUtils.expression.getExpression(expr); const builtin = sb.context.builtins.getValue(newExpr); if (builtin !== undefined && builtins_1.isBuiltinNew(builtin)) { builtin.emitNew(sb, expr, optionsIn); return; } if (sb.context.analysis.isSmartContractNode(newExpr)) { sb.context.reportError(expr, DiagnosticCode_1.DiagnosticCode.InvalidContractNew, DiagnosticMessage_1.DiagnosticMessage.InvalidContractNew); return; } sb.emitHelper(expr, options, sb.helpers.args); sb.visit(newExpr, options); sb.emitHelper(expr, optionsIn, sb.helpers.new()); } } exports.NewExpressionCompiler = NewExpressionCompiler; //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk5ld0V4cHJlc3Npb25Db21waWxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxnREFBNEM7QUFDNUMsb0VBQTRCO0FBQzVCLHlEQUFzRDtBQUN0RCwrREFBNEQ7QUFDNUQsMENBQTJDO0FBQzNDLGtEQUErQztBQUkvQyxNQUFhLHFCQUFzQixTQUFRLDJCQUE4QjtJQUF6RTs7UUFDa0IsU0FBSSxHQUFHLG9CQUFFLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztJQXlCckQsQ0FBQztJQXZCUSxTQUFTLENBQUMsRUFBaUIsRUFBRSxJQUFzQixFQUFFLFNBQXVCO1FBQ2pGLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvQyxNQUFNLE9BQU8sR0FBRyxrQkFBTyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkQsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RELElBQUksT0FBTyxLQUFLLFNBQVMsSUFBSSx1QkFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ2xELE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztZQUVyQyxPQUFPO1NBQ1I7UUFFRCxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3BELEVBQUUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSwrQkFBYyxDQUFDLGtCQUFrQixFQUFFLHFDQUFpQixDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFFdEcsT0FBTztTQUNSO1FBR0QsRUFBRSxDQUFDLFVBQVUsQ0FBVSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdkQsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFM0IsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNuRCxDQUFDO0NBQ0Y7QUExQkQsc0RBMEJDIiwiZmlsZSI6Im5lby1vbmUtc21hcnQtY29udHJhY3QtY29tcGlsZXIvc3JjL2NvbXBpbGUvZXhwcmVzc2lvbi9OZXdFeHByZXNzaW9uQ29tcGlsZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0c1V0aWxzIH0gZnJvbSAnQG5lby1vbmUvdHMtdXRpbHMnO1xuaW1wb3J0IHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuaW1wb3J0IHsgRGlhZ25vc3RpY0NvZGUgfSBmcm9tICcuLi8uLi9EaWFnbm9zdGljQ29kZSc7XG5pbXBvcnQgeyBEaWFnbm9zdGljTWVzc2FnZSB9IGZyb20gJy4uLy4uL0RpYWdub3N0aWNNZXNzYWdlJztcbmltcG9ydCB7IGlzQnVpbHRpbk5ldyB9IGZyb20gJy4uL2J1aWx0aW5zJztcbmltcG9ydCB7IE5vZGVDb21waWxlciB9IGZyb20gJy4uL05vZGVDb21waWxlcic7XG5pbXBvcnQgeyBTY3JpcHRCdWlsZGVyIH0gZnJvbSAnLi4vc2InO1xuaW1wb3J0IHsgVmlzaXRPcHRpb25zIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgTmV3RXhwcmVzc2lvbkNvbXBpbGVyIGV4dGVuZHMgTm9kZUNvbXBpbGVyPHRzLk5ld0V4cHJlc3Npb24+IHtcbiAgcHVibGljIHJlYWRvbmx5IGtpbmQgPSB0cy5TeW50YXhLaW5kLk5ld0V4cHJlc3Npb247XG5cbiAgcHVibGljIHZpc2l0Tm9kZShzYjogU2NyaXB0QnVpbGRlciwgZXhwcjogdHMuTmV3RXhwcmVzc2lvbiwgb3B0aW9uc0luOiBWaXNpdE9wdGlvbnMpOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID0gc2IucHVzaFZhbHVlT3B0aW9ucyhvcHRpb25zSW4pO1xuICAgIGNvbnN0IG5ld0V4cHIgPSB0c1V0aWxzLmV4cHJlc3Npb24uZ2V0RXhwcmVzc2lvbihleHByKTtcbiAgICBjb25zdCBidWlsdGluID0gc2IuY29udGV4dC5idWlsdGlucy5nZXRWYWx1ZShuZXdFeHByKTtcbiAgICBpZiAoYnVpbHRpbiAhPT0gdW5kZWZpbmVkICYmIGlzQnVpbHRpbk5ldyhidWlsdGluKSkge1xuICAgICAgYnVpbHRpbi5lbWl0TmV3KHNiLCBleHByLCBvcHRpb25zSW4pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHNiLmNvbnRleHQuYW5hbHlzaXMuaXNTbWFydENvbnRyYWN0Tm9kZShuZXdFeHByKSkge1xuICAgICAgc2IuY29udGV4dC5yZXBvcnRFcnJvcihleHByLCBEaWFnbm9zdGljQ29kZS5JbnZhbGlkQ29udHJhY3ROZXcsIERpYWdub3N0aWNNZXNzYWdlLkludmFsaWRDb250cmFjdE5ldyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBbYXJnc2Fycl1cbiAgICBzYi5lbWl0SGVscGVyPHRzLk5vZGU+KGV4cHIsIG9wdGlvbnMsIHNiLmhlbHBlcnMuYXJncyk7XG4gICAgLy8gW29iamVjdFZhbCwgYXJnc2Fycl1cbiAgICBzYi52aXNpdChuZXdFeHByLCBvcHRpb25zKTtcbiAgICAvLyBbdGhpc1ZhbF1cbiAgICBzYi5lbWl0SGVscGVyKGV4cHIsIG9wdGlvbnNJbiwgc2IuaGVscGVycy5uZXcoKSk7XG4gIH1cbn1cbiJdfQ==