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:
parent
82ce53be83
commit
809613ef8b
8 changed files with 27 additions and 6 deletions
21
anselme.lua
21
anselme.lua
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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`).
|
||||||
|
|
|
||||||
|
|
@ -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 },
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue