summaryrefslogtreecommitdiff
path: root/Source/3rdParty/Luax/luax_enum.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/3rdParty/Luax/luax_enum.cpp')
-rw-r--r--Source/3rdParty/Luax/luax_enum.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/Source/3rdParty/Luax/luax_enum.cpp b/Source/3rdParty/Luax/luax_enum.cpp
new file mode 100644
index 0000000..1ccc900
--- /dev/null
+++ b/Source/3rdParty/Luax/luax_enum.cpp
@@ -0,0 +1,37 @@
+#include "luax_enum.h"
+#include "luax_state.h"
+#include "luax_runtime.h"
+
+namespace Luax
+{
+
+ ///
+ /// ֻmetatable__index
+ ///
+ int l_rmt__index(lua_State* L)
+ {
+ // params:
+ // 1. enum table
+ // 2. key
+
+ // upvalues:
+ // 1. metatable
+
+ int mt = lua_upvalueindex(1);
+ lua_pushvalue(L, 2);
+ lua_rawget(L, mt);
+
+ return 1;
+ }
+
+ int l_rmt__newindex(lua_State* L)
+ {
+ // upvalue:
+ // 1. enum table name
+
+ cc8* name = lua_tostring(L, lua_upvalueindex(1));
+
+ return luaL_error(L, "Enum called \"%s\" is readonly.", name);
+ }
+
+} \ No newline at end of file