aboutsummaryrefslogtreecommitdiffstats
path: root/bruiser
diff options
context:
space:
mode:
authorbloodstalker <thabogre@gmail.com>2017-05-13 19:26:42 +0000
committerbloodstalker <thabogre@gmail.com>2017-05-13 19:26:42 +0000
commit7681133fc34cbc736ff81ad6f8ffb4faeebd79ef (patch)
treee9cada247d927c54532cd1649c4d3ade27e9e691 /bruiser
parentfixed an old tip (diff)
downloadmutator-7681133fc34cbc736ff81ad6f8ffb4faeebd79ef.tar.gz
mutator-7681133fc34cbc736ff81ad6f8ffb4faeebd79ef.zip
fixed some stuff, added some more stuff. the embedded lua interpreter now works.
Diffstat (limited to 'bruiser')
-rw-r--r--bruiser/bruiser.cpp86
1 files changed, 56 insertions, 30 deletions
diff --git a/bruiser/bruiser.cpp b/bruiser/bruiser.cpp
index 3eb4ee2..23071a4 100644
--- a/bruiser/bruiser.cpp
+++ b/bruiser/bruiser.cpp
@@ -45,7 +45,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.*
#include "llvm/IR/Function.h"
/*other*/
#include "linenoise/linenoise.h"
-#include "lua-5.3.4/src/lua.h"
+#include "lua-5.3.4/src/lua.hpp"
#include "lua-5.3.4/src/lualib.h"
#include "lua-5.3.4/src/lauxlib.h"
/**********************************************************************************************************************/
@@ -70,6 +70,47 @@ bruiser::BruiserReport BruiseRep;
cl::opt<bool> Intrusive("intrusive", cl::desc("If set true. bruiser will mutate the source."), cl::init(true), cl::cat(BruiserCategory), cl::ZeroOrMore);
cl::opt<std::string> M0XMLPath("xmlpath", cl::desc("tells bruiser where to find the XML file containing the Mutator-LVL0 report."), cl::init(bruiser::M0REP), cl::cat(BruiserCategory), cl::ZeroOrMore);
/**********************************************************************************************************************/
+class LuaEngine
+{
+ public:
+ LuaEngine()
+ {
+ LS = luaL_newstate();
+ }
+
+ void LoadBaseLib(void)
+ {
+ luaopen_base(LS);
+ }
+
+ void LoadAuxLibs(void)
+ {
+ luaopen_table(LS);
+ luaopen_io(LS);
+ luaopen_string(LS);
+ }
+
+ void LoadEverylib(void)
+ {
+ this->LoadBaseLib();
+ this->LoadAuxLibs();
+ luaopen_math(LS);
+ }
+
+ int RunScript(char* __lua_script)
+ {
+ return luaL_dofile(LS, __lua_script);
+ }
+
+ void Cleanup(void)
+ {
+ lua_close(LS);
+ }
+
+ private:
+ lua_State* LS;
+};
+/**********************************************************************************************************************/
/*the implementation of the bruiser logger.*/
bruiser::BruiserReport::BruiserReport ()
{
@@ -733,38 +774,14 @@ int main(int argc, const char **argv)
{
char* command;
while((command = linenoise("bruiser>>")) != NULL)
- //while(true)
{
- //wprintw(win, ">>");
- //wrefresh(win);
- std::cout << ">>";
-
linenoiseHistoryAdd(command);
linenoiseHistorySave(SHELL_HISTORY_FILE);
//std::cin.getline(command, sizeof(command));
std::string dummy_string(command);
-#if 0
- for (auto &iter : command)
- {
- if (iter != 0)
- {
- /*intentionally left blank*/
- }
- else
- {
- iter = '\0';
- }
- }
-#endif
-
shHistory.History.push_back(command);
-#if defined(__DBG_1)
- std::cout << InKey << "\n";
- std::cout << shHistory.History.size() << "\n";
- std::cout << shHistory.History.capacity() << "\n";
-#endif
if (std::regex_search(dummy_string, smresult, listcommand))
{
@@ -897,10 +914,18 @@ int main(int argc, const char **argv)
if (std::strcmp(command, "version") == 0)
{
- PRINT_WITH_COLOR_LB("bruiser experimental version something.", GREEN);
- PRINT_WITH_COLOR_LB("project mutator", GREEN);
- PRINT_WITH_COLOR_LB("GPL v2.0", GREEN);
- PRINT_WITH_COLOR_LB("bloodstalker 2017", GREEN);
+ PRINT_WITH_COLOR_LB(GRAY, "bruiser experimental version something.");
+ PRINT_WITH_COLOR_LB(GRAY, "project mutator");
+ PRINT_WITH_COLOR_LB(GRAY, "GPL v2.0");
+ PRINT_WITH_COLOR_LB(GRAY, "bloodstalker 2017");
+ }
+
+ if (std::strcmp(command, "runlua") == 0)
+ {
+ LuaEngine LE;
+ LE.LoadEverylib();
+ LE.RunScript((char*)"/home/bloodstalker/devi/abbatoir/hole6/proto.lua");
+ LE.Cleanup();
}
if (command[0] == '!')
@@ -929,7 +954,8 @@ int main(int argc, const char **argv)
}
std::cout << RED << "unknown command. run help.\n" << NORMAL;
- free(command);
+
+ linenoiseFree(command);
}
return 0;