Changeset 489
- Timestamp:
- 03/08/16 11:07:39 (9 years ago)
- Location:
- trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/nv/lib/lua.hh
r406 r489 440 440 bool load_lua_library( const char* path = NV_LUA_PATH ); 441 441 # else 442 inline bool load_lua_library( const char* path = "" ) { return true; }442 bool load_lua_library( const char* path = "" ); 443 443 # endif 444 444 } -
trunk/nv/stl/functional/hash.hh
r487 r489 78 78 } 79 79 80 template < typename T, typename H = size_t, typename Enable = void >80 template < typename T, typename H = uint64, typename Enable = void > 81 81 struct hash : detail::hash_base< T, H > 82 82 { -
trunk/src/lib/lua.cc
r406 r489 6 6 7 7 #include "nv/lib/lua.hh" 8 9 #if NV_LUA_VERSION == NV_LUA_5C 10 size_t( *lua_rawlen ) ( lua_State *L, int idx ) = nullptr; 11 int( *lua_absindex ) ( lua_State *L, int idx ) = nullptr; 12 void( *lua_getglobal ) ( lua_State *L, const char *var ) = nullptr; 13 void( *lua_setglobal ) ( lua_State *L, const char *var ) = nullptr; 14 void( *luaL_requiref ) ( lua_State *L, const char *modname, lua_CFunction openf, int glb ) = nullptr; 15 void( *luaL_setmetatable ) ( lua_State *L, const char *tname ) = nullptr; 16 void* ( *luaL_testudata ) ( lua_State *L, int ud, const char *tname ) = nullptr; 17 void( *lua_copy ) ( lua_State *L, int fromidx, int toidx ) = nullptr; 18 int( *lua_compare ) ( lua_State *L, int idx1, int idx2, int op ) = nullptr; 19 void( *lua_rawgetp ) ( lua_State *L, int idx, const void *p ) = nullptr; 20 void( *lua_rawsetp ) ( lua_State *L, int idx, const void *p ) = nullptr; 21 void( *lua_pushglobaltable )( lua_State* L ) = nullptr; 22 void( *luaL_setfuncs ) ( lua_State *L, const luaL_Reg *l, int nup ) = nullptr; 23 int( *luaL_getsubtable ) ( lua_State *L, int idx, const char *fname ) = nullptr; 24 25 const lua_Number* ( *lua_version ) ( lua_State *L ) = nullptr; 26 27 // only loaded in 5.1 mode to implement lua_compare 28 static int( *lua_equal ) ( lua_State *L, int idx1, int idx2 ) = nullptr; 29 static int( *lua_lessthan ) ( lua_State *L, int idx1, int idx2 ) = nullptr; 30 #endif 31 8 32 9 33 #if defined( NV_LUA_DYNAMIC ) … … 45 69 # include <nv/lib/detail/lua_functions_compat.inc> 46 70 # undef NV_LUA_COMPAT_FUN 47 int LUA_UPVALUEINDEX = 0;48 int LUA_REGISTRYINDEX = 0;49 int LUA_VERSION_NUM = 0;50 size_t (*lua_rawlen) (lua_State *L, int idx) = nullptr;51 int (*lua_absindex) (lua_State *L, int idx) = nullptr;52 void (*lua_getglobal) (lua_State *L, const char *var) = nullptr;53 void (*lua_setglobal) (lua_State *L, const char *var) = nullptr;54 void (*luaL_requiref) (lua_State *L, const char *modname, lua_CFunction openf, int glb) = nullptr;55 void (*luaL_setmetatable) (lua_State *L, const char *tname) = nullptr;56 void* (*luaL_testudata) (lua_State *L, int ud, const char *tname) = nullptr;57 void (*lua_copy) (lua_State *L, int fromidx, int toidx) = nullptr;58 int (*lua_compare) (lua_State *L, int idx1, int idx2, int op) = nullptr;59 void (*lua_rawgetp) (lua_State *L, int idx, const void *p) = nullptr;60 void (*lua_rawsetp) (lua_State *L, int idx, const void *p) = nullptr;61 void (*lua_pushglobaltable)(lua_State* L) = nullptr;62 void (*luaL_setfuncs) (lua_State *L, const luaL_Reg *l, int nup) = nullptr;63 int (*luaL_getsubtable) (lua_State *L, int idx, const char *fname) = nullptr;64 65 const lua_Number* (*lua_version) (lua_State *L) = nullptr;66 67 // only loaded in 5.1 mode to implement lua_compare68 static int (*lua_equal) (lua_State *L, int idx1, int idx2) = nullptr;69 static int (*lua_lessthan) (lua_State *L, int idx1, int idx2) = nullptr;70 71 71 72 72 # define NV_LUA_COMPAT_FUN( u1,u2,u3,rt2,fn2,fp2,u4,u5 ) static rt2 (*fn2##_compat) fp2 = nullptr; … … 79 79 # undef NV_LUA_COMPAT_FUN 80 80 81 #endif 82 83 #endif 84 85 #if NV_LUA_VERSION == NV_LUA_5C 86 int LUA_UPVALUEINDEX = 0; 87 int LUA_REGISTRYINDEX = 0; 88 int LUA_VERSION_NUM = 0; 81 89 # define LUAI_MAXSTACK_52 1000000 82 90 # define LUAI_FIRSTPSEUDOIDX_52 (-LUAI_MAXSTACK_52 - 1000) … … 86 94 # define LUA_REGISTRYINDEX_51 (-10000) 87 95 88 static int lua_absindex_51 (lua_State *L, int idx) { return (idx > 0 ? idx : idx + lua_gettop(L) + 1); }; 89 static void lua_getglobal_51 (lua_State *L, const char *var) { lua_getfield(L, LUA_GLOBALSINDEX_51, var ); }; 90 static void lua_setglobal_51 (lua_State *L, const char *var) { lua_setfield(L, LUA_GLOBALSINDEX_51, var ); }; 91 static void luaL_requiref_51 (lua_State *L, const char *modname, lua_CFunction openf, int glb) 92 { 93 lua_pushcfunction(L, openf); 94 lua_pushstring(L, modname); 95 lua_call(L, 1, 1); 96 if (glb != 0) 96 static int lua_absindex_51( lua_State *L, int idx ) 97 { 98 return ( idx > 0 ? idx : idx + lua_gettop( L ) + 1 ); 99 }; 100 101 static void lua_getglobal_51( lua_State *L, const char *var ) 102 { 103 lua_getfield( L, LUA_GLOBALSINDEX_51, var ); 104 }; 105 106 static void lua_setglobal_51( lua_State *L, const char *var ) 107 { 108 lua_setfield( L, LUA_GLOBALSINDEX_51, var ); 109 }; 110 111 static void luaL_requiref_51( lua_State *L, const char *modname, lua_CFunction openf, int glb ) 112 { 113 lua_pushcfunction( L, openf ); 114 lua_pushstring( L, modname ); 115 lua_call( L, 1, 1 ); 116 if ( glb != 0 ) 97 117 { 98 118 lua_pushvalue( L, LUA_GLOBALSINDEX_51 ); 99 lua_pushvalue( L, -2);100 lua_setfield( L, -2, modname);101 lua_pop( L, 1);102 } 103 } 104 105 static void luaL_setmetatable_51 (lua_State *L, const char *tname)106 { 107 luaL_getmetatable( L, tname);108 lua_setmetatable( L, -2);109 } 110 111 static void *luaL_testudata_51 (lua_State *L, int ud, const char *tname)112 { 113 void *p = lua_touserdata( L, ud);114 if ( p != NULL)115 { 116 if ( lua_getmetatable(L, ud))119 lua_pushvalue( L, -2 ); 120 lua_setfield( L, -2, modname ); 121 lua_pop( L, 1 ); 122 } 123 } 124 125 static void luaL_setmetatable_51( lua_State *L, const char *tname ) 126 { 127 luaL_getmetatable( L, tname ); 128 lua_setmetatable( L, -2 ); 129 } 130 131 static void *luaL_testudata_51( lua_State *L, int ud, const char *tname ) 132 { 133 void *p = lua_touserdata( L, ud ); 134 if ( p != NULL ) 135 { 136 if ( lua_getmetatable( L, ud ) ) 117 137 { 118 luaL_getmetatable( L, tname);119 if ( !lua_rawequal( L, -1, -2))120 p = NULL; 121 lua_pop( L, 2);138 luaL_getmetatable( L, tname ); 139 if ( !lua_rawequal( L, -1, -2 ) ) 140 p = NULL; 141 lua_pop( L, 2 ); 122 142 return p; 123 143 } … … 126 146 } 127 147 128 static const lua_Number *lua_version_51 (lua_State*)148 static const lua_Number *lua_version_51( lua_State* ) 129 149 { 130 150 static const lua_Number version = lua_Number( LUA_VERSION_NUM ); … … 132 152 } 133 153 134 static void lua_copy_51 (lua_State *L, int fromidx, int toidx)154 static void lua_copy_51( lua_State *L, int fromidx, int toidx ) 135 155 { 136 156 toidx = lua_absindex( L, toidx ); … … 139 159 } 140 160 141 static int lua_compare_51( lua_State *L, int idx1, int idx2, int op)142 { 143 switch ( op)144 { 145 case LUA_OPEQ 146 case LUA_OPLT 147 case LUA_OPLE 161 static int lua_compare_51( lua_State *L, int idx1, int idx2, int op ) 162 { 163 switch ( op ) 164 { 165 case LUA_OPEQ: return lua_equal( L, idx1, idx2 ); 166 case LUA_OPLT: return lua_lessthan( L, idx1, idx2 ); 167 case LUA_OPLE: return lua_lessthan( L, idx1, idx2 ) || lua_equal( L, idx1, idx2 ); 148 168 default: 149 169 return 0; … … 151 171 } 152 172 153 static void lua_rawgetp_51( lua_State *L, int idx, const void *p)173 static void lua_rawgetp_51( lua_State *L, int idx, const void *p ) 154 174 { 155 175 idx = lua_absindex( L, idx ); 156 void* pp = const_cast<void *>( p); // EVIL176 void* pp = const_cast<void *>( p ); // EVIL 157 177 lua_pushlightuserdata( L, pp ); 158 178 lua_rawget( L, idx ); 159 179 } 160 180 161 static void lua_rawsetp_51( lua_State *L, int idx, const void *p)181 static void lua_rawsetp_51( lua_State *L, int idx, const void *p ) 162 182 { 163 183 idx = lua_absindex( L, idx ); 164 void* pp = const_cast<void *>( p); // EVIL184 void* pp = const_cast<void *>( p ); // EVIL 165 185 lua_pushlightuserdata( L, pp ); 166 186 lua_insert( L, -1 ); … … 168 188 } 169 189 170 static int luaL_getsubtable_51(lua_State *L, int idx, const char *fname) 171 { 172 lua_getfield(L, idx, fname); 173 if ( lua_istable(L, -1) ) return 1; 174 else { 175 idx = lua_absindex(L, idx); 176 lua_pop(L, 1); 177 lua_newtable(L); 178 lua_pushvalue(L, -1); 179 lua_setfield(L, idx, fname); 180 return 0; 181 } 182 } 183 184 static void luaL_setfuncs_51(lua_State *L, const luaL_Reg *l, int nup) 185 { 186 luaL_checkstack(L, nup, "too many upvalues"); 187 for (; l->name != NULL; l++) 188 { 189 for (int i = 0; i < nup; i++) 190 static int luaL_getsubtable_51( lua_State *L, int idx, const char *fname ) 191 { 192 lua_getfield( L, idx, fname ); 193 if ( lua_istable( L, -1 ) ) return 1; 194 else 195 { 196 idx = lua_absindex( L, idx ); 197 lua_pop( L, 1 ); 198 lua_newtable( L ); 199 lua_pushvalue( L, -1 ); 200 lua_setfield( L, idx, fname ); 201 return 0; 202 } 203 } 204 205 static void luaL_setfuncs_51( lua_State *L, const luaL_Reg *l, int nup ) 206 { 207 luaL_checkstack( L, nup, "too many upvalues" ); 208 for ( ; l->name != NULL; l++ ) 209 { 210 for ( int i = 0; i < nup; i++ ) 190 211 { 191 lua_pushvalue( L, -nup);212 lua_pushvalue( L, -nup ); 192 213 } 193 lua_pushcclosure( L, l->func, nup);194 lua_setfield( L, -(nup + 2), l->name);195 } 196 lua_pop( L, nup);197 } 198 199 static void lua_pushglobaltable_51( lua_State* L)214 lua_pushcclosure( L, l->func, nup ); 215 lua_setfield( L, -( nup + 2 ), l->name ); 216 } 217 lua_pop( L, nup ); 218 } 219 220 static void lua_pushglobaltable_51( lua_State* L ) 200 221 { 201 222 lua_pushvalue( L, LUA_GLOBALSINDEX_51 ); 202 223 } 203 224 204 static void lua_pushglobaltable_52( lua_State* L)225 static void lua_pushglobaltable_52( lua_State* L ) 205 226 { 206 227 lua_rawgeti( L, LUA_REGISTRYINDEX_52, LUA_GLOBALSINDEX_52 ); 207 228 } 208 229 209 #endif 230 231 #endif 232 233 #if defined( NV_LUA_DYNAMIC ) 210 234 211 235 bool nv::load_lua_library( const char* path ) … … 311 335 } 312 336 313 #endif 337 #else 338 339 bool nv::load_lua_library( const char* path ) 340 { 341 lua_rawlen = lua_objlen; 342 lua_absindex = lua_absindex_51; 343 lua_getglobal = lua_getglobal_51; 344 lua_setglobal = lua_setglobal_51; 345 luaL_setmetatable = luaL_setmetatable_51; 346 luaL_testudata = luaL_testudata_51; 347 lua_version = lua_version_51; 348 lua_copy = lua_copy_51; 349 lua_rawgetp = lua_rawgetp_51; 350 lua_rawsetp = lua_rawsetp_51; 351 lua_pushglobaltable = lua_pushglobaltable_51; 352 luaL_setfuncs = luaL_setfuncs_51; 353 luaL_getsubtable = luaL_getsubtable_51; 354 luaL_requiref = luaL_requiref_51; 355 356 NV_LUA_LOAD( lua_lessthan ); 357 NV_LUA_LOAD( lua_equal ); 358 lua_compare = lua_compare_51; 359 LUA_UPVALUEINDEX = LUA_GLOBALSINDEX_51; 360 LUA_REGISTRYINDEX = LUA_REGISTRYINDEX_51; 361 LUA_VERSION_NUM = 501; 362 return true; 363 } 364 365 #endif
Note: See TracChangeset
for help on using the changeset viewer.