@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
63 lines (61 loc) • 10.7 kB
JavaScript
;
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 NodeCompiler_1 = require("../NodeCompiler");
class ExportDeclarationCompiler extends NodeCompiler_1.NodeCompiler {
constructor() {
super(...arguments);
this.kind = typescript_1.default.SyntaxKind.ExportDeclaration;
}
visitNode(sb, node, optionsIn) {
const options = sb.pushValueOptions(optionsIn);
const getName = (namedExport) => {
let name = ts_utils_1.tsUtils.node.getName(namedExport);
const alias = ts_utils_1.tsUtils.importExport.getAliasName(namedExport);
if (alias !== undefined) {
name = alias;
}
return name;
};
const getExportName = (namedExport) => ts_utils_1.tsUtils.node.getName(namedExport);
const moduleSpecifier = ts_utils_1.tsUtils.importExport.getModuleSpecifierSourceFile(sb.context.typeChecker, node);
sb.emitHelper(node, options, sb.helpers.getCurrentModule);
if (moduleSpecifier === undefined) {
ts_utils_1.tsUtils.exportDeclaration
.getNamedExports(node)
.filter((namedExport) => ts_utils_1.tsUtils.exportSpecifier
.getLocalTargetDeclarations(sb.context.typeChecker, namedExport)
.some((decl) => !ts_utils_1.tsUtils.declaration.isAmbient(decl)))
.filter((namedExport) => {
const symbol = sb.context.analysis.getSymbol(namedExport);
return (symbol !== undefined &&
ts_utils_1.tsUtils.symbol.getDeclarations(symbol).some((decl) => !ts_utils_1.tsUtils.declaration.isAmbient(decl)));
})
.forEach((namedExport) => {
sb.emitOp(node, 'DUP');
sb.scope.get(sb, node, options, getName(namedExport));
sb.emitHelper(node, options, sb.helpers.export({ name: getExportName(namedExport) }));
});
}
else {
sb.loadModule(moduleSpecifier);
ts_utils_1.tsUtils.exportDeclaration
.getNamedExports(node)
.filter((namedExport) => sb.hasExport(moduleSpecifier, getName(namedExport)))
.forEach((namedExport) => {
sb.emitOp(node, 'SWAP');
sb.emitOp(node, 'TUCK');
sb.emitOp(node, 'OVER');
sb.emitPushString(node, getName(namedExport));
sb.emitOp(node, 'PICKITEM');
sb.emitHelper(node, options, sb.helpers.export({ name: getExportName(namedExport) }));
});
sb.emitOp(node, 'DROP');
}
sb.emitOp(node, 'DROP');
}
}
exports.ExportDeclarationCompiler = ExportDeclarationCompiler;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkV4cG9ydERlY2xhcmF0aW9uQ29tcGlsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsZ0RBQTRDO0FBQzVDLG9FQUE0QjtBQUM1QixrREFBK0M7QUFJL0MsTUFBYSx5QkFBMEIsU0FBUSwyQkFBa0M7SUFBakY7O1FBQ2tCLFNBQUksR0FBRyxvQkFBRSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQztJQXdFekQsQ0FBQztJQXRFUSxTQUFTLENBQUMsRUFBaUIsRUFBRSxJQUEwQixFQUFFLFNBQXVCO1FBQ3JGLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUUvQyxNQUFNLE9BQU8sR0FBRyxDQUFDLFdBQStCLEVBQUUsRUFBRTtZQUNsRCxJQUFJLElBQUksR0FBRyxrQkFBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDN0MsTUFBTSxLQUFLLEdBQUcsa0JBQU8sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzdELElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRTtnQkFDdkIsSUFBSSxHQUFHLEtBQUssQ0FBQzthQUNkO1lBRUQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUM7UUFFRixNQUFNLGFBQWEsR0FBRyxDQUFDLFdBQStCLEVBQUUsRUFBRSxDQUFDLGtCQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUU3RixNQUFNLGVBQWUsR0FBRyxrQkFBTyxDQUFDLFlBQVksQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUd4RyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzFELElBQUksZUFBZSxLQUFLLFNBQVMsRUFBRTtZQUNqQyxrQkFBTyxDQUFDLGlCQUFpQjtpQkFDdEIsZUFBZSxDQUFDLElBQUksQ0FBQztpQkFDckIsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FDdEIsa0JBQU8sQ0FBQyxlQUFlO2lCQUNwQiwwQkFBMEIsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUM7aUJBQy9ELElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxrQkFBTyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDeEQ7aUJBQ0EsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUU7Z0JBQ3RCLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFFMUQsT0FBTyxDQUNMLE1BQU0sS0FBSyxTQUFTO29CQUNwQixrQkFBTyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLGtCQUFPLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUM1RixDQUFDO1lBQ0osQ0FBQyxDQUFDO2lCQUNELE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO2dCQUV2QixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFFdkIsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7Z0JBRXRELEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxhQUFhLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDeEYsQ0FBQyxDQUFDLENBQUM7U0FDTjthQUFNO1lBRUwsRUFBRSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUMvQixrQkFBTyxDQUFDLGlCQUFpQjtpQkFDdEIsZUFBZSxDQUFDLElBQUksQ0FBQztpQkFDckIsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztpQkFDNUUsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUU7Z0JBRXZCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUV4QixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFFeEIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBRXhCLEVBQUUsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUU5QyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFFNUIsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLGFBQWEsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN4RixDQUFDLENBQUMsQ0FBQztZQUVMLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ3pCO1FBR0QsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDMUIsQ0FBQztDQUNGO0FBekVELDhEQXlFQyIsImZpbGUiOiJuZW8tb25lLXNtYXJ0LWNvbnRyYWN0LWNvbXBpbGVyL3NyYy9jb21waWxlL2RlY2xhcmF0aW9uL0V4cG9ydERlY2xhcmF0aW9uQ29tcGlsZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0c1V0aWxzIH0gZnJvbSAnQG5lby1vbmUvdHMtdXRpbHMnO1xuaW1wb3J0IHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuaW1wb3J0IHsgTm9kZUNvbXBpbGVyIH0gZnJvbSAnLi4vTm9kZUNvbXBpbGVyJztcbmltcG9ydCB7IFNjcmlwdEJ1aWxkZXIgfSBmcm9tICcuLi9zYic7XG5pbXBvcnQgeyBWaXNpdE9wdGlvbnMgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBFeHBvcnREZWNsYXJhdGlvbkNvbXBpbGVyIGV4dGVuZHMgTm9kZUNvbXBpbGVyPHRzLkV4cG9ydERlY2xhcmF0aW9uPiB7XG4gIHB1YmxpYyByZWFkb25seSBraW5kID0gdHMuU3ludGF4S2luZC5FeHBvcnREZWNsYXJhdGlvbjtcblxuICBwdWJsaWMgdmlzaXROb2RlKHNiOiBTY3JpcHRCdWlsZGVyLCBub2RlOiB0cy5FeHBvcnREZWNsYXJhdGlvbiwgb3B0aW9uc0luOiBWaXNpdE9wdGlvbnMpOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID0gc2IucHVzaFZhbHVlT3B0aW9ucyhvcHRpb25zSW4pO1xuXG4gICAgY29uc3QgZ2V0TmFtZSA9IChuYW1lZEV4cG9ydDogdHMuRXhwb3J0U3BlY2lmaWVyKSA9PiB7XG4gICAgICBsZXQgbmFtZSA9IHRzVXRpbHMubm9kZS5nZXROYW1lKG5hbWVkRXhwb3J0KTtcbiAgICAgIGNvbnN0IGFsaWFzID0gdHNVdGlscy5pbXBvcnRFeHBvcnQuZ2V0QWxpYXNOYW1lKG5hbWVkRXhwb3J0KTtcbiAgICAgIGlmIChhbGlhcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5hbWUgPSBhbGlhcztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldEV4cG9ydE5hbWUgPSAobmFtZWRFeHBvcnQ6IHRzLkV4cG9ydFNwZWNpZmllcikgPT4gdHNVdGlscy5ub2RlLmdldE5hbWUobmFtZWRFeHBvcnQpO1xuXG4gICAgY29uc3QgbW9kdWxlU3BlY2lmaWVyID0gdHNVdGlscy5pbXBvcnRFeHBvcnQuZ2V0TW9kdWxlU3BlY2lmaWVyU291cmNlRmlsZShzYi5jb250ZXh0LnR5cGVDaGVja2VyLCBub2RlKTtcblxuICAgIC8vIFtleHBvcnRzXVxuICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgb3B0aW9ucywgc2IuaGVscGVycy5nZXRDdXJyZW50TW9kdWxlKTtcbiAgICBpZiAobW9kdWxlU3BlY2lmaWVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRzVXRpbHMuZXhwb3J0RGVjbGFyYXRpb25cbiAgICAgICAgLmdldE5hbWVkRXhwb3J0cyhub2RlKVxuICAgICAgICAuZmlsdGVyKChuYW1lZEV4cG9ydCkgPT5cbiAgICAgICAgICB0c1V0aWxzLmV4cG9ydFNwZWNpZmllclxuICAgICAgICAgICAgLmdldExvY2FsVGFyZ2V0RGVjbGFyYXRpb25zKHNiLmNvbnRleHQudHlwZUNoZWNrZXIsIG5hbWVkRXhwb3J0KVxuICAgICAgICAgICAgLnNvbWUoKGRlY2wpID0+ICF0c1V0aWxzLmRlY2xhcmF0aW9uLmlzQW1iaWVudChkZWNsKSksXG4gICAgICAgIClcbiAgICAgICAgLmZpbHRlcigobmFtZWRFeHBvcnQpID0+IHtcbiAgICAgICAgICBjb25zdCBzeW1ib2wgPSBzYi5jb250ZXh0LmFuYWx5c2lzLmdldFN5bWJvbChuYW1lZEV4cG9ydCk7XG5cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgc3ltYm9sICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIHRzVXRpbHMuc3ltYm9sLmdldERlY2xhcmF0aW9ucyhzeW1ib2wpLnNvbWUoKGRlY2wpID0+ICF0c1V0aWxzLmRlY2xhcmF0aW9uLmlzQW1iaWVudChkZWNsKSlcbiAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICAgICAuZm9yRWFjaCgobmFtZWRFeHBvcnQpID0+IHtcbiAgICAgICAgICAvLyBbZXhwb3J0cywgZXhwb3J0c11cbiAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RVUCcpO1xuICAgICAgICAgIC8vIFt2YWwsIGV4cG9ydHMsIGV4cG9ydHNdXG4gICAgICAgICAgc2Iuc2NvcGUuZ2V0KHNiLCBub2RlLCBvcHRpb25zLCBnZXROYW1lKG5hbWVkRXhwb3J0KSk7XG4gICAgICAgICAgLy8gW2V4cG9ydHNdXG4gICAgICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBvcHRpb25zLCBzYi5oZWxwZXJzLmV4cG9ydCh7IG5hbWU6IGdldEV4cG9ydE5hbWUobmFtZWRFeHBvcnQpIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFttb2R1bGVFeHBvcnRzLCBleHBvcnRzXVxuICAgICAgc2IubG9hZE1vZHVsZShtb2R1bGVTcGVjaWZpZXIpO1xuICAgICAgdHNVdGlscy5leHBvcnREZWNsYXJhdGlvblxuICAgICAgICAuZ2V0TmFtZWRFeHBvcnRzKG5vZGUpXG4gICAgICAgIC5maWx0ZXIoKG5hbWVkRXhwb3J0KSA9PiBzYi5oYXNFeHBvcnQobW9kdWxlU3BlY2lmaWVyLCBnZXROYW1lKG5hbWVkRXhwb3J0KSkpXG4gICAgICAgIC5mb3JFYWNoKChuYW1lZEV4cG9ydCkgPT4ge1xuICAgICAgICAgIC8vIFtleHBvcnRzLCBtb2R1bGVFeHBvcnRzXVxuICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnU1dBUCcpO1xuICAgICAgICAgIC8vIFtleHBvcnRzLCBtb2R1bGVFeHBvcnRzLCBleHBvcnRzXVxuICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnVFVDSycpO1xuICAgICAgICAgIC8vIFttb2R1bGVFeHBvcnRzLCBleHBvcnRzLCBtb2R1bGVFeHBvcnRzLCBleHBvcnRzXVxuICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnT1ZFUicpO1xuICAgICAgICAgIC8vIFtuYW1lLCBtb2R1bGVFeHBvcnRzLCBleHBvcnRzLCBtb2R1bGVFeHBvcnRzLCBleHBvcnRzXVxuICAgICAgICAgIHNiLmVtaXRQdXNoU3RyaW5nKG5vZGUsIGdldE5hbWUobmFtZWRFeHBvcnQpKTtcbiAgICAgICAgICAvLyBbdmFsLCBleHBvcnRzLCBtb2R1bGVFeHBvcnRzLCBleHBvcnRzXVxuICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnUElDS0lURU0nKTtcbiAgICAgICAgICAvLyBbbW9kdWxlRXhwb3J0cywgZXhwb3J0c11cbiAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIG9wdGlvbnMsIHNiLmhlbHBlcnMuZXhwb3J0KHsgbmFtZTogZ2V0RXhwb3J0TmFtZShuYW1lZEV4cG9ydCkgfSkpO1xuICAgICAgICB9KTtcbiAgICAgIC8vIFtleHBvcnRzXVxuICAgICAgc2IuZW1pdE9wKG5vZGUsICdEUk9QJyk7XG4gICAgfVxuXG4gICAgLy8gW11cbiAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgfVxufVxuIl19