aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/3rdparty/buildvm/buildvm.exebin123392 -> 121856 bytes
-rw-r--r--src/3rdparty/minilua/minilua.exebin219136 -> 209920 bytes
-rw-r--r--src/lua/common/je_lua.cpp78
-rw-r--r--src/lua/common/je_lua.h19
-rw-r--r--src/lua/common/je_lua_common.h3
-rw-r--r--src/lua/common/je_lua_shared.hpp5
-rw-r--r--src/lua/jin.cpp2
-rw-r--r--src/lua/jin.h8
-rw-r--r--src/lua/libraries/luax/luax.h3
-rw-r--r--src/lua/modules/graphics/je_lua_animation.cpp1
-rw-r--r--src/lua/modules/graphics/je_lua_animator.cpp1
-rw-r--r--src/lua/modules/graphics/je_lua_canvas.cpp1
-rw-r--r--src/lua/modules/graphics/je_lua_graphics.cpp9
-rw-r--r--src/lua/modules/graphics/je_lua_page.cpp1
-rw-r--r--src/lua/modules/graphics/je_lua_shader.cpp1
-rw-r--r--src/lua/modules/graphics/je_lua_sprite.cpp1
-rw-r--r--src/lua/modules/graphics/je_lua_spritesheet.cpp8
-rw-r--r--src/lua/modules/graphics/je_lua_text.cpp1
-rw-r--r--src/lua/modules/graphics/je_lua_texture.cpp1
-rw-r--r--src/lua/modules/graphics/je_lua_texture_font.cpp1
-rw-r--r--src/lua/modules/graphics/je_lua_ttf.cpp1
-rw-r--r--src/lua/modules/graphics/je_lua_ttf_data.cpp1
-rw-r--r--src/lua/modules/net/je_lua_buffer.cpp1
-rw-r--r--src/lua/modules/net/je_lua_net.cpp1
-rw-r--r--src/lua/modules/net/je_lua_socket.cpp1
-rw-r--r--src/lua/modules/time/je_lua_time.cpp4
-rw-r--r--src/lua/modules/time/je_lua_timer.cpp16
27 files changed, 110 insertions, 59 deletions
diff --git a/src/3rdparty/buildvm/buildvm.exe b/src/3rdparty/buildvm/buildvm.exe
index 32a8f53..d5ad537 100644
--- a/src/3rdparty/buildvm/buildvm.exe
+++ b/src/3rdparty/buildvm/buildvm.exe
Binary files differ
diff --git a/src/3rdparty/minilua/minilua.exe b/src/3rdparty/minilua/minilua.exe
index a245b88..44e9416 100644
--- a/src/3rdparty/minilua/minilua.exe
+++ b/src/3rdparty/minilua/minilua.exe
Binary files differ
diff --git a/src/lua/common/je_lua.cpp b/src/lua/common/je_lua.cpp
index 748606b..2011e15 100644
--- a/src/lua/common/je_lua.cpp
+++ b/src/lua/common/je_lua.cpp
@@ -5,6 +5,18 @@ namespace JinEngine
namespace Lua
{
+ lua_State * LuaState::mL = nullptr;
+
+ void LuaState::set(lua_State* L)
+ {
+ mL = L;
+ }
+
+ lua_State* LuaState::get()
+ {
+ return mL;
+ }
+
///
/// Lua objects table. Map object to proxy, like objects_table[object] = proxy.
///
@@ -33,45 +45,81 @@ namespace JinEngine
return proxy;
}
- int luax_getobject(lua_State* L, SharedBase* shadred)
+ int luax_getobject(lua_State* L, SharedBase* shared)
{
luax_getobjectstable(L);
- luax_pushlightuserdata(L, shadred);
+ luax_pushlightuserdata(L, shared);
luax_gettable(L, -2);
luax_remove(L, -2); // Remove objects table on stack.
return 1;
}
- int luax_getregistrytable(lua_State* L, const char* tbl)
+ void luax_removeobject(lua_State* L, SharedBase* shared)
{
- luax_getfield(L, LUA_REGISTRYINDEX, tbl);
+ luax_getobjectstable(L);
+ luax_pushlightuserdata(L, shared);
+ luax_pushnil(L);
+ luax_settable(L, -3);
+ luax_pop(L, 1);
+ }
+
+ int luax_getobjectstable(lua_State* L)
+ {
+ luax_getfield(L, LUA_REGISTRYINDEX, Jin_Lua_Objects_Table);
// If no such table, add one.
if (luax_isnil(L, -1) || !luax_istable(L, -1))
{
luax_pop(L, 1);
luax_newtable(L);
- luax_pushstring(L, tbl);
- luax_pushvalue(L, -2);
- luax_settable(L, LUA_REGISTRYINDEX);
- }
- return 1;
- }
- int luax_getobjectstable(lua_State* L)
- {
- luax_getregistrytable(L, Jin_Lua_Objects_Table);
+ // metatable
+ luax_newtable(L);
+ // weak table
+ luax_pushliteral(L, "v");
+ luax_setfield(L, -2, "__mode");
+ // setmetatable(newtable, metatable)
+ luax_setmetatable(L, -2);
+
+ luax_pushvalue(L, -1);
+ luax_setfield(L, LUA_REGISTRYINDEX, Jin_Lua_Objects_Table);
+ }
return 1;
}
int luax_getmodulestable(lua_State* L)
{
- luax_getregistrytable(L, Jin_Lua_Modules_Table);
+ luax_getfield(L, LUA_REGISTRYINDEX, Jin_Lua_Modules_Table);
+ // If no such table, add one.
+ if (luax_isnil(L, -1) || !luax_istable(L, -1))
+ {
+ luax_pop(L, 1);
+ luax_newtable(L);
+
+ // metatable
+ luax_newtable(L);
+ // weak table
+ luax_pushliteral(L, "v");
+ luax_setfield(L, -2, "__mode");
+ // setmetatable(newtable, metatable)
+ luax_setmetatable(L, -2);
+
+ luax_pushvalue(L, -1);
+ luax_setfield(L, LUA_REGISTRYINDEX, Jin_Lua_Modules_Table);
+ }
return 1;
}
int luax_getreferencestable(lua_State* L)
{
- luax_getregistrytable(L, Jin_Lua_Reference_Table);
+ luax_getfield(L, LUA_REGISTRYINDEX, Jin_Lua_Reference_Table);
+ // If no such table, add one.
+ if (luax_isnil(L, -1) || !luax_istable(L, -1))
+ {
+ luax_pop(L, 1);
+ luax_newtable(L);
+ luax_pushvalue(L, -1);
+ luax_setfield(L, LUA_REGISTRYINDEX, Jin_Lua_Reference_Table);
+ }
return 1;
}
diff --git a/src/lua/common/je_lua.h b/src/lua/common/je_lua.h
index e053718..753230e 100644
--- a/src/lua/common/je_lua.h
+++ b/src/lua/common/je_lua.h
@@ -3,15 +3,27 @@
#include "LuaJIT/lua.hpp"
#include "libraries/luax/luax.h"
+#include "je_lua_shared.hpp"
#include "je_lua_proxy.h"
#include "je_lua_reference.h"
-#include "je_lua_shared.hpp"
namespace JinEngine
{
namespace Lua
{
+ // Lua state singleton.
+ class LuaState
+ {
+ public:
+ static lua_State * get();
+ static void set(lua_State* L);
+
+ private:
+ static lua_State * mL;
+
+ };
+
///
///
///
@@ -25,6 +37,11 @@ namespace JinEngine
///
///
///
+ void luax_removeobject(lua_State* L, SharedBase* shared);
+
+ ///
+ ///
+ ///
int luax_getobjectstable(lua_State* L);
///
diff --git a/src/lua/common/je_lua_common.h b/src/lua/common/je_lua_common.h
index 5b217a2..cdd4f36 100644
--- a/src/lua/common/je_lua_common.h
+++ b/src/lua/common/je_lua_common.h
@@ -1,9 +1,8 @@
#ifndef __JIN_M_TYPES_H
#define __JIN_M_TYPES_H
+#include "je_lua.h"
#include "je_lua_port.h"
-#include "je_lua_proxy.h"
-#include "je_lua_shared.hpp"
#include "je_lua_error.h"
#include "je_lua_reference.h"
diff --git a/src/lua/common/je_lua_shared.hpp b/src/lua/common/je_lua_shared.hpp
index 7bb3f76..59e945d 100644
--- a/src/lua/common/je_lua_shared.hpp
+++ b/src/lua/common/je_lua_shared.hpp
@@ -1,6 +1,8 @@
#ifndef __JIN_COMMON_SHARED_H__
#define __JIN_COMMON_SHARED_H__
+//#include "je_lua.h"
+
#include <map>
#include <vector>
@@ -144,6 +146,9 @@ namespace JinEngine
// Make shared only be able created with new.
~Shared()
{
+ // Delete object mapping.
+ luax_removeobject(LuaState::get(), this);
+ //
T* obj = static_cast<T*>(mObject);
delete obj;
}
diff --git a/src/lua/jin.cpp b/src/lua/jin.cpp
index f4fcb61..39291ac 100644
--- a/src/lua/jin.cpp
+++ b/src/lua/jin.cpp
@@ -67,6 +67,8 @@ namespace JinEngine
/* register jin module, keep it on the top of stack */
LUA_EXPORT int luaopen_jin(lua_State* L)
{
+ LuaState::set(L);
+
luax_globaltable(L, MODULE_NAME);
// Register values.
diff --git a/src/lua/jin.h b/src/lua/jin.h
index 9042704..473ead7 100644
--- a/src/lua/jin.h
+++ b/src/lua/jin.h
@@ -2,10 +2,10 @@
* Copyright (C) 2016~2018 chai
*/
-#ifndef __JIN_M_JIN_H
-#define __JIN_M_JIN_H
-#include "common/je_lua.h"
+#ifndef __JIN_M_JIN_H__
+#define __JIN_M_JIN_H__
+#include "common/je_lua.h"
#include "common/je_lua_common.h"
#define MODULE_NAME "jin"
@@ -33,4 +33,4 @@ namespace JinEngine
} // namespace JinEngine
} // namespace Lua
-#endif // __JIN_M_JIN_H \ No newline at end of file
+#endif // __JIN_M_JIN_H__ \ No newline at end of file
diff --git a/src/lua/libraries/luax/luax.h b/src/lua/libraries/luax/luax.h
index fc2b21e..0055176 100644
--- a/src/lua/libraries/luax/luax.h
+++ b/src/lua/libraries/luax/luax.h
@@ -123,6 +123,9 @@ inline float luax_rawgetnumberthenpop(lua_State* L, int i, int k)
#define luax_pushlightuserdata lua_pushlightuserdata
#define luax_pushnil lua_pushnil
#define luax_pushvalue lua_pushvalue
+#define luax_pushliteral lua_pushliteral
+
+#define luax_setmetatable lua_setmetatable
//inline void luax_pushuserdata(lua_State* L, void* p)
//{
diff --git a/src/lua/modules/graphics/je_lua_animation.cpp b/src/lua/modules/graphics/je_lua_animation.cpp
index d054761..cd048e3 100644
--- a/src/lua/modules/graphics/je_lua_animation.cpp
+++ b/src/lua/modules/graphics/je_lua_animation.cpp
@@ -1,5 +1,4 @@
#include "common/je_lua_proxy.h"
-
#include "common/je_lua_common.h"
#include "libjin/jin.h"
diff --git a/src/lua/modules/graphics/je_lua_animator.cpp b/src/lua/modules/graphics/je_lua_animator.cpp
index 857d375..843204d 100644
--- a/src/lua/modules/graphics/je_lua_animator.cpp
+++ b/src/lua/modules/graphics/je_lua_animator.cpp
@@ -1,5 +1,4 @@
#include "common/je_lua_proxy.h"
-
#include "common/je_lua_common.h"
#include "libjin/jin.h"
diff --git a/src/lua/modules/graphics/je_lua_canvas.cpp b/src/lua/modules/graphics/je_lua_canvas.cpp
index 5cbcf98..80ee155 100644
--- a/src/lua/modules/graphics/je_lua_canvas.cpp
+++ b/src/lua/modules/graphics/je_lua_canvas.cpp
@@ -1,5 +1,4 @@
#include "common/je_lua_proxy.h"
-
#include "common/je_lua_common.h"
#include "libjin/jin.h"
#include "je_lua_canvas.h"
diff --git a/src/lua/modules/graphics/je_lua_graphics.cpp b/src/lua/modules/graphics/je_lua_graphics.cpp
index cc67055..82793be 100644
--- a/src/lua/modules/graphics/je_lua_graphics.cpp
+++ b/src/lua/modules/graphics/je_lua_graphics.cpp
@@ -3,7 +3,6 @@
#include "libjin/jin.h"
#include "common/je_lua_proxy.h"
-
#include "common/je_lua_common.h"
#include "je_lua_canvas.h"
@@ -794,9 +793,9 @@ namespace JinEngine
// newAnimation([frames table, loop, speed])
LUA_IMPLEMENT int l_newAnimation(lua_State* L)
{
- int args = luax_gettop(L);
+ int argc = luax_gettop(L);
Shared<Animation>* shrAnimation = new Shared<Animation>(new Animation(), Jin_Lua_Animation);
- if (args >= 3)
+ if (argc >= 3)
{
if (!luax_istable(L, 1))
{
@@ -825,9 +824,9 @@ namespace JinEngine
// newAnimator([animation])
LUA_IMPLEMENT int l_newAnimator(lua_State* L)
{
- int args = luax_gettop(L);
+ int argc = luax_gettop(L);
Shared<Animator>* shrAniamtor = new Shared<Animator>(new Animator(), Jin_Lua_Animator);
- if (args >= 1)
+ if (argc >= 1)
{
Proxy* pxyAnimation = (Proxy*)luax_checktype(L, 1, Jin_Lua_Animation);
Shared<Animation>& shrAnimtion = pxyAnimation->getShared<Animation>();
diff --git a/src/lua/modules/graphics/je_lua_page.cpp b/src/lua/modules/graphics/je_lua_page.cpp
index c3fdc7e..c119991 100644
--- a/src/lua/modules/graphics/je_lua_page.cpp
+++ b/src/lua/modules/graphics/je_lua_page.cpp
@@ -1,5 +1,4 @@
#include "common/je_lua_proxy.h"
-
#include "common/je_lua_common.h"
#include "libjin/jin.h"
diff --git a/src/lua/modules/graphics/je_lua_shader.cpp b/src/lua/modules/graphics/je_lua_shader.cpp
index cfe2260..ca4d6f6 100644
--- a/src/lua/modules/graphics/je_lua_shader.cpp
+++ b/src/lua/modules/graphics/je_lua_shader.cpp
@@ -1,5 +1,4 @@
#include "common/je_lua_proxy.h"
-
#include "common/je_lua_common.h"
#include "libjin/jin.h"
diff --git a/src/lua/modules/graphics/je_lua_sprite.cpp b/src/lua/modules/graphics/je_lua_sprite.cpp
index 01ba103..018a43d 100644
--- a/src/lua/modules/graphics/je_lua_sprite.cpp
+++ b/src/lua/modules/graphics/je_lua_sprite.cpp
@@ -1,5 +1,4 @@
#include "common/je_lua_proxy.h"
-
#include "common/je_lua_common.h"
#include "libjin/jin.h"
diff --git a/src/lua/modules/graphics/je_lua_spritesheet.cpp b/src/lua/modules/graphics/je_lua_spritesheet.cpp
index 57b610c..362a78d 100644
--- a/src/lua/modules/graphics/je_lua_spritesheet.cpp
+++ b/src/lua/modules/graphics/je_lua_spritesheet.cpp
@@ -66,12 +66,12 @@ namespace JinEngine
int w = luax_checkinteger(L, 5);
int h = luax_checkinteger(L, 6);
vector<Sprite*> sprs;
- int args = luax_gettop(L);
- if (args == 6)
+ int argc = luax_gettop(L);
+ if (argc == 6)
{
sprs = ss->createSprites(count, r, c, w, h, Origin::TopLeft);
}
- else if (args >= 8)
+ else if (argc >= 8)
{
int ox = luax_checkinteger(L, 7);
int oy = luax_checkinteger(L, 8);
@@ -79,7 +79,7 @@ namespace JinEngine
int offy = luax_optinteger(L, 10, 0);
sprs = ss->createSprites(count, r, c, w, h, ox, oy, offx, offy);
}
- else if (args >= 7)
+ else if (argc >= 7)
{
int o = luax_checkinteger(L, 7);
Origin origin = static_cast<Origin>(o);
diff --git a/src/lua/modules/graphics/je_lua_text.cpp b/src/lua/modules/graphics/je_lua_text.cpp
index 6509e73..adeed35 100644
--- a/src/lua/modules/graphics/je_lua_text.cpp
+++ b/src/lua/modules/graphics/je_lua_text.cpp
@@ -1,5 +1,4 @@
#include "common/je_lua_proxy.h"
-
#include "common/je_lua_common.h"
#include "libjin/jin.h"
diff --git a/src/lua/modules/graphics/je_lua_texture.cpp b/src/lua/modules/graphics/je_lua_texture.cpp
index 5402a99..a8676f1 100644
--- a/src/lua/modules/graphics/je_lua_texture.cpp
+++ b/src/lua/modules/graphics/je_lua_texture.cpp
@@ -1,5 +1,4 @@
#include "common/je_lua_proxy.h"
-
#include "common/je_lua_common.h"
#include "libjin/jin.h"
#include "je_lua_texture.h"
diff --git a/src/lua/modules/graphics/je_lua_texture_font.cpp b/src/lua/modules/graphics/je_lua_texture_font.cpp
index 61c559b..6c62ee2 100644
--- a/src/lua/modules/graphics/je_lua_texture_font.cpp
+++ b/src/lua/modules/graphics/je_lua_texture_font.cpp
@@ -1,5 +1,4 @@
#include "common/je_lua_proxy.h"
-
#include "common/je_lua_common.h"
#include "libjin/jin.h"
diff --git a/src/lua/modules/graphics/je_lua_ttf.cpp b/src/lua/modules/graphics/je_lua_ttf.cpp
index 7fea04b..fb4b0df 100644
--- a/src/lua/modules/graphics/je_lua_ttf.cpp
+++ b/src/lua/modules/graphics/je_lua_ttf.cpp
@@ -1,5 +1,4 @@
#include "common/je_lua_proxy.h"
-
#include "common/je_lua_common.h"
#include "libjin/jin.h"
diff --git a/src/lua/modules/graphics/je_lua_ttf_data.cpp b/src/lua/modules/graphics/je_lua_ttf_data.cpp
index aa2280f..8042d69 100644
--- a/src/lua/modules/graphics/je_lua_ttf_data.cpp
+++ b/src/lua/modules/graphics/je_lua_ttf_data.cpp
@@ -1,5 +1,4 @@
#include "common/je_lua_proxy.h"
-
#include "common/je_lua_common.h"
#include "libjin/jin.h"
diff --git a/src/lua/modules/net/je_lua_buffer.cpp b/src/lua/modules/net/je_lua_buffer.cpp
index 582eec9..5442e14 100644
--- a/src/lua/modules/net/je_lua_buffer.cpp
+++ b/src/lua/modules/net/je_lua_buffer.cpp
@@ -1,5 +1,4 @@
#include "common/je_lua_proxy.h"
-
#include "common/je_lua_common.h"
#include "libjin/jin.h"
#include "je_lua_buffer.h"
diff --git a/src/lua/modules/net/je_lua_net.cpp b/src/lua/modules/net/je_lua_net.cpp
index 456bcf8..4b5513a 100644
--- a/src/lua/modules/net/je_lua_net.cpp
+++ b/src/lua/modules/net/je_lua_net.cpp
@@ -1,5 +1,4 @@
#include "common/je_lua_proxy.h"
-
#include "libjin/jin.h"
#include "common/je_lua_common.h"
diff --git a/src/lua/modules/net/je_lua_socket.cpp b/src/lua/modules/net/je_lua_socket.cpp
index 94e1275..3eed91f 100644
--- a/src/lua/modules/net/je_lua_socket.cpp
+++ b/src/lua/modules/net/je_lua_socket.cpp
@@ -1,5 +1,4 @@
#include "common/je_lua_proxy.h"
-
#include "common/je_lua_common.h"
#include "libjin/jin.h"
#include "je_lua_buffer.h"
diff --git a/src/lua/modules/time/je_lua_time.cpp b/src/lua/modules/time/je_lua_time.cpp
index 6ad4935..4eb579f 100644
--- a/src/lua/modules/time/je_lua_time.cpp
+++ b/src/lua/modules/time/je_lua_time.cpp
@@ -3,7 +3,6 @@
#include "common/je_lua_proxy.h"
#include "libjin/jin.h"
-
#include "je_lua_timer.h"
using namespace JinEngine::Time;
@@ -34,7 +33,8 @@ namespace JinEngine
LUA_IMPLEMENT int l_newTimer(lua_State* L)
{
- Proxy* proxy = luax_newinstance(L, Jin_Lua_Timer, new Shared<Timer>(new Timer(), Jin_Lua_Timer));
+ Shared<Timer>* shrTimer = new Shared<Timer>(new Timer(), Jin_Lua_Timer);
+ luax_newinstance(L, Jin_Lua_Timer, shrTimer);
return 1;
}
diff --git a/src/lua/modules/time/je_lua_timer.cpp b/src/lua/modules/time/je_lua_timer.cpp
index 6dc6798..ccb902a 100644
--- a/src/lua/modules/time/je_lua_timer.cpp
+++ b/src/lua/modules/time/je_lua_timer.cpp
@@ -1,4 +1,3 @@
-
#include "common/je_lua_callback.h"
#include "common/je_lua_common.h"
#include "je_lua_timer.h"
@@ -39,15 +38,13 @@ namespace JinEngine
{
int n = luax_gettop(L);
SharedTimer shared = checkTimer(L);
- Timer* timer = shared.getObject();
float s = luax_checknumber(L, 2);
LuaCallback* func = new LuaCallback(L);
func->setFunc(3);
for(int i = 4; i <= n; ++i)
func->pushParam(i);
- Timer::Handler* handler = timer->every(s, timerCallback, func, finishCallback);
+ Timer::Handler* handler = shared->every(s, timerCallback, func, finishCallback);
Shared<Timer::Handler>* shrHandler = new Shared<Timer::Handler>(handler, Jin_Lua_Handler);
- shrHandler->retain();
Proxy* proxy = luax_newinstance(L, Jin_Lua_Handler, shrHandler);
return 1;
}
@@ -57,15 +54,13 @@ namespace JinEngine
{
int n = luax_gettop(L);
SharedTimer shared = checkTimer(L);
- Timer* timer = shared.getObject();
float s = luax_checknumber(L, 2);
LuaCallback* func = new LuaCallback(L);
func->setFunc(3);
for (int i = 4; i <= n; ++i)
func->pushParam(i);
- Timer::Handler* handler = timer->after(s, timerCallback, func, finishCallback);
+ Timer::Handler* handler = shared->after(s, timerCallback, func, finishCallback);
Shared<Timer::Handler>* shrHandler = new Shared<Timer::Handler>(handler, Jin_Lua_Handler);
- shrHandler->retain();
Proxy* proxy = luax_newinstance(L, Jin_Lua_Handler, shrHandler);
return 1;
}
@@ -75,16 +70,14 @@ namespace JinEngine
{
int n = luax_gettop(L);
SharedTimer shared = checkTimer(L);
- Timer* timer = shared.getObject();
float s = luax_checknumber(L, 2);
int count = luax_checkinteger(L, 3);
LuaCallback* func = new LuaCallback(L);
func->setFunc(4);
for (int i = 5; i <= n; ++i)
func->pushParam(i);
- Timer::Handler* handler = timer->repeat(s, count, timerCallback, func, finishCallback);
+ Timer::Handler* handler = shared->repeat(s, count, timerCallback, func, finishCallback);
Shared<Timer::Handler>* shrHandler = new Shared<Timer::Handler>(handler, Jin_Lua_Handler);
- shrHandler->retain();
Proxy* proxy = luax_newinstance(L, Jin_Lua_Handler, shrHandler);
return 1;
}
@@ -92,9 +85,8 @@ namespace JinEngine
LUA_IMPLEMENT int l_update(lua_State* L)
{
SharedTimer shared = checkTimer(L);
- Timer* timer = shared.getObject();
float s = luax_checknumber(L, 2);
- timer->update(s);
+ shared->update(s);
return 0;
}