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
-- ```
local parser = require("parser")
local State = require("state.State")
require("ast.abstract.Node"):_i_hate_cycles()
-- LuaJIT compatibility
-- TODO: too heavyhanded
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.
version = "2.0.0-alpha",
@ -78,3 +83,11 @@ return {
return State:new()
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 fmt = require("common").fmt
local binser = require("lib.binser")
local utf8 = utf8 or require("lua-utf8")
-- 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

View file

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

View file

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

View file

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

View file

@ -30,7 +30,7 @@ comment = primary {
subcomment, rem = comment:parse(source, rem, limit_pattern)
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, "))")
-- no end token after the comment
elseif not rem:match("^%)%)") then

View file

@ -1,3 +1,5 @@
# Anselme
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(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)", function(state, a) return Number:new(-a.number) end },