@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
36 lines (34 loc) • 1.57 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.NewExpressionCompiler = void 0;
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=NewExpressionCompiler.js.map