more cleanup in cmakelists
[aqualang.git] / src / main.cpp
blob06fe90eacab2d69515367fc94053fddcdf6841ea
2 #include "private.h"
4 using namespace Aqua;
6 bool read_file(const std::string& path, std::string* dest)
8 std::fstream in;
9 in.open(path, std::ios::in);
10 *dest = std::string((std::istreambuf_iterator<char>(in)), (std::istreambuf_iterator<char>()));
11 return true;
14 void make_argv(Interpreter& ip, size_t start, std::vector<std::string>& args)
16 size_t i;
17 auto arr = ip.makeArray();
18 for(i=start; i<args.size(); i++)
20 arr->add(ip.makeString(args[i]));
22 ip.setGlobal(ip.makeString("ARGV"), arr);
25 int interp_main(std::vector<std::string>& args)
27 std::string fname;
28 std::string source;
29 Interpreter ip;
30 if(args.size() > 1)
32 fname = args[1];
33 if(fname == "-e")
35 source = args[2];
36 args[2] = "<commandline>";
37 make_argv(ip, 2, args);
38 ip.run(source);
39 return 0;
41 else
43 if(read_file(fname, &source))
45 make_argv(ip, 1, args);
46 ip.run(source);
47 return 0;
49 else
51 std::cerr << "cannot open '" << fname << "' for reading" << std::endl;
52 return 1;
56 else
58 std::cerr << "no input file provided" << std::endl;
59 return 1;
61 return 0;
64 int main(int argc, char *argv[])
66 std::vector<std::string> args(argv, argv + argc);
67 return interp_main(args);