@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
54 lines (52 loc) • 2.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.IdentifierCompiler = 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 IdentifierCompiler extends NodeCompiler_1.NodeCompiler {
constructor() {
super(...arguments);
this.kind = typescript_1.default.SyntaxKind.Identifier;
}
visitNode(sb, expr, options) {
const builtin = sb.context.builtins.getValue(expr);
if (builtin !== undefined) {
if (!builtins_1.isBuiltinValue(builtin)) {
if ((builtins_1.isBuiltinNew(builtin) && options.superClass !== undefined) ||
sb.context.builtins.isValue(expr, 'one0') ||
sb.context.builtins.isValue(expr, 'one1')) {
sb.context.reportError(expr, DiagnosticCode_1.DiagnosticCode.InvalidBuiltinReference, DiagnosticMessage_1.DiagnosticMessage.CannotReferenceBuiltin);
}
if (options.pushValue) {
sb.emitHelper(expr, options, sb.helpers.wrapUndefined);
}
return;
}
builtin.emitValue(sb, expr, options);
return;
}
const symbol = sb.context.analysis.getSymbol(expr);
if (symbol !== undefined && ts_utils_1.tsUtils.symbol.isArgumentsSymbol(sb.context.typeChecker, symbol)) {
sb.context.reportError(expr, DiagnosticCode_1.DiagnosticCode.InvalidBuiltinReference, DiagnosticMessage_1.DiagnosticMessage.CannotReferenceBuiltin);
return;
}
if (options.setValue) {
sb.scope.set(sb, expr, sb.noSetValueOptions(options), expr.getText());
}
if (options.pushValue) {
if (ts_utils_1.tsUtils.identifier.isUndefined(expr)) {
sb.emitHelper(expr, options, sb.helpers.wrapUndefined);
}
else {
sb.scope.get(sb, expr, options, expr.getText());
}
}
}
}
exports.IdentifierCompiler = IdentifierCompiler;
//# sourceMappingURL=IdentifierCompiler.js.map