@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
46 lines (44 loc) • 8.31 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const ts_utils_1 = require("@neo-one/ts-utils");
const DiagnosticCode_1 = require("../../../../DiagnosticCode");
const DiagnosticMessage_1 = require("../../../../DiagnosticMessage");
const SmartContractForBase_1 = require("../SmartContractForBase");
class LinkedSmartContractFor extends SmartContractForBase_1.SmartContractForBase {
emitAdditionalProperties(sb, _func, node, options) {
const scriptHash = this.getScriptHash(sb, node);
if (scriptHash !== undefined) {
sb.emitOp(node, 'DUP');
sb.emitPushString(node, 'address');
sb.emitPushBuffer(node, scriptHash);
sb.emitHelper(node, options, sb.helpers.wrapBuffer);
sb.emitHelper(node, options, sb.helpers.setDataPropertyObjectProperty);
}
}
emitInvoke(sb, _func, node, prop, _addressName, callBuffer, _options) {
const scriptHash = this.getScriptHash(sb, node);
if (scriptHash !== undefined) {
sb.emitOp(prop, 'CALL_E', Buffer.concat([callBuffer, scriptHash]));
}
}
getScriptHash(sb, node) {
const type = sb.context.analysis.getType(node);
if (type === undefined) {
return undefined;
}
const symbol = sb.context.analysis.getSymbolForType(node, type);
if (symbol === undefined) {
return undefined;
}
const decl = ts_utils_1.tsUtils.symbol.getValueDeclaration(symbol);
if (decl === undefined) {
sb.context.reportError(node, DiagnosticCode_1.DiagnosticCode.InvalidLinkedSmartContract, DiagnosticMessage_1.DiagnosticMessage.InvalidLinkedSmartContractDeclaration);
return undefined;
}
const filePath = ts_utils_1.tsUtils.file.getFilePath(ts_utils_1.tsUtils.node.getSourceFile(decl));
const name = ts_utils_1.tsUtils.symbol.getName(symbol);
return sb.getLinkedScriptHash(node, filePath, name);
}
}
exports.LinkedSmartContractFor = LinkedSmartContractFor;
//# sourceMappingURL=data:application/json;charset=utf8;base64,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YnVpbHRpbnMvY29udHJhY3QvbGlua2VkU21hcnRDb250cmFjdC9mb3IuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBVSW50MTYwIH0gZnJvbSAnQG5lby1vbmUvY2xpZW50LWNvbW1vbic7XG5pbXBvcnQgeyB0c1V0aWxzIH0gZnJvbSAnQG5lby1vbmUvdHMtdXRpbHMnO1xuaW1wb3J0IHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuaW1wb3J0IHsgRGlhZ25vc3RpY0NvZGUgfSBmcm9tICcuLi8uLi8uLi8uLi9EaWFnbm9zdGljQ29kZSc7XG5pbXBvcnQgeyBEaWFnbm9zdGljTWVzc2FnZSB9IGZyb20gJy4uLy4uLy4uLy4uL0RpYWdub3N0aWNNZXNzYWdlJztcbmltcG9ydCB7IFNjcmlwdEJ1aWxkZXIgfSBmcm9tICcuLi8uLi8uLi9zYic7XG5pbXBvcnQgeyBOYW1lIH0gZnJvbSAnLi4vLi4vLi4vc2NvcGUnO1xuaW1wb3J0IHsgVmlzaXRPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgTWVtYmVyTGlrZUV4cHJlc3Npb24gfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBTbWFydENvbnRyYWN0Rm9yQmFzZSB9IGZyb20gJy4uL1NtYXJ0Q29udHJhY3RGb3JCYXNlJztcblxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lIGV4cG9ydC1uYW1lXG5leHBvcnQgY2xhc3MgTGlua2VkU21hcnRDb250cmFjdEZvciBleHRlbmRzIFNtYXJ0Q29udHJhY3RGb3JCYXNlIHtcbiAgcHJvdGVjdGVkIGVtaXRBZGRpdGlvbmFsUHJvcGVydGllcyhcbiAgICBzYjogU2NyaXB0QnVpbGRlcixcbiAgICBfZnVuYzogTWVtYmVyTGlrZUV4cHJlc3Npb24sXG4gICAgbm9kZTogdHMuQ2FsbEV4cHJlc3Npb24sXG4gICAgb3B0aW9uczogVmlzaXRPcHRpb25zLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBzY3JpcHRIYXNoID0gdGhpcy5nZXRTY3JpcHRIYXNoKHNiLCBub2RlKTtcbiAgICBpZiAoc2NyaXB0SGFzaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBbb2JqZWN0VmFsLCBvYmplY3RWYWxdXG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RVUCcpO1xuICAgICAgLy8gWydhZGRyZXNzJywgb2JqZWN0VmFsLCBvYmplY3RWYWxdXG4gICAgICBzYi5lbWl0UHVzaFN0cmluZyhub2RlLCAnYWRkcmVzcycpO1xuICAgICAgLy8gW2FkZHJlc3MsICdhZGRyZXNzJywgb2JqZWN0VmFsLCBvYmplY3RWYWxdXG4gICAgICBzYi5lbWl0UHVzaEJ1ZmZlcihub2RlLCBzY3JpcHRIYXNoKTtcbiAgICAgIC8vIFt2YWwsICdhZGRyZXNzJywgb2JqZWN0VmFsLCBvYmplY3RWYWxdXG4gICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnMsIHNiLmhlbHBlcnMud3JhcEJ1ZmZlcik7XG4gICAgICAvLyBbb2JqZWN0VmFsXVxuICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBvcHRpb25zLCBzYi5oZWxwZXJzLnNldERhdGFQcm9wZXJ0eU9iamVjdFByb3BlcnR5KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZW1pdEludm9rZShcbiAgICBzYjogU2NyaXB0QnVpbGRlcixcbiAgICBfZnVuYzogTWVtYmVyTGlrZUV4cHJlc3Npb24sXG4gICAgbm9kZTogdHMuQ2FsbEV4cHJlc3Npb24sXG4gICAgcHJvcDogdHMuRGVjbGFyYXRpb24sXG4gICAgX2FkZHJlc3NOYW1lOiBOYW1lLFxuICAgIGNhbGxCdWZmZXI6IEJ1ZmZlcixcbiAgICBfb3B0aW9uczogVmlzaXRPcHRpb25zLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBzY3JpcHRIYXNoID0gdGhpcy5nZXRTY3JpcHRIYXNoKHNiLCBub2RlKTtcbiAgICBpZiAoc2NyaXB0SGFzaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBbcmVzdWx0XVxuICAgICAgc2IuZW1pdE9wKHByb3AsICdDQUxMX0UnLCBCdWZmZXIuY29uY2F0KFtjYWxsQnVmZmVyLCBzY3JpcHRIYXNoXSkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2NyaXB0SGFzaChzYjogU2NyaXB0QnVpbGRlciwgbm9kZTogdHMuQ2FsbEV4cHJlc3Npb24pOiBVSW50MTYwIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCB0eXBlID0gc2IuY29udGV4dC5hbmFseXNpcy5nZXRUeXBlKG5vZGUpO1xuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHN5bWJvbCA9IHNiLmNvbnRleHQuYW5hbHlzaXMuZ2V0U3ltYm9sRm9yVHlwZShub2RlLCB0eXBlKTtcbiAgICBpZiAoc3ltYm9sID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGRlY2wgPSB0c1V0aWxzLnN5bWJvbC5nZXRWYWx1ZURlY2xhcmF0aW9uKHN5bWJvbCk7XG4gICAgaWYgKGRlY2wgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIHNiLmNvbnRleHQucmVwb3J0RXJyb3IoXG4gICAgICAgIG5vZGUsXG4gICAgICAgIERpYWdub3N0aWNDb2RlLkludmFsaWRMaW5rZWRTbWFydENvbnRyYWN0LFxuICAgICAgICBEaWFnbm9zdGljTWVzc2FnZS5JbnZhbGlkTGlua2VkU21hcnRDb250cmFjdERlY2xhcmF0aW9uLFxuICAgICAgKTtcblxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZVBhdGggPSB0c1V0aWxzLmZpbGUuZ2V0RmlsZVBhdGgodHNVdGlscy5ub2RlLmdldFNvdXJjZUZpbGUoZGVjbCkpO1xuICAgIGNvbnN0IG5hbWUgPSB0c1V0aWxzLnN5bWJvbC5nZXROYW1lKHN5bWJvbCk7XG5cbiAgICByZXR1cm4gc2IuZ2V0TGlua2VkU2NyaXB0SGFzaChub2RlLCBmaWxlUGF0aCwgbmFtZSk7XG4gIH1cbn1cbiJdfQ==