UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

49 lines (47 loc) 2.03 kB
import { tsUtils } from '@neo-one/ts-utils'; import ts from 'typescript'; import { DiagnosticCode } from '../../DiagnosticCode'; import { DiagnosticMessage } from '../../DiagnosticMessage'; import { isBuiltinNew, isBuiltinValue } from '../builtins'; import { NodeCompiler } from '../NodeCompiler'; export class IdentifierCompiler extends NodeCompiler { constructor() { super(...arguments); this.kind = ts.SyntaxKind.Identifier; } visitNode(sb, expr, options) { const builtin = sb.context.builtins.getValue(expr); if (builtin !== undefined) { if (!isBuiltinValue(builtin)) { if ((isBuiltinNew(builtin) && options.superClass !== undefined) || sb.context.builtins.isValue(expr, 'one0') || sb.context.builtins.isValue(expr, 'one1')) { sb.context.reportError(expr, DiagnosticCode.InvalidBuiltinReference, 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 && tsUtils.symbol.isArgumentsSymbol(sb.context.typeChecker, symbol)) { sb.context.reportError(expr, DiagnosticCode.InvalidBuiltinReference, DiagnosticMessage.CannotReferenceBuiltin); return; } if (options.setValue) { sb.scope.set(sb, expr, sb.noSetValueOptions(options), expr.getText()); } if (options.pushValue) { if (tsUtils.identifier.isUndefined(expr)) { sb.emitHelper(expr, options, sb.helpers.wrapUndefined); } else { sb.scope.get(sb, expr, options, expr.getText()); } } } } //# sourceMappingURL=IdentifierCompiler.js.map