From 31586bbff8588f8eab127bf57bc311d38ad8e1e0 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Tue, 6 Oct 2009 20:29:06 +0000 Subject: Fully abstract backend interface. git-svn-id: http://svn.drobilla.net/resp/tuplr@197 ad02d1e2-f140-0410-9f75-f8b11f17cedd --- src/tuplr.cpp | 43 ++++++++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 17 deletions(-) (limited to 'src/tuplr.cpp') diff --git a/src/tuplr.cpp b/src/tuplr.cpp index f8cc246..481885c 100644 --- a/src/tuplr.cpp +++ b/src/tuplr.cpp @@ -48,16 +48,7 @@ print_usage(char* name, bool error) int main(int argc, char** argv) { - PEnv penv; - TEnv tenv(penv); - initLang(penv, tenv); - - Engine* engine = tuplr_new_engine(); - CEnv* cenv = new CEnv(penv, tenv, engine); - - cenv->push(); - Object::pool.lock(); - + // Read command line arguments map args; list files; for (int i = 1; i < argc; ++i) { @@ -78,17 +69,35 @@ main(int argc, char** argv) } } + PEnv penv; + TEnv tenv(penv); + initLang(penv, tenv); + + Engine* engine = NULL; + + map::const_iterator a = args.find("-b"); + const string backend_name = (a != args.end() ? a->second : "llvm"); + + if (backend_name == "llvm") + engine = tuplr_new_llvm_engine(); + + if (!engine) { + std::cerr << "Unable to open backend " << backend_name << std::endl; + return 1; + } + + CEnv* cenv = new CEnv(penv, tenv, engine); cenv->args = args; + cenv->push(); + + Object::pool.lock(); int ret = 0; - string output; - map::const_iterator a = args.find("-o"); - if (a != args.end()) - output = a->second; + a = args.find("-o"); + const string output = (a != args.end()) ? a->second : ""; - a = args.find("-p"); - if (a != args.end()) { + if (args.find("-p") != args.end()) { ifstream is(files.front().c_str()); if (is.good()) { Cursor loc; @@ -131,7 +140,7 @@ main(int argc, char** argv) } delete cenv; - tuplr_free_engine(engine); + delete engine; return ret; } -- cgit v1.2.1