UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

51 lines (49 loc) 2.24 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SmartContractAddress = 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 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=address.js.map