mirror of
https://github.com/Reuh/anselme.git
synced 2025-10-29 01:29:31 +00:00
39 lines
830 B
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
|