@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
45 lines (43 loc) • 6.79 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const ts_utils_1 = require("@neo-one/ts-utils");
const constants_1 = require("../../constants");
const Helper_1 = require("../Helper");
class FunctionLikeHelper extends Helper_1.Helper {
emit(sb, node, optionsIn) {
if (!ts_utils_1.tsUtils.overload.isImplementation(node)) {
return;
}
if (sb.context.analysis.isSmartContractMixinFunction(node)) {
return;
}
const func = node;
const options = sb.pushValueOptions(optionsIn);
let name;
const nodeName = ts_utils_1.tsUtils.node.getName(node);
if (nodeName !== undefined) {
name = sb.scope.add(ts_utils_1.tsUtils.node.getNameOrThrow(node));
}
sb.emitHelper(func, options, sb.helpers.createCallArray);
sb.emitHelper(func, options, sb.helpers.createFunctionObject({
property: constants_1.InternalObjectProperty.Call,
}));
if (ts_utils_1.tsUtils.modifier.isNamedExport(node) || ts_utils_1.tsUtils.modifier.isDefaultExport(node)) {
sb.emitOp(node, 'DUP');
sb.emitHelper(node, options, sb.helpers.exportSingle({
name: ts_utils_1.tsUtils.modifier.isNamedExport(node) ? ts_utils_1.tsUtils.node.getNameOrThrow(node) : undefined,
defaultExport: ts_utils_1.tsUtils.modifier.isDefaultExport(node),
}));
}
if (!optionsIn.pushValue) {
if (name === undefined) {
sb.emitOp(node, 'DROP');
}
else {
sb.scope.set(sb, node, options, name);
}
}
}
}
exports.FunctionLikeHelper = FunctionLikeHelper;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkZ1bmN0aW9uTGlrZUhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGdEQUF5RTtBQUV6RSwrQ0FBeUQ7QUFJekQsc0NBQW1DO0FBSW5DLE1BQWEsa0JBQW1CLFNBQVEsZUFBc0Q7SUFDckYsSUFBSSxDQUFDLEVBQWlCLEVBQUUsSUFBb0QsRUFBRSxTQUF1QjtRQUMxRyxJQUFJLENBQUMsa0JBQU8sQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDNUMsT0FBTztTQUNSO1FBQ0QsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMxRCxPQUFPO1NBQ1I7UUFFRCxNQUFNLElBQUksR0FBaUMsSUFBVyxDQUFDO1FBRXZELE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvQyxJQUFJLElBQXNCLENBQUM7UUFDM0IsTUFBTSxRQUFRLEdBQUcsa0JBQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLElBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtZQUMxQixJQUFJLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsa0JBQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDeEQ7UUFFRCxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUV6RCxFQUFFLENBQUMsVUFBVSxDQUNYLElBQUksRUFDSixPQUFPLEVBQ1AsRUFBRSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQztZQUM5QixRQUFRLEVBQUUsa0NBQXNCLENBQUMsSUFBSTtTQUN0QyxDQUFDLENBQ0gsQ0FBQztRQUNGLElBQUksa0JBQU8sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLGtCQUFPLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUVsRixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUV2QixFQUFFLENBQUMsVUFBVSxDQUNYLElBQUksRUFDSixPQUFPLEVBQ1AsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7Z0JBQ3RCLElBQUksRUFBRSxrQkFBTyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFPLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztnQkFDMUYsYUFBYSxFQUFFLGtCQUFPLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUM7YUFDdEQsQ0FBQyxDQUNILENBQUM7U0FDSDtRQUVELElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFO1lBQ3hCLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRTtnQkFFdEIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDekI7aUJBQU07Z0JBRUwsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDdkM7U0FDRjtJQUNILENBQUM7Q0FDRjtBQW5ERCxnREFtREMiLCJmaWxlIjoibmVvLW9uZS1zbWFydC1jb250cmFjdC1jb21waWxlci9zcmMvY29tcGlsZS9oZWxwZXIvZnVuY3Rpb24vRnVuY3Rpb25MaWtlSGVscGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQm9kaWVkTm9kZSwgUGFyYW1ldGVyZWROb2RlLCB0c1V0aWxzIH0gZnJvbSAnQG5lby1vbmUvdHMtdXRpbHMnO1xuaW1wb3J0IHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuaW1wb3J0IHsgSW50ZXJuYWxPYmplY3RQcm9wZXJ0eSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBTY3JpcHRCdWlsZGVyIH0gZnJvbSAnLi4vLi4vc2InO1xuaW1wb3J0IHsgTmFtZSB9IGZyb20gJy4uLy4uL3Njb3BlJztcbmltcG9ydCB7IFZpc2l0T3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEhlbHBlciB9IGZyb20gJy4uL0hlbHBlcic7XG5cbi8vIElucHV0OiBbXVxuLy8gT3V0cHV0OiBbZmFycl1cbmV4cG9ydCBjbGFzcyBGdW5jdGlvbkxpa2VIZWxwZXIgZXh0ZW5kcyBIZWxwZXI8dHMuRnVuY3Rpb25EZWNsYXJhdGlvbiB8IHRzLkZ1bmN0aW9uRXhwcmVzc2lvbj4ge1xuICBwdWJsaWMgZW1pdChzYjogU2NyaXB0QnVpbGRlciwgbm9kZTogdHMuRnVuY3Rpb25EZWNsYXJhdGlvbiB8IHRzLkZ1bmN0aW9uRXhwcmVzc2lvbiwgb3B0aW9uc0luOiBWaXNpdE9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAoIXRzVXRpbHMub3ZlcmxvYWQuaXNJbXBsZW1lbnRhdGlvbihub2RlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoc2IuY29udGV4dC5hbmFseXNpcy5pc1NtYXJ0Q29udHJhY3RNaXhpbkZ1bmN0aW9uKG5vZGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZSBuby1hbnlcbiAgICBjb25zdCBmdW5jOiBCb2RpZWROb2RlICYgUGFyYW1ldGVyZWROb2RlID0gbm9kZSBhcyBhbnk7XG5cbiAgICBjb25zdCBvcHRpb25zID0gc2IucHVzaFZhbHVlT3B0aW9ucyhvcHRpb25zSW4pO1xuICAgIGxldCBuYW1lOiBOYW1lIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IG5vZGVOYW1lID0gdHNVdGlscy5ub2RlLmdldE5hbWUobm9kZSk7XG4gICAgaWYgKG5vZGVOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG5hbWUgPSBzYi5zY29wZS5hZGQodHNVdGlscy5ub2RlLmdldE5hbWVPclRocm93KG5vZGUpKTtcbiAgICB9XG4gICAgLy8gW2NhbGxBcnJheV1cbiAgICBzYi5lbWl0SGVscGVyKGZ1bmMsIG9wdGlvbnMsIHNiLmhlbHBlcnMuY3JlYXRlQ2FsbEFycmF5KTtcbiAgICAvLyBbY2FsbE9iamVjdFZhbF1cbiAgICBzYi5lbWl0SGVscGVyKFxuICAgICAgZnVuYyxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBzYi5oZWxwZXJzLmNyZWF0ZUZ1bmN0aW9uT2JqZWN0KHtcbiAgICAgICAgcHJvcGVydHk6IEludGVybmFsT2JqZWN0UHJvcGVydHkuQ2FsbCxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgaWYgKHRzVXRpbHMubW9kaWZpZXIuaXNOYW1lZEV4cG9ydChub2RlKSB8fCB0c1V0aWxzLm1vZGlmaWVyLmlzRGVmYXVsdEV4cG9ydChub2RlKSkge1xuICAgICAgLy8gW2NhbGxPYmplY3RWYWwsIGNhbGxPYmplY3RWYWxdXG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RVUCcpO1xuICAgICAgLy8gW2NhbGxPYmplY3RWYWxdXG4gICAgICBzYi5lbWl0SGVscGVyKFxuICAgICAgICBub2RlLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICBzYi5oZWxwZXJzLmV4cG9ydFNpbmdsZSh7XG4gICAgICAgICAgbmFtZTogdHNVdGlscy5tb2RpZmllci5pc05hbWVkRXhwb3J0KG5vZGUpID8gdHNVdGlscy5ub2RlLmdldE5hbWVPclRocm93KG5vZGUpIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGRlZmF1bHRFeHBvcnQ6IHRzVXRpbHMubW9kaWZpZXIuaXNEZWZhdWx0RXhwb3J0KG5vZGUpLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zSW4ucHVzaFZhbHVlKSB7XG4gICAgICBpZiAobmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFtdXG4gICAgICAgIHNiLmVtaXRPcChub2RlLCAnRFJPUCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gW11cbiAgICAgICAgc2Iuc2NvcGUuc2V0KHNiLCBub2RlLCBvcHRpb25zLCBuYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==