1
0
Fork 0
mirror of https://github.com/Reuh/anselme.git synced 2025-10-29 01:29:31 +00:00
anselme/anselme/ast/Assignment.lua

39 lines
830 B
Lua

local ast = require("anselme.ast")
local Nil
local operator_priority = require("anselme.common").operator_priority
local Assignment = ast.abstract.Node {
type = "assignment",
identifier = nil,
expression = nil,
init = function(self, identifier, expression)
self.identifier = identifier
self.expression = expression
end,
_format = function(self, ...)
return self.identifier:format(...).." = "..self.expression:format_right(...)
end,
_format_priority = function(self)
return operator_priority["_=_"]
end,
traverse = function(self, fn, ...)
fn(self.identifier, ...)
fn(self.expression, ...)
end,
_eval = function(self, state)
local val = self.expression:eval(state)
state.scope:set(self.identifier, val)
return Nil:new()
end,
}
package.loaded[...] = Assignment
Nil = ast.Nil
return Assignment