@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
53 lines (51 loc) • 7.54 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
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=data:application/json;charset=utf8;base64,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eHByZXNzaW9uL0lkZW50aWZpZXJDb21waWxlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHRzVXRpbHMgfSBmcm9tICdAbmVvLW9uZS90cy11dGlscyc7XG5pbXBvcnQgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5pbXBvcnQgeyBEaWFnbm9zdGljQ29kZSB9IGZyb20gJy4uLy4uL0RpYWdub3N0aWNDb2RlJztcbmltcG9ydCB7IERpYWdub3N0aWNNZXNzYWdlIH0gZnJvbSAnLi4vLi4vRGlhZ25vc3RpY01lc3NhZ2UnO1xuaW1wb3J0IHsgaXNCdWlsdGluTmV3LCBpc0J1aWx0aW5WYWx1ZSB9IGZyb20gJy4uL2J1aWx0aW5zJztcbmltcG9ydCB7IE5vZGVDb21waWxlciB9IGZyb20gJy4uL05vZGVDb21waWxlcic7XG5pbXBvcnQgeyBTY3JpcHRCdWlsZGVyIH0gZnJvbSAnLi4vc2InO1xuaW1wb3J0IHsgVmlzaXRPcHRpb25zIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgSWRlbnRpZmllckNvbXBpbGVyIGV4dGVuZHMgTm9kZUNvbXBpbGVyPHRzLklkZW50aWZpZXI+IHtcbiAgcHVibGljIHJlYWRvbmx5IGtpbmQgPSB0cy5TeW50YXhLaW5kLklkZW50aWZpZXI7XG5cbiAgcHVibGljIHZpc2l0Tm9kZShzYjogU2NyaXB0QnVpbGRlciwgZXhwcjogdHMuSWRlbnRpZmllciwgb3B0aW9uczogVmlzaXRPcHRpb25zKTogdm9pZCB7XG4gICAgY29uc3QgYnVpbHRpbiA9IHNiLmNvbnRleHQuYnVpbHRpbnMuZ2V0VmFsdWUoZXhwcik7XG4gICAgaWYgKGJ1aWx0aW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFpc0J1aWx0aW5WYWx1ZShidWlsdGluKSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKGlzQnVpbHRpbk5ldyhidWlsdGluKSAmJiBvcHRpb25zLnN1cGVyQ2xhc3MgIT09IHVuZGVmaW5lZCkgfHxcbiAgICAgICAgICBzYi5jb250ZXh0LmJ1aWx0aW5zLmlzVmFsdWUoZXhwciwgJ29uZTAnKSB8fFxuICAgICAgICAgIHNiLmNvbnRleHQuYnVpbHRpbnMuaXNWYWx1ZShleHByLCAnb25lMScpXG4gICAgICAgICkge1xuICAgICAgICAgIHNiLmNvbnRleHQucmVwb3J0RXJyb3IoXG4gICAgICAgICAgICBleHByLFxuICAgICAgICAgICAgRGlhZ25vc3RpY0NvZGUuSW52YWxpZEJ1aWx0aW5SZWZlcmVuY2UsXG4gICAgICAgICAgICBEaWFnbm9zdGljTWVzc2FnZS5DYW5ub3RSZWZlcmVuY2VCdWlsdGluLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5wdXNoVmFsdWUpIHtcbiAgICAgICAgICBzYi5lbWl0SGVscGVyKGV4cHIsIG9wdGlvbnMsIHNiLmhlbHBlcnMud3JhcFVuZGVmaW5lZCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGJ1aWx0aW4uZW1pdFZhbHVlKHNiLCBleHByLCBvcHRpb25zKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN5bWJvbCA9IHNiLmNvbnRleHQuYW5hbHlzaXMuZ2V0U3ltYm9sKGV4cHIpO1xuICAgIGlmIChzeW1ib2wgIT09IHVuZGVmaW5lZCAmJiB0c1V0aWxzLnN5bWJvbC5pc0FyZ3VtZW50c1N5bWJvbChzYi5jb250ZXh0LnR5cGVDaGVja2VyLCBzeW1ib2wpKSB7XG4gICAgICBzYi5jb250ZXh0LnJlcG9ydEVycm9yKGV4cHIsIERpYWdub3N0aWNDb2RlLkludmFsaWRCdWlsdGluUmVmZXJlbmNlLCBEaWFnbm9zdGljTWVzc2FnZS5DYW5ub3RSZWZlcmVuY2VCdWlsdGluKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnNldFZhbHVlKSB7XG4gICAgICBzYi5zY29wZS5zZXQoc2IsIGV4cHIsIHNiLm5vU2V0VmFsdWVPcHRpb25zKG9wdGlvbnMpLCBleHByLmdldFRleHQoKSk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMucHVzaFZhbHVlKSB7XG4gICAgICBpZiAodHNVdGlscy5pZGVudGlmaWVyLmlzVW5kZWZpbmVkKGV4cHIpKSB7XG4gICAgICAgIHNiLmVtaXRIZWxwZXIoZXhwciwgb3B0aW9ucywgc2IuaGVscGVycy53cmFwVW5kZWZpbmVkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNiLnNjb3BlLmdldChzYiwgZXhwciwgb3B0aW9ucywgZXhwci5nZXRUZXh0KCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19