UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

50 lines (48 loc) 7.34 kB
"use strict"; 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 constants_1 = require("../../../../constants"); const types_1 = require("../../types"); class SmartContractAddress { constructor() { this.types = new Set([types_1.BuiltinType.InstanceMemberValue]); } emitValue(sb, node, options, visited = false) { let isLinkedSmartContract = false; if (typescript_1.default.isBindingElement(node)) { const propNode = ts_utils_1.tsUtils.node.getNameNode(node); const propSymbol = sb.context.analysis.getSymbol(propNode); if (propSymbol !== undefined) { const parentSymbol = ts_utils_1.tsUtils.symbol.getParent(propSymbol); if (parentSymbol !== undefined) { const decls = ts_utils_1.tsUtils.symbol.getDeclarations(parentSymbol); if (decls.length > 0) { isLinkedSmartContract = !sb.isCurrentSmartContract(decls[0]); } } } } else { isLinkedSmartContract = !sb.isCurrentSmartContract(ts_utils_1.tsUtils.expression.getExpression(node)); } if (isLinkedSmartContract) { if (!visited && (typescript_1.default.isPropertyAccessExpression(node) || typescript_1.default.isElementAccessExpression(node))) { sb.visit(ts_utils_1.tsUtils.expression.getExpression(node), sb.pushValueOptions(options)); } sb.emitPushString(node, constants_1.ContractPropertyName.address); sb.emitHelper(node, options, sb.helpers.getPropertyObjectProperty); return; } if (visited) { sb.emitOp(node, 'DROP'); } if (options.pushValue) { sb.emitSysCall(node, 'System.ExecutionEngine.GetExecutingScriptHash'); sb.emitHelper(node, options, sb.helpers.wrapBuffer); } } } exports.SmartContractAddress = SmartContractAddress; //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFkZHJlc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsZ0RBQTRDO0FBQzVDLG9FQUE0QjtBQUM1QixxREFBNkQ7QUFHN0QsdUNBQTRGO0FBRzVGLE1BQWEsb0JBQW9CO0lBQWpDO1FBQ2tCLFVBQUssR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLG1CQUFXLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO0lBOENyRSxDQUFDO0lBNUNRLFNBQVMsQ0FBQyxFQUFpQixFQUFFLElBQTBCLEVBQUUsT0FBcUIsRUFBRSxPQUFPLEdBQUcsS0FBSztRQUNwRyxJQUFJLHFCQUFxQixHQUFHLEtBQUssQ0FBQztRQUNsQyxJQUFJLG9CQUFFLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDN0IsTUFBTSxRQUFRLEdBQUcsa0JBQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hELE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMzRCxJQUFJLFVBQVUsS0FBSyxTQUFTLEVBQUU7Z0JBQzVCLE1BQU0sWUFBWSxHQUFHLGtCQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDMUQsSUFBSSxZQUFZLEtBQUssU0FBUyxFQUFFO29CQUM5QixNQUFNLEtBQUssR0FBRyxrQkFBTyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7b0JBQzNELElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQ3BCLHFCQUFxQixHQUFHLENBQUMsRUFBRSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUM5RDtpQkFDRjthQUNGO1NBQ0Y7YUFBTTtZQUNMLHFCQUFxQixHQUFHLENBQUMsRUFBRSxDQUFDLHNCQUFzQixDQUFDLGtCQUFPLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQzVGO1FBRUQsSUFBSSxxQkFBcUIsRUFBRTtZQUN6QixJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsb0JBQUUsQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsSUFBSSxvQkFBRSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7Z0JBRTNGLEVBQUUsQ0FBQyxLQUFLLENBQUMsa0JBQU8sQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2FBQ2hGO1lBR0QsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsZ0NBQW9CLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFdEQsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMseUJBQXlCLENBQUMsQ0FBQztZQUVuRSxPQUFPO1NBQ1I7UUFFRCxJQUFJLE9BQU8sRUFBRTtZQUVYLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ3pCO1FBRUQsSUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFO1lBRXJCLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLCtDQUErQyxDQUFDLENBQUM7WUFFdEUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDckQ7SUFDSCxDQUFDO0NBQ0Y7QUEvQ0Qsb0RBK0NDIiwiZmlsZSI6Im5lby1vbmUtc21hcnQtY29udHJhY3QtY29tcGlsZXIvc3JjL2NvbXBpbGUvYnVpbHRpbnMvY29udHJhY3Qvc21hcnRDb250cmFjdC9hZGRyZXNzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHNVdGlscyB9IGZyb20gJ0BuZW8tb25lL3RzLXV0aWxzJztcbmltcG9ydCB0cyBmcm9tICd0eXBlc2NyaXB0JztcbmltcG9ydCB7IENvbnRyYWN0UHJvcGVydHlOYW1lIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFNjcmlwdEJ1aWxkZXIgfSBmcm9tICcuLi8uLi8uLi9zYic7XG5pbXBvcnQgeyBWaXNpdE9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBCdWlsdGluSW5zdGFuY2VNZW1iZXJWYWx1ZSwgQnVpbHRpblR5cGUsIE1lbWJlckxpa2VFeHByZXNzaW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgZXhwb3J0LW5hbWVcbmV4cG9ydCBjbGFzcyBTbWFydENvbnRyYWN0QWRkcmVzcyBpbXBsZW1lbnRzIEJ1aWx0aW5JbnN0YW5jZU1lbWJlclZhbHVlIHtcbiAgcHVibGljIHJlYWRvbmx5IHR5cGVzID0gbmV3IFNldChbQnVpbHRpblR5cGUuSW5zdGFuY2VNZW1iZXJWYWx1ZV0pO1xuXG4gIHB1YmxpYyBlbWl0VmFsdWUoc2I6IFNjcmlwdEJ1aWxkZXIsIG5vZGU6IE1lbWJlckxpa2VFeHByZXNzaW9uLCBvcHRpb25zOiBWaXNpdE9wdGlvbnMsIHZpc2l0ZWQgPSBmYWxzZSk6IHZvaWQge1xuICAgIGxldCBpc0xpbmtlZFNtYXJ0Q29udHJhY3QgPSBmYWxzZTtcbiAgICBpZiAodHMuaXNCaW5kaW5nRWxlbWVudChub2RlKSkge1xuICAgICAgY29uc3QgcHJvcE5vZGUgPSB0c1V0aWxzLm5vZGUuZ2V0TmFtZU5vZGUobm9kZSk7XG4gICAgICBjb25zdCBwcm9wU3ltYm9sID0gc2IuY29udGV4dC5hbmFseXNpcy5nZXRTeW1ib2wocHJvcE5vZGUpO1xuICAgICAgaWYgKHByb3BTeW1ib2wgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBwYXJlbnRTeW1ib2wgPSB0c1V0aWxzLnN5bWJvbC5nZXRQYXJlbnQocHJvcFN5bWJvbCk7XG4gICAgICAgIGlmIChwYXJlbnRTeW1ib2wgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbnN0IGRlY2xzID0gdHNVdGlscy5zeW1ib2wuZ2V0RGVjbGFyYXRpb25zKHBhcmVudFN5bWJvbCk7XG4gICAgICAgICAgaWYgKGRlY2xzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlzTGlua2VkU21hcnRDb250cmFjdCA9ICFzYi5pc0N1cnJlbnRTbWFydENvbnRyYWN0KGRlY2xzWzBdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaXNMaW5rZWRTbWFydENvbnRyYWN0ID0gIXNiLmlzQ3VycmVudFNtYXJ0Q29udHJhY3QodHNVdGlscy5leHByZXNzaW9uLmdldEV4cHJlc3Npb24obm9kZSkpO1xuICAgIH1cblxuICAgIGlmIChpc0xpbmtlZFNtYXJ0Q29udHJhY3QpIHtcbiAgICAgIGlmICghdmlzaXRlZCAmJiAodHMuaXNQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24obm9kZSkgfHwgdHMuaXNFbGVtZW50QWNjZXNzRXhwcmVzc2lvbihub2RlKSkpIHtcbiAgICAgICAgLy8gW3ZhbF1cbiAgICAgICAgc2IudmlzaXQodHNVdGlscy5leHByZXNzaW9uLmdldEV4cHJlc3Npb24obm9kZSksIHNiLnB1c2hWYWx1ZU9wdGlvbnMob3B0aW9ucykpO1xuICAgICAgfVxuXG4gICAgICAvLyBbc3RyaW5nLCB2YWxdXG4gICAgICBzYi5lbWl0UHVzaFN0cmluZyhub2RlLCBDb250cmFjdFByb3BlcnR5TmFtZS5hZGRyZXNzKTtcbiAgICAgIC8vIFt2YWxdXG4gICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnMsIHNiLmhlbHBlcnMuZ2V0UHJvcGVydHlPYmplY3RQcm9wZXJ0eSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodmlzaXRlZCkge1xuICAgICAgLy8gW11cbiAgICAgIHNiLmVtaXRPcChub2RlLCAnRFJPUCcpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnB1c2hWYWx1ZSkge1xuICAgICAgLy8gW3ZhbHVlXVxuICAgICAgc2IuZW1pdFN5c0NhbGwobm9kZSwgJ1N5c3RlbS5FeGVjdXRpb25FbmdpbmUuR2V0RXhlY3V0aW5nU2NyaXB0SGFzaCcpO1xuICAgICAgLy8gW3ZhbF1cbiAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgb3B0aW9ucywgc2IuaGVscGVycy53cmFwQnVmZmVyKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==