diff --git a/anselme.lua b/anselme.lua index 04977a4..5c99c82 100644 --- a/anselme.lua +++ b/anselme.lua @@ -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 diff --git a/ast/abstract/Node.lua b/ast/abstract/Node.lua index aa785bb..7ca1106 100644 --- a/ast/abstract/Node.lua +++ b/ast/abstract/Node.lua @@ -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 diff --git a/doc/gendocs.lua b/doc/gendocs.lua index 60a0eda..dc6ad22 100644 --- a/doc/gendocs.lua +++ b/doc/gendocs.lua @@ -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" } diff --git a/parser/Source.lua b/parser/Source.lua index b74df20..2b397d1 100644 --- a/parser/Source.lua +++ b/parser/Source.lua @@ -1,4 +1,5 @@ local class = require("class") +local utf8 = utf8 or require("lua-utf8") local Source Source = class { diff --git a/parser/code_to_tree.lua b/parser/code_to_tree.lua index ad220ba..32db680 100644 --- a/parser/code_to_tree.lua +++ b/parser/code_to_tree.lua @@ -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) diff --git a/parser/expression/comment.lua b/parser/expression/comment.lua index cdc55fb..3d22115 100644 --- a/parser/expression/comment.lua +++ b/parser/expression/comment.lua @@ -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 diff --git a/readme.md b/readme.md index 2dbc974..2e486ca 100644 --- a/readme.md +++ b/readme.md @@ -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`). diff --git a/stdlib/number.lua b/stdlib/number.lua index cea03eb..7e79b1d 100644 --- a/stdlib/number.lua +++ b/stdlib/number.lua @@ -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 },