summaryrefslogtreecommitdiff
path: root/src/cat/LuaScriptInterface.cpp
diff options
context:
space:
mode:
authorSimon Robertshaw <simon@hardwired.org.uk>2012-09-21 14:05:50 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2012-09-21 14:05:50 (GMT)
commit939a04d3c77bf9aa8d54e912f5e12817de51756c (patch)
tree750119bf74b8fbcb409eaf02d03877c00056613d /src/cat/LuaScriptInterface.cpp
parent6e44ebc358d1206c147f514225373da07b43c015 (diff)
downloadpowder-939a04d3c77bf9aa8d54e912f5e12817de51756c.zip
powder-939a04d3c77bf9aa8d54e912f5e12817de51756c.tar.gz
Testing new vm/language WIP
Diffstat (limited to 'src/cat/LuaScriptInterface.cpp')
-rw-r--r--src/cat/LuaScriptInterface.cpp38
1 files changed, 30 insertions, 8 deletions
diff --git a/src/cat/LuaScriptInterface.cpp b/src/cat/LuaScriptInterface.cpp
index ff282ff..19c9ac8 100644
--- a/src/cat/LuaScriptInterface.cpp
+++ b/src/cat/LuaScriptInterface.cpp
@@ -20,11 +20,14 @@
#include "dialogues/TextPrompt.h"
#include "dialogues/ConfirmPrompt.h"
#include "simulation/Simulation.h"
-#include "virtualmachine/VirtualMachine.h"
#include "game/GameModel.h"
#include "LuaScriptHelper.h"
#include "client/HTTP.h"
+//#include "virtualmachine/VirtualMachine.h"
+#include "pim/Parser.h"
+#include "pim/Machine.h"
+
#include "LuaBit.h"
#include "LuaWindow.h"
@@ -665,17 +668,24 @@ void LuaScriptInterface::initElementsAPI()
}
}
-vm::VirtualMachine * LuaScriptInterface::updateVirtualMachines[PT_NUM];
+pim::VirtualMachine * LuaScriptInterface::updateVirtualMachines[PT_NUM];
int LuaScriptInterface::updateVM(UPDATE_FUNC_ARGS)
{
- vm::VirtualMachine * vMachine = updateVirtualMachines[parts[i].type];
+ pim::VirtualMachine * machine = updateVirtualMachines[parts[i].type];
+
+ machine->CSPush(i);
+ machine->CSPush(x);
+ machine->CSPush(y);
+ machine->Call(0);
+
+
+ /*vm::VirtualMachine * vMachine = updateVirtualMachines[parts[i].type];
vm::word w;
int argAddr = 0, argCount = 5;
vMachine->sim = sim;
- /* Set up call. */
vMachine->OpPUSH(w); //Pointless null in stack
w.int4 = (argCount + 2) * sizeof(vm::word);
vMachine->OpENTER(w);
@@ -696,7 +706,7 @@ int LuaScriptInterface::updateVM(UPDATE_FUNC_ARGS)
w.int4 = (argCount + 2) * sizeof(vm::word);
vMachine->OpLEAVE(w);
vMachine->OpPOP(w); //Pop pointless null
- vMachine->End();
+ vMachine->End();*/
return 0;
}
@@ -1017,7 +1027,7 @@ int LuaScriptInterface::elements_property(lua_State * l)
}
else if(lua_type(l, 3) == LUA_TLIGHTUSERDATA)
{
- updateVirtualMachines[id] = (vm::VirtualMachine*)lua_touserdata(l, 3);
+ updateVirtualMachines[id] = (pim::VirtualMachine*)lua_touserdata(l, 3);
luacon_sim->elements[id].Update = &updateVM;
}
else if(lua_type(l, 3) == LUA_TBOOLEAN && !lua_toboolean(l, 3))
@@ -1142,7 +1152,7 @@ void LuaScriptInterface::initVirtualMachineAPI()
int LuaScriptInterface::virtualMachine_loadProgram(lua_State * l)
{
- luaL_checktype(l, 1, LUA_TSTRING);
+ /*luaL_checktype(l, 1, LUA_TSTRING);
vm::VirtualMachine * newVM = new vm::VirtualMachine(1);
try
@@ -1156,7 +1166,19 @@ int LuaScriptInterface::virtualMachine_loadProgram(lua_State * l)
{
return luaL_error(l, "Unable to load program");
}
- lua_pushlightuserdata(l, newVM);
+ lua_pushlightuserdata(l, newVM);*/
+ std::string programSource(lua_tostring(l, 1));
+ std::stringstream input(programSource);
+
+
+ pim::compiler::Parser * parser = new pim::compiler::Parser(input);
+
+ std::vector<unsigned char> programData = parser->Compile();
+
+ pim::VirtualMachine * machine = new pim::VirtualMachine(luacon_sim);
+ machine->LoadProgram(programData);
+
+ lua_pushlightuserdata(l, machine);
return 1;
}