@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
33 lines (31 loc) • 5.25 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 BuiltinMemberCall_1 = require("../../BuiltinMemberCall");
class StorageFor extends BuiltinMemberCall_1.BuiltinMemberCall {
constructor(type) {
super();
this.type = type;
}
emitCall(sb, _func, node, optionsIn) {
const prefix = sb.context.analysis.extractStorageKey(node);
if (prefix === undefined) {
const parent = ts_utils_1.tsUtils.node.getParent(node);
const parentClass = ts_utils_1.tsUtils.node.getFirstAncestorByTest(parent, typescript_1.default.isClassDeclaration);
if (!typescript_1.default.isPropertyDeclaration(parent) ||
parentClass === undefined ||
!sb.context.analysis.isSmartContract(parentClass)) {
sb.context.reportError(parent, DiagnosticCode_1.DiagnosticCode.InvalidStructuredStorageFor, DiagnosticMessage_1.DiagnosticMessage.InvalidStructuredStorageForProperty);
}
return;
}
const options = sb.pushValueOptions(optionsIn);
sb.emitHelper(node, options, sb.helpers.createStructuredStorage({ type: this.type, prefix }));
}
}
exports.StorageFor = StorageFor;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxnREFBNEM7QUFDNUMsb0VBQTRCO0FBQzVCLCtEQUE0RDtBQUM1RCxxRUFBa0U7QUFJbEUsK0RBQTREO0FBSTVELE1BQWEsVUFBVyxTQUFRLHFDQUFpQjtJQUMvQyxZQUFvQyxJQUFtQjtRQUNyRCxLQUFLLEVBQUUsQ0FBQztRQUQwQixTQUFJLEdBQUosSUFBSSxDQUFlO0lBRXZELENBQUM7SUFFTSxRQUFRLENBQ2IsRUFBaUIsRUFDakIsS0FBMkIsRUFDM0IsSUFBdUIsRUFDdkIsU0FBdUI7UUFFdkIsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0QsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFO1lBQ3hCLE1BQU0sTUFBTSxHQUFHLGtCQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1QyxNQUFNLFdBQVcsR0FBRyxrQkFBTyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsb0JBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ3ZGLElBQ0UsQ0FBQyxvQkFBRSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQztnQkFDakMsV0FBVyxLQUFLLFNBQVM7Z0JBQ3pCLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxFQUNqRDtnQkFDQSxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FDcEIsTUFBTSxFQUNOLCtCQUFjLENBQUMsMkJBQTJCLEVBQzFDLHFDQUFpQixDQUFDLG1DQUFtQyxDQUN0RCxDQUFDO2FBQ0g7WUFFRCxPQUFPO1NBQ1I7UUFFRCxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFL0MsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEcsQ0FBQztDQUNGO0FBbENELGdDQWtDQyIsImZpbGUiOiJuZW8tb25lLXNtYXJ0LWNvbnRyYWN0LWNvbXBpbGVyL3NyYy9jb21waWxlL2J1aWx0aW5zL2NvbnRyYWN0L3N0b3JhZ2UvZm9yLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHNVdGlscyB9IGZyb20gJ0BuZW8tb25lL3RzLXV0aWxzJztcbmltcG9ydCB0cyBmcm9tICd0eXBlc2NyaXB0JztcbmltcG9ydCB7IERpYWdub3N0aWNDb2RlIH0gZnJvbSAnLi4vLi4vLi4vLi4vRGlhZ25vc3RpY0NvZGUnO1xuaW1wb3J0IHsgRGlhZ25vc3RpY01lc3NhZ2UgfSBmcm9tICcuLi8uLi8uLi8uLi9EaWFnbm9zdGljTWVzc2FnZSc7XG5pbXBvcnQgeyBXcmFwcGFibGVUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFNjcmlwdEJ1aWxkZXIgfSBmcm9tICcuLi8uLi8uLi9zYic7XG5pbXBvcnQgeyBWaXNpdE9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBCdWlsdGluTWVtYmVyQ2FsbCB9IGZyb20gJy4uLy4uL0J1aWx0aW5NZW1iZXJDYWxsJztcbmltcG9ydCB7IE1lbWJlckxpa2VFeHByZXNzaW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgZXhwb3J0LW5hbWVcbmV4cG9ydCBjbGFzcyBTdG9yYWdlRm9yIGV4dGVuZHMgQnVpbHRpbk1lbWJlckNhbGwge1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSB0eXBlOiBXcmFwcGFibGVUeXBlKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBlbWl0Q2FsbChcbiAgICBzYjogU2NyaXB0QnVpbGRlcixcbiAgICBfZnVuYzogTWVtYmVyTGlrZUV4cHJlc3Npb24sXG4gICAgbm9kZTogdHMuQ2FsbEV4cHJlc3Npb24sXG4gICAgb3B0aW9uc0luOiBWaXNpdE9wdGlvbnMsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHByZWZpeCA9IHNiLmNvbnRleHQuYW5hbHlzaXMuZXh0cmFjdFN0b3JhZ2VLZXkobm9kZSk7XG4gICAgaWYgKHByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBwYXJlbnQgPSB0c1V0aWxzLm5vZGUuZ2V0UGFyZW50KG5vZGUpO1xuICAgICAgY29uc3QgcGFyZW50Q2xhc3MgPSB0c1V0aWxzLm5vZGUuZ2V0Rmlyc3RBbmNlc3RvckJ5VGVzdChwYXJlbnQsIHRzLmlzQ2xhc3NEZWNsYXJhdGlvbik7XG4gICAgICBpZiAoXG4gICAgICAgICF0cy5pc1Byb3BlcnR5RGVjbGFyYXRpb24ocGFyZW50KSB8fFxuICAgICAgICBwYXJlbnRDbGFzcyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICFzYi5jb250ZXh0LmFuYWx5c2lzLmlzU21hcnRDb250cmFjdChwYXJlbnRDbGFzcylcbiAgICAgICkge1xuICAgICAgICBzYi5jb250ZXh0LnJlcG9ydEVycm9yKFxuICAgICAgICAgIHBhcmVudCxcbiAgICAgICAgICBEaWFnbm9zdGljQ29kZS5JbnZhbGlkU3RydWN0dXJlZFN0b3JhZ2VGb3IsXG4gICAgICAgICAgRGlhZ25vc3RpY01lc3NhZ2UuSW52YWxpZFN0cnVjdHVyZWRTdG9yYWdlRm9yUHJvcGVydHksXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBvcHRpb25zID0gc2IucHVzaFZhbHVlT3B0aW9ucyhvcHRpb25zSW4pO1xuICAgIC8vIFt2YWxdXG4gICAgc2IuZW1pdEhlbHBlcihub2RlLCBvcHRpb25zLCBzYi5oZWxwZXJzLmNyZWF0ZVN0cnVjdHVyZWRTdG9yYWdlKHsgdHlwZTogdGhpcy50eXBlLCBwcmVmaXggfSkpO1xuICB9XG59XG4iXX0=