1
0
Fork 0
mirror of https://github.com/Reuh/anselme.git synced 2025-10-27 16:49:31 +00:00
anselme/stdlib/number.lua
Étienne Reuh Fildadut 809613ef8b 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.
2023-12-28 17:37:57 +01:00

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 },
}