@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
35 lines (33 loc) • 5.04 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 types_1 = require("./types");
class BuiltinInstanceMemberValue {
constructor() {
this.types = new Set([types_1.BuiltinType.InstanceMemberValue]);
this.canSet = false;
this.isReadonly = true;
}
emitValue(sb, node, options, visited = false) {
if (!this.canSet && options.setValue) {
if (!this.isReadonly) {
sb.context.reportError(node, DiagnosticCode_1.DiagnosticCode.InvalidBuiltinModify, DiagnosticMessage_1.DiagnosticMessage.CannotModifyBuiltin);
}
return;
}
if (!visited && (typescript_1.default.isPropertyAccessExpression(node) || typescript_1.default.isElementAccessExpression(node))) {
sb.visit(ts_utils_1.tsUtils.expression.getExpression(node), sb.pushValueOptions(options));
}
if (!this.canSet && !options.pushValue) {
sb.emitOp(node, 'DROP');
return;
}
this.emit(sb, node, options);
}
}
exports.BuiltinInstanceMemberValue = BuiltinInstanceMemberValue;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkJ1aWx0aW5JbnN0YW5jZU1lbWJlclZhbHVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGdEQUE0QztBQUM1QyxvRUFBNEI7QUFDNUIseURBQXNEO0FBQ3RELCtEQUE0RDtBQUc1RCxtQ0FJaUI7QUFFakIsTUFBc0IsMEJBQTBCO0lBQWhEO1FBQ2tCLFVBQUssR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLG1CQUFXLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO1FBQ2hELFdBQU0sR0FBWSxLQUFLLENBQUM7UUFDeEIsZUFBVSxHQUFZLElBQUksQ0FBQztJQTRCaEQsQ0FBQztJQTFCUSxTQUFTLENBQUMsRUFBaUIsRUFBRSxJQUEwQixFQUFFLE9BQXFCLEVBQUUsT0FBTyxHQUFHLEtBQUs7UUFDcEcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRTtZQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFFcEIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLCtCQUFjLENBQUMsb0JBQW9CLEVBQUUscUNBQWlCLENBQUMsbUJBQW1CLENBQUMsQ0FBQzthQUMxRztZQUVELE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxvQkFBRSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxJQUFJLG9CQUFFLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtZQUUzRixFQUFFLENBQUMsS0FBSyxDQUFDLGtCQUFPLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUNoRjtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRTtZQUN0QyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUV4QixPQUFPO1NBQ1I7UUFHRCxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDL0IsQ0FBQztDQUdGO0FBL0JELGdFQStCQyIsImZpbGUiOiJuZW8tb25lLXNtYXJ0LWNvbnRyYWN0LWNvbXBpbGVyL3NyYy9jb21waWxlL2J1aWx0aW5zL0J1aWx0aW5JbnN0YW5jZU1lbWJlclZhbHVlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHNVdGlscyB9IGZyb20gJ0BuZW8tb25lL3RzLXV0aWxzJztcbmltcG9ydCB0cyBmcm9tICd0eXBlc2NyaXB0JztcbmltcG9ydCB7IERpYWdub3N0aWNDb2RlIH0gZnJvbSAnLi4vLi4vRGlhZ25vc3RpY0NvZGUnO1xuaW1wb3J0IHsgRGlhZ25vc3RpY01lc3NhZ2UgfSBmcm9tICcuLi8uLi9EaWFnbm9zdGljTWVzc2FnZSc7XG5pbXBvcnQgeyBTY3JpcHRCdWlsZGVyIH0gZnJvbSAnLi4vc2InO1xuaW1wb3J0IHsgVmlzaXRPcHRpb25zIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgQnVpbHRpbkluc3RhbmNlTWVtYmVyVmFsdWUgYXMgQnVpbHRpbkluc3RhbmNlTWVtYmVyVmFsdWVUeXBlLFxuICBCdWlsdGluVHlwZSxcbiAgTWVtYmVyTGlrZUV4cHJlc3Npb24sXG59IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQnVpbHRpbkluc3RhbmNlTWVtYmVyVmFsdWUgaW1wbGVtZW50cyBCdWlsdGluSW5zdGFuY2VNZW1iZXJWYWx1ZVR5cGUge1xuICBwdWJsaWMgcmVhZG9ubHkgdHlwZXMgPSBuZXcgU2V0KFtCdWlsdGluVHlwZS5JbnN0YW5jZU1lbWJlclZhbHVlXSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBjYW5TZXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzUmVhZG9ubHk6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIHB1YmxpYyBlbWl0VmFsdWUoc2I6IFNjcmlwdEJ1aWxkZXIsIG5vZGU6IE1lbWJlckxpa2VFeHByZXNzaW9uLCBvcHRpb25zOiBWaXNpdE9wdGlvbnMsIHZpc2l0ZWQgPSBmYWxzZSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jYW5TZXQgJiYgb3B0aW9ucy5zZXRWYWx1ZSkge1xuICAgICAgaWYgKCF0aGlzLmlzUmVhZG9ubHkpIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgc2IuY29udGV4dC5yZXBvcnRFcnJvcihub2RlLCBEaWFnbm9zdGljQ29kZS5JbnZhbGlkQnVpbHRpbk1vZGlmeSwgRGlhZ25vc3RpY01lc3NhZ2UuQ2Fubm90TW9kaWZ5QnVpbHRpbik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXZpc2l0ZWQgJiYgKHRzLmlzUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKG5vZGUpIHx8IHRzLmlzRWxlbWVudEFjY2Vzc0V4cHJlc3Npb24obm9kZSkpKSB7XG4gICAgICAvLyBbdmFsXVxuICAgICAgc2IudmlzaXQodHNVdGlscy5leHByZXNzaW9uLmdldEV4cHJlc3Npb24obm9kZSksIHNiLnB1c2hWYWx1ZU9wdGlvbnMob3B0aW9ucykpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jYW5TZXQgJiYgIW9wdGlvbnMucHVzaFZhbHVlKSB7XG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFt2YWxdXG4gICAgdGhpcy5lbWl0KHNiLCBub2RlLCBvcHRpb25zKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBlbWl0KHNiOiBTY3JpcHRCdWlsZGVyLCBub2RlOiBNZW1iZXJMaWtlRXhwcmVzc2lvbiwgb3B0aW9uczogVmlzaXRPcHRpb25zKTogdm9pZDtcbn1cbiJdfQ==