1
0
Fork 0
mirror of https://github.com/Reuh/anselme.git synced 2025-10-27 16:49:31 +00:00

LuaJIT compatibility

Spoiler alert: Anselme run ~1.5x slower in LuaJIT than Lua 5.3/5.4. I didn't expected LuaJIT to be able to optimize anything with my super performant and cache friendly AST walker interpreter, but being this much slower is kinda impressive.
This commit is contained in:
Étienne Fildadut 2023-12-28 17:37:57 +01:00
parent 82ce53be83
commit 809613ef8b
8 changed files with 27 additions and 6 deletions

View file

@ -43,11 +43,16 @@
-- end -- end
-- ``` -- ```
local parser = require("parser") -- LuaJIT compatibility
local State = require("state.State") -- TODO: too heavyhanded
require("ast.abstract.Node"):_i_hate_cycles() if _VERSION == "Lua 5.1" then
package.path = "./?/init.lua;" .. package.path
table.unpack = unpack
end
return { local parser, State
local anselme = {
--- Global version string. Follow semver. --- Global version string. Follow semver.
version = "2.0.0-alpha", version = "2.0.0-alpha",
@ -78,3 +83,11 @@ return {
return State:new() return State:new()
end, end,
} }
package.loaded[...] = anselme
parser = require("parser")
State = require("state.State")
require("ast.abstract.Node"):_i_hate_cycles()
return anselme

View file

@ -1,6 +1,7 @@
local class = require("class") local class = require("class")
local fmt = require("common").fmt local fmt = require("common").fmt
local binser = require("lib.binser") local binser = require("lib.binser")
local utf8 = utf8 or require("lua-utf8")
-- NODES SHOULD BE IMMUTABLE AFTER CREATION IF POSSIBLE! -- NODES SHOULD BE IMMUTABLE AFTER CREATION IF POSSIBLE!
-- i don't think i actually rely on this behavior for anything but it makes me feel better about life in general -- i don't think i actually rely on this behavior for anything but it makes me feel better about life in general

View file

@ -2,6 +2,8 @@
-- Behold! A documentation generator that doesn't try to be smart! -- Behold! A documentation generator that doesn't try to be smart!
-- Call this from the root anselme directory: `lua doc/gendocs.lua` -- Call this from the root anselme directory: `lua doc/gendocs.lua`
local utf8 = utf8 or require("lua-utf8")
local files = { local files = {
"doc/api.md" "doc/api.md"
} }

View file

@ -1,4 +1,5 @@
local class = require("class") local class = require("class")
local utf8 = utf8 or require("lua-utf8")
local Source local Source
Source = class { Source = class {

View file

@ -1,5 +1,7 @@
--- transform raw code string into a nested tree of lines --- transform raw code string into a nested tree of lines
local utf8 = utf8 or require("lua-utf8")
local Source = require("parser.Source") local Source = require("parser.Source")
local function indented_to_tree(indented) local function indented_to_tree(indented)

View file

@ -30,7 +30,7 @@ comment = primary {
subcomment, rem = comment:parse(source, rem, limit_pattern) subcomment, rem = comment:parse(source, rem, limit_pattern)
table.insert(content_list, "((") table.insert(content_list, "((")
for _, c in ipairs(subcomment) do table.insert(content_list, c) end table.insert(content_list, subcomment)
table.insert(content_list, "))") table.insert(content_list, "))")
-- no end token after the comment -- no end token after the comment
elseif not rem:match("^%)%)") then elseif not rem:match("^%)%)") then

View file

@ -1,3 +1,5 @@
# Anselme # Anselme
The overengineered dialog scripting system in pure Lua. The overengineered dialog scripting system in pure Lua.
Supported: Lua 5.4, Lua 5.3, LuaJIT (LuaJIT requires the utf8 module: `luarocks --lua-version=5.1 install luautf8`).

View file

@ -42,7 +42,7 @@ return {
{ "_-_", "(a::number, b::number)", function(state, a, b) return Number:new(a.number - b.number) end }, { "_-_", "(a::number, b::number)", function(state, a, b) return Number:new(a.number - b.number) end },
{ "_*_", "(a::number, b::number)", function(state, a, b) return Number:new(a.number * b.number) end }, { "_*_", "(a::number, b::number)", function(state, a, b) return Number:new(a.number * b.number) end },
{ "_/_", "(a::number, b::number)", function(state, a, b) return Number:new(a.number / b.number) end }, { "_/_", "(a::number, b::number)", function(state, a, b) return Number:new(a.number / b.number) end },
{ "_//_", "(a::number, b::number)", function(state, a, b) return Number:new(a.number // b.number) end }, { "_//_", "(a::number, b::number)", function(state, a, b) return Number:new(math.floor(a.number / b.number)) end },
{ "_%_", "(a::number, b::number)", function(state, a, b) return Number:new(a.number % b.number) end }, { "_%_", "(a::number, b::number)", function(state, a, b) return Number:new(a.number % b.number) end },
{ "_^_", "(a::number, b::number)", function(state, a, b) return Number:new(a.number ^ b.number) end }, { "_^_", "(a::number, b::number)", function(state, a, b) return Number:new(a.number ^ b.number) end },
{ "-_", "(a::number)", function(state, a) return Number:new(-a.number) end }, { "-_", "(a::number)", function(state, a) return Number:new(-a.number) end },