UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

42 lines (40 loc) 1.56 kB
import { tsUtils } from '@neo-one/ts-utils'; import { InternalObjectProperty } from '../../constants'; import { Helper } from '../Helper'; export class FunctionLikeHelper extends Helper { emit(sb, node, optionsIn) { if (!tsUtils.overload.isImplementation(node)) { return; } if (sb.context.analysis.isSmartContractMixinFunction(node)) { return; } const func = node; const options = sb.pushValueOptions(optionsIn); let name; const nodeName = tsUtils.node.getName(node); if (nodeName !== undefined) { name = sb.scope.add(tsUtils.node.getNameOrThrow(node)); } sb.emitHelper(func, options, sb.helpers.createCallArray); sb.emitHelper(func, options, sb.helpers.createFunctionObject({ property: InternalObjectProperty.Call, })); if (tsUtils.modifier.isNamedExport(node) || tsUtils.modifier.isDefaultExport(node)) { sb.emitOp(node, 'DUP'); sb.emitHelper(node, options, sb.helpers.exportSingle({ name: tsUtils.modifier.isNamedExport(node) ? tsUtils.node.getNameOrThrow(node) : undefined, defaultExport: tsUtils.modifier.isDefaultExport(node), })); } if (!optionsIn.pushValue) { if (name === undefined) { sb.emitOp(node, 'DROP'); } else { sb.scope.set(sb, node, options, name); } } } } //# sourceMappingURL=FunctionLikeHelper.js.map