1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
#include "StarRootLoader.hpp"
#include "StarRootLuaBindings.hpp"
#include "StarUtilityLuaBindings.hpp"
#include "StarRootLuaBindings.hpp"
using namespace Star;
int main(int argc, char** argv) {
RootLoader rootLoader({{}, {}, {}, LogLevel::Error, false, {}});
RootUPtr root;
OptionParser::Options options;
tie(root, options) = rootLoader.commandInitOrDie(argc, argv);
auto engine = LuaEngine::create(true);
auto context = engine->createContext();
context.setCallbacks("sb", LuaBindings::makeUtilityCallbacks());
context.setCallbacks("root", LuaBindings::makeRootCallbacks());
String code;
bool continuation = false;
while (!std::cin.eof()) {
auto getline = [](std::istream& stream) -> String {
std::string line;
std::getline(stream, line);
return String(std::move(line));
};
if (continuation) {
std::cout << ">> ";
std::cout.flush();
code += getline(std::cin);
code += '\n';
} else {
std::cout << "> ";
std::cout.flush();
code = getline(std::cin);
code += '\n';
}
try {
auto result = context.eval<LuaVariadic<LuaValue>>(code);
for (auto r : result)
coutf("{}\n", r);
continuation = false;
} catch (LuaIncompleteStatementException const&) {
continuation = true;
} catch (std::exception const& e) {
coutf("Error: {}\n", outputException(e, false));
continuation = false;
}
}
return 0;
}
|