@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
31 lines (29 loc) • 1.22 kB
JavaScript
import { tsUtils } from '@neo-one/ts-utils';
import ts from 'typescript';
import { DiagnosticCode } from '../../DiagnosticCode';
import { DiagnosticMessage } from '../../DiagnosticMessage';
import { isBuiltinNew } from '../builtins';
import { NodeCompiler } from '../NodeCompiler';
export class NewExpressionCompiler extends NodeCompiler {
constructor() {
super(...arguments);
this.kind = ts.SyntaxKind.NewExpression;
}
visitNode(sb, expr, optionsIn) {
const options = sb.pushValueOptions(optionsIn);
const newExpr = tsUtils.expression.getExpression(expr);
const builtin = sb.context.builtins.getValue(newExpr);
if (builtin !== undefined && isBuiltinNew(builtin)) {
builtin.emitNew(sb, expr, optionsIn);
return;
}
if (sb.context.analysis.isSmartContractNode(newExpr)) {
sb.context.reportError(expr, DiagnosticCode.InvalidContractNew, DiagnosticMessage.InvalidContractNew);
return;
}
sb.emitHelper(expr, options, sb.helpers.args);
sb.visit(newExpr, options);
sb.emitHelper(expr, optionsIn, sb.helpers.new());
}
}
//# sourceMappingURL=NewExpressionCompiler.js.map