Compare commits

...

2 Commits

Author SHA1 Message Date
Francesco Abbate b118ac0c64 Fix problem with gmatch on utf8 characters when using luajit 2020-11-29 14:43:14 +01:00
Francesco Abbate c722b56b7e Initial draft of transition to use LuaJIT2 instead of Lua 5.2
There is problem with utf8 expression matching on common.utf8_chars
2020-11-29 11:45:32 +01:00
10 changed files with 94 additions and 12 deletions

View File

@ -8,7 +8,7 @@ end
function common.utf8_chars(text)
return text:gmatch("[\0-\x7f\xc2-\xf4][\x80-\xbf]*")
return text:gmatch("[\x01-\x7f\xc2-\xf4][\x80-\xbf]*")
end

2
data/core/compat.lua Normal file
View File

@ -0,0 +1,2 @@
table.unpack = unpack

View File

@ -1,4 +1,5 @@
require "core.strict"
require "core.compat"
local common = require "core.common"
local config = require "core.config"
local style = require "core.style"

View File

@ -5,13 +5,7 @@ libm = cc.find_library('m', required : false)
libdl = cc.find_library('dl', required : false)
lua_dep = dependency('lua5.2', required : false)
if not lua_dep.found()
lua_subproject = subproject('lua', default_options: [
'default_library=static', 'use_readline=false'
])
lua_dep = lua_subproject.get_variable('lua_dep')
endif
lua_dep = dependency('luajit')
sdl_dep = dependency('sdl2', method: 'config-tool')
lite_include = include_directories('src')

View File

@ -5,6 +5,8 @@
#include "lauxlib.h"
#include "lualib.h"
#include "compat.h"
#define API_TYPE_FONT "Font"
void api_load_libs(lua_State *L);

64
src/api/compat.c Normal file
View File

@ -0,0 +1,64 @@
#include <lauxlib.h>
#include "compat.h"
static int lua_absindex (lua_State *L, int i) {
if (i < 0 && i > LUA_REGISTRYINDEX)
i += lua_gettop(L) + 1;
return i;
}
int luaL_getsubtable (lua_State *L, int i, const char *name) {
int abs_i = lua_absindex(L, i);
luaL_checkstack(L, 3, "not enough stack slots");
lua_pushstring(L, name);
lua_gettable(L, abs_i);
if (lua_istable(L, -1))
return 1;
lua_pop(L, 1);
lua_newtable(L);
lua_pushstring(L, name);
lua_pushvalue(L, -2);
lua_settable(L, abs_i);
return 0;
}
void luaL_requiref (lua_State *L, const char *modname, lua_CFunction openf, int glb) {
luaL_checkstack(L, 3, "not enough stack slots available");
luaL_getsubtable(L, LUA_REGISTRYINDEX, "_LOADED");
lua_getfield(L, -1, modname);
if (lua_isnil(L, -1)) {
lua_pop(L, 1);
lua_pushcfunction(L, openf);
lua_pushstring(L, modname);
lua_call(L, 1, 1);
lua_pushvalue(L, -1);
lua_setfield(L, -3, modname);
}
if (glb) {
lua_pushvalue(L, -1);
lua_setglobal(L, modname);
}
lua_replace(L, -2);
}
void luaL_setfuncs (lua_State *L, const luaL_Reg *l, int nup) {
luaL_checkstack(L, nup+1, "too many upvalues");
for (; l->name != NULL; l++) { /* fill the table with given functions */
int i;
lua_pushstring(L, l->name);
for (i = 0; i < nup; i++) /* copy upvalues to the top */
lua_pushvalue(L, -(nup + 1));
lua_pushcclosure(L, l->func, nup); /* closure with those upvalues */
lua_settable(L, -(nup + 3)); /* table must be below the upvalues, the name and the closure */
}
lua_pop(L, nup); /* remove upvalues */
}
void luaL_setmetatable (lua_State *L, const char *tname) {
luaL_checkstack(L, 1, "not enough stack slots");
luaL_getmetatable(L, tname);
lua_setmetatable(L, -2);
}

17
src/api/compat.h Normal file
View File

@ -0,0 +1,17 @@
#ifndef COMPAT_H
#define COMPAT_H
#include <lua.h>
#include <lauxlib.h>
#define luaL_newlibtable(L, l) \
(lua_createtable(L, 0, sizeof(l)/sizeof(*(l))-1))
#define luaL_newlib(L, l) \
(luaL_newlibtable(L, l), luaL_register(L, NULL, l))
extern void luaL_requiref (lua_State *L, const char *modname, lua_CFunction openf, int glb);
extern void luaL_setfuncs (lua_State *L, const luaL_Reg *l, int nup);
extern void luaL_setmetatable (lua_State *L, const char *tname);
extern int luaL_getsubtable (lua_State *L, int i, const char *name);
#endif

View File

@ -1,4 +1,5 @@
lite_sources = [
'api/compat.c',
'api/api.c',
'api/renderer.c',
'api/renderer_font.c',

View File

@ -1,4 +0,0 @@
[wrap-git]
directory = lua
url = https://github.com/franko/lua
revision = v5.2.4-5

5
subprojects/luajit.wrap Normal file
View File

@ -0,0 +1,5 @@
[wrap-git]
directory = luajit
url = https://github.com/franko/luajit
revision = v2.0.5-lhelper2