diff options
author | William Ahern <william@server.local> | 2013-12-09 20:56:25 -0800 |
---|---|---|
committer | William Ahern <william@server.local> | 2013-12-09 20:56:25 -0800 |
commit | d4aa420319bff15a6f84f679c6374dda7cf1b0f2 (patch) | |
tree | b716502f27733e5dd9d2e45715a00bf88586e12e /src/compat52.h | |
parent | e42cc7815ff3c948c4ab4e2782da2a2cb4f476bf (diff) | |
download | luaossl-d4aa420319bff15a6f84f679c6374dda7cf1b0f2.tar.gz luaossl-d4aa420319bff15a6f84f679c6374dda7cf1b0f2.tar.bz2 luaossl-d4aa420319bff15a6f84f679c6374dda7cf1b0f2.zip |
move newly split files into src/ directory
Diffstat (limited to 'src/compat52.h')
-rw-r--r-- | src/compat52.h | 152 |
1 files changed, 152 insertions, 0 deletions
diff --git a/src/compat52.h b/src/compat52.h new file mode 100644 index 0000000..96ec9b2 --- /dev/null +++ b/src/compat52.h | |||
@@ -0,0 +1,152 @@ | |||
1 | /* ========================================================================== | ||
2 | * compat52.h - Routines for Lua 5.2 compatibility | ||
3 | * -------------------------------------------------------------------------- | ||
4 | * Copyright (c) 2012 William Ahern | ||
5 | * | ||
6 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
7 | * copy of this software and associated documentation files (the | ||
8 | * "Software"), to deal in the Software without restriction, including | ||
9 | * without limitation the rights to use, copy, modify, merge, publish, | ||
10 | * distribute, sublicense, and/or sell copies of the Software, and to permit | ||
11 | * persons to whom the Software is furnished to do so, subject to the | ||
12 | * following conditions: | ||
13 | * | ||
14 | * The above copyright notice and this permission notice shall be included | ||
15 | * in all copies or substantial portions of the Software. | ||
16 | * | ||
17 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | ||
18 | * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||
19 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN | ||
20 | * NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, | ||
21 | * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR | ||
22 | * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE | ||
23 | * USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
24 | * ========================================================================== | ||
25 | */ | ||
26 | #if LUA_VERSION_NUM < 502 | ||
27 | |||
28 | #define LUA_OK 0 | ||
29 | |||
30 | |||
31 | static void luaL_setmetatable(lua_State *L, const char *tname) { | ||
32 | luaL_getmetatable(L, tname); | ||
33 | lua_setmetatable(L, -2); | ||
34 | } /* luaL_setmetatable() */ | ||
35 | |||
36 | |||
37 | static int lua_absindex(lua_State *L, int idx) { | ||
38 | return (idx > 0 || idx <= LUA_REGISTRYINDEX)? idx : lua_gettop(L) + idx + 1; | ||
39 | } /* lua_absindex() */ | ||
40 | |||
41 | |||
42 | static void *luaL_testudata(lua_State *L, int arg, const char *tname) { | ||
43 | void *p = lua_touserdata(L, arg); | ||
44 | int eq; | ||
45 | |||
46 | if (!p || !lua_getmetatable(L, arg)) | ||
47 | return 0; | ||
48 | |||
49 | luaL_getmetatable(L, tname); | ||
50 | eq = lua_rawequal(L, -2, -1); | ||
51 | lua_pop(L, 2); | ||
52 | |||
53 | return (eq)? p : 0; | ||
54 | } /* luaL_testudate() */ | ||
55 | |||
56 | |||
57 | static void luaL_setfuncs(lua_State *L, const luaL_Reg *l, int nup) { | ||
58 | int i, t = lua_absindex(L, -1 - nup); | ||
59 | |||
60 | for (; l->name; l++) { | ||
61 | for (i = 0; i < nup; i++) | ||
62 | lua_pushvalue(L, -nup); | ||
63 | lua_pushcclosure(L, l->func, nup); | ||
64 | lua_setfield(L, t, l->name); | ||
65 | } | ||
66 | |||
67 | lua_pop(L, nup); | ||
68 | } /* luaL_setfuncs() */ | ||
69 | |||
70 | |||
71 | #define luaL_newlibtable(L, l) \ | ||
72 | lua_createtable(L, 0, (sizeof (l) / sizeof *(l)) - 1) | ||
73 | |||
74 | #define luaL_newlib(L, l) \ | ||
75 | (luaL_newlibtable((L), (l)), luaL_setfuncs((L), (l), 0)) | ||
76 | |||
77 | |||
78 | static void luaL_requiref(lua_State *L, const char *modname, lua_CFunction openf, int glb) { | ||
79 | lua_pushcfunction(L, openf); | ||
80 | lua_pushstring(L, modname); | ||
81 | lua_call(L, 1, 1); | ||
82 | |||
83 | lua_getglobal(L, "package"); | ||
84 | lua_getfield(L, -1, "loaded"); | ||
85 | lua_pushvalue(L, -3); | ||
86 | lua_setfield(L, -2, modname); | ||
87 | |||
88 | lua_pop(L, 2); | ||
89 | |||
90 | if (glb) { | ||
91 | lua_pushvalue(L, -1); | ||
92 | lua_setglobal(L, modname); | ||
93 | } | ||
94 | } /* luaL_requiref() */ | ||
95 | |||
96 | |||
97 | #define lua_resume(L, from, nargs) lua_resume((L), (nargs)) | ||
98 | |||
99 | |||
100 | static void lua_rawgetp(lua_State *L, int index, const void *p) { | ||
101 | index = lua_absindex(L, index); | ||
102 | lua_pushlightuserdata(L, (void *)p); | ||
103 | lua_rawget(L, index); | ||
104 | } /* lua_rawgetp() */ | ||
105 | |||
106 | static void lua_rawsetp(lua_State *L, int index, const void *p) { | ||
107 | index = lua_absindex(L, index); | ||
108 | lua_pushlightuserdata(L, (void *)p); | ||
109 | lua_pushvalue(L, -2); | ||
110 | lua_rawset(L, index); | ||
111 | lua_pop(L, 1); | ||
112 | } /* lua_rawsetp() */ | ||
113 | |||
114 | |||
115 | #ifndef LUA_UNSIGNED | ||
116 | #define LUA_UNSIGNED unsigned | ||
117 | #endif | ||
118 | |||
119 | typedef LUA_UNSIGNED lua_Unsigned; | ||
120 | |||
121 | |||
122 | static void lua_pushunsigned(lua_State *L, lua_Unsigned n) { | ||
123 | lua_pushnumber(L, (lua_Number)n); | ||
124 | } /* lua_pushunsigned() */ | ||
125 | |||
126 | static lua_Unsigned luaL_checkunsigned(lua_State *L, int arg) { | ||
127 | return (lua_Unsigned)luaL_checknumber(L, arg); | ||
128 | } /* luaL_checkunsigned() */ | ||
129 | |||
130 | |||
131 | static lua_Unsigned luaL_optunsigned(lua_State *L, int arg, lua_Unsigned def) { | ||
132 | return (lua_Unsigned)luaL_optnumber(L, arg, (lua_Number)def); | ||
133 | } /* luaL_optunsigned() */ | ||
134 | |||
135 | |||
136 | #ifndef LUA_FILEHANDLE /* Not defined by earlier LuaJIT releases */ | ||
137 | #define LUA_FILEHANDLE "FILE*" | ||
138 | #endif | ||
139 | |||
140 | /* | ||
141 | * Lua 5.1 userdata is a simple FILE *, while LuaJIT is a struct with the | ||
142 | * first member a FILE *, similar to Lua 5.2. | ||
143 | */ | ||
144 | typedef struct luaL_Stream { | ||
145 | FILE *f; | ||
146 | } luaL_Stream; | ||
147 | |||
148 | |||
149 | #define lua_rawlen(...) lua_objlen(__VA_ARGS__) | ||
150 | |||
151 | |||
152 | #endif /* LUA_VERSION_NUM < 502 */ | ||