diff options
| author | Philipp Janda <siffiejoe@gmx.net> | 2015-01-21 14:37:41 +0100 |
|---|---|---|
| committer | Philipp Janda <siffiejoe@gmx.net> | 2015-01-21 14:37:41 +0100 |
| commit | eec3f9e44bee334542348bdd1d428417e22ed5e5 (patch) | |
| tree | 82fe996fb72ee5a86b9f872fcf57df8fb888a280 /lprefix.h | |
| parent | c57750c925553f627701f2c4897ee6bd6488c7c1 (diff) | |
| download | lua-compat-5.3-eec3f9e44bee334542348bdd1d428417e22ed5e5.tar.gz lua-compat-5.3-eec3f9e44bee334542348bdd1d428417e22ed5e5.tar.bz2 lua-compat-5.3-eec3f9e44bee334542348bdd1d428417e22ed5e5.zip | |
use Lua 5.3's source for string packing
Diffstat (limited to 'lprefix.h')
| -rw-r--r-- | lprefix.h | 42 |
1 files changed, 42 insertions, 0 deletions
| @@ -54,6 +54,9 @@ | |||
| 54 | 54 | ||
| 55 | #ifdef ltablib_c | 55 | #ifdef ltablib_c |
| 56 | # define luaopen_table luaopen_compat53_table | 56 | # define luaopen_table luaopen_compat53_table |
| 57 | /* lua_rawgeti in compat53.h is implemented as a macro, so the | ||
| 58 | * function signature doesn't match when you use a function pointer | ||
| 59 | */ | ||
| 57 | static int compat53_rawgeti (lua_State *L, int i, lua_Integer n) { | 60 | static int compat53_rawgeti (lua_State *L, int i, lua_Integer n) { |
| 58 | return lua_rawgeti(L, i, n); | 61 | return lua_rawgeti(L, i, n); |
| 59 | } | 62 | } |
| @@ -64,11 +67,50 @@ static void compat53_rawseti (lua_State *L, int i, lua_Integer n) { | |||
| 64 | } | 67 | } |
| 65 | # undef lua_rawseti | 68 | # undef lua_rawseti |
| 66 | # define lua_rawseti compat53_rawseti | 69 | # define lua_rawseti compat53_rawseti |
| 70 | /* we have lua_compare emulation for Lua 5.1, but it involves calling | ||
| 71 | * Lua code, and the only use in the table library is for '<', so ... | ||
| 72 | */ | ||
| 67 | # if LUA_VERSION_NUM == 501 | 73 | # if LUA_VERSION_NUM == 501 |
| 68 | # undef lua_compare | 74 | # undef lua_compare |
| 69 | # define lua_compare(L, a, b, op) lua_lessthan(L, a, b) | 75 | # define lua_compare(L, a, b, op) lua_lessthan(L, a, b) |
| 70 | # endif | 76 | # endif |
| 71 | #endif /* ltablib_c */ | 77 | #endif /* ltablib_c */ |
| 72 | 78 | ||
| 79 | #ifdef lstrlib_c | ||
| 80 | /* move the string library open function out of the way (we only take | ||
| 81 | * the string packing functions)! | ||
| 82 | */ | ||
| 83 | # define luaopen_string luaopen_string_XXX | ||
| 84 | /* used in string.format implementation, which we don't use: */ | ||
| 85 | # ifndef LUA_INTEGER_FRMLEN | ||
| 86 | # define LUA_INTEGER_FRMLEN "" | ||
| 87 | # define LUA_NUMBER_FRMLEN "" | ||
| 88 | # endif | ||
| 89 | # if LUA_VERSION_NUM < 503 | ||
| 90 | /* lstrlib assumes that lua_Integer and lua_Unsigned have the same | ||
| 91 | * size, so we use the unsigned equivalent of ptrdiff_t! */ | ||
| 92 | # define lua_Unsigned size_t | ||
| 93 | # endif | ||
| 94 | static int str_pack (lua_State *L); | ||
| 95 | static int str_packsize (lua_State *L); | ||
| 96 | static int str_unpack (lua_State *L); | ||
| 97 | LUAMOD_API int luaopen_compat53_string (lua_State *L) { | ||
| 98 | luaL_Reg const funcs[] = { | ||
| 99 | { "pack", str_pack }, | ||
| 100 | { "packsize", str_packsize }, | ||
| 101 | { "unpack", str_unpack }, | ||
| 102 | { NULL, NULL } | ||
| 103 | }; | ||
| 104 | luaL_newlib(L, funcs); | ||
| 105 | return 1; | ||
| 106 | } | ||
| 107 | /* make luaopen_string(_XXX) static, so it (and all other referenced | ||
| 108 | * string functions) won't be included in the resulting dll | ||
| 109 | * (hopefully). | ||
| 110 | */ | ||
| 111 | # undef LUAMOD_API | ||
| 112 | # define LUAMOD_API static | ||
| 113 | #endif /* lstrlib.c */ | ||
| 114 | |||
| 73 | #endif | 115 | #endif |
| 74 | 116 | ||
