UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

54 lines (52 loc) 2.4 kB
"use strict"; 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