diff --git a/CMakeLists.txt b/CMakeLists.txt index 0bcbd96..1c72a62 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -43,7 +43,7 @@ set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules") include(GNUInstallDirs) find_package(EditorConfig REQUIRED) -set(Lua_FIND_VERSION 5.2) # minimum Lua version +set(Lua_FIND_VERSION 5.1) # minimum Lua version find_package(Lua REQUIRED) set(CMAKE_C_STANDARD 99) diff --git a/editorconfig-core-scm-1.rockspec b/editorconfig-core-scm-1.rockspec index 220f0a3..e578618 100644 --- a/editorconfig-core-scm-1.rockspec +++ b/editorconfig-core-scm-1.rockspec @@ -20,7 +20,7 @@ provides the same functionality as the Editorconfig C Core library.", license = "BSD", } dependencies = { - "lua >= 5.2", + "lua >= 5.1", } build = { type = "cmake", diff --git a/editorconfig_lua.c b/editorconfig_lua.c index 9aadebf..ea9c666 100644 --- a/editorconfig_lua.c +++ b/editorconfig_lua.c @@ -6,10 +6,10 @@ * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. + * this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE @@ -36,11 +36,35 @@ #error "ECL_VERSION is not defined." #endif +#if LUA_VERSION_NUM < 502 +/* + * Lua 5.1 compatibility functions. + * Adapted from Lua 5.2.x source. + */ +void +luaL_setfuncs(lua_State *L, const luaL_Reg *l, int nup) +{ + luaL_checkstack(L, nup, "too many upvalues"); + for (; l->name; l++) { + int i; + for (i = 0; i < nup; i++) + lua_pushvalue(L, -nup); + lua_pushcclosure(L, l->func, nup); + lua_setfield(L, -(nup + 2), l->name); + } + lua_pop(L, nup); +} + +#ifndef luaL_newlib +#define luaL_newlib(L, l) (lua_newtable(L), luaL_setfuncs(L, l, 0)) +#endif +#endif + /*** * Lua bindings to the EditorConfig C Core library. * @module editorconfig */ - + /* Receives 3 arguments, two optional */ static editorconfig_handle open_ec_handle(lua_State *L) @@ -94,7 +118,7 @@ lec_parse(lua_State *L) editorconfig_handle eh; int name_value_count; const char *name, *value; - lua_Integer idx = 1; + lua_Number idx = 1; /* Use lua_Number for Lua 5.1 compatibility */ eh = open_ec_handle(L); assert(eh != NULL); @@ -108,7 +132,7 @@ lec_parse(lua_State *L) lua_pushstring(L, name); lua_pushstring(L, value); lua_settable(L, 1); - lua_pushinteger(L, idx); + lua_pushnumber(L, idx); /* Use lua_pushnumber for Lua 5.1 compatibility */ lua_pushstring(L, name); lua_settable(L, 2); idx += 1;