@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
34 lines (32 loc) • 1.58 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.StorageFor = 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 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=for.js.map