#include "coco/IR/Module.h"
#include "coco/IR/Data.h"
-#include <ostream>
#include <memory>
namespace enco
struct Backend
{
-public:
- Backend(std::ostream &os) : _os(os)
- {
- // DO NOTHING
- }
+ virtual ~Backend() = default;
-public:
- void compile(coco::Module *m, coco::Data *d);
-
-private:
- std::ostream &_os;
+ virtual void compile(coco::Module *m, coco::Data *d) = 0;
};
} // namespace enco
#include <nncc/foundation/Memory.h>
#include <stdexcept>
+#include <iostream>
using nncc::foundation::make_unique;
+using namespace enco;
namespace
{
return false;
}
-} // namespace
-
-namespace enco
+class BackendImpl final : public enco::Backend
{
+public:
+ BackendImpl() = default;
+
+public:
+ void compile(coco::Module *m, coco::Data *d) override;
+};
-void Backend::compile(coco::Module *m, coco::Data *d)
+void BackendImpl::compile(coco::Module *m, coco::Data *d)
{
Code code{m, d};
// TODO Run various transforms over enco::Code
- _os << CppCode{&code} << std::endl;
+ std::cout << CppCode{&code} << std::endl;
}
} // namespace enco
std::unique_ptr<enco::Backend> make_backend(const cmdline::View &)
{
- return make_unique<enco::Backend>(std::cout);
+ return make_unique<::BackendImpl>();
}