mirror of
https://github.com/Reuh/anselme.git
synced 2025-10-27 16:49:31 +00:00
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.
49 lines
1.9 KiB
Lua
49 lines
1.9 KiB
Lua
local ast = require("ast")
|
|
local Boolean, Number = ast.Boolean, ast.Number
|
|
|
|
return {
|
|
{
|
|
"_<_", "(a::number, b::number)",
|
|
function(state, a, b)
|
|
if a.number < b.number then return b
|
|
else return Boolean:new(false)
|
|
end
|
|
end
|
|
},
|
|
{ "_<_", "(a::equal(false), b::number)", function(state, a, b) return Boolean:new(false) end },
|
|
{
|
|
"_<=_", "(a::number, b::number)",
|
|
function(state, a, b)
|
|
if a.number <= b.number then return b
|
|
else return Boolean:new(false)
|
|
end
|
|
end
|
|
},
|
|
{ "_<=_", "(a::equal(false), b::number)", function(state, a, b) return Boolean:new(false) end },
|
|
{
|
|
"_>_", "(a::number, b::number)",
|
|
function(state, a, b)
|
|
if a.number > b.number then return b
|
|
else return Boolean:new(false)
|
|
end
|
|
end
|
|
},
|
|
{ "_>_", "(a::equal(false), b::number)", function(state, a, b) return Boolean:new(false) end },
|
|
{
|
|
"_>=_", "(a::number, b::number)",
|
|
function(state, a, b)
|
|
if a.number >= b.number then return b
|
|
else return Boolean:new(false)
|
|
end
|
|
end
|
|
},
|
|
{ "_>=_", "(a::equal(false), b::number)", function(state, a, b) return Boolean:new(false) 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)", function(state, a) return Number:new(-a.number) end },
|
|
}
|