aboutsummaryrefslogtreecommitdiffstats
path: root/src/tuplr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/tuplr.cpp')
-rw-r--r--src/tuplr.cpp43
1 files changed, 26 insertions, 17 deletions
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<string,string> args;
list<string> 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<string,string>::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<string,string>::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;
}