defmodule Wongi.Engine.DSL.Assign do
@moduledoc false
alias Wongi.Engine.DSL.Var
defstruct [:name, :value]
def new(%Var{name: name}, value), do: %__MODULE__{name: name, value: value}
def new(name, value) when is_atom(name), do: %__MODULE__{name: name, value: value}
defimpl Wongi.Engine.DSL.Clause do
import Wongi.Engine.Compiler
alias Wongi.Engine.Beta.Assign
def compile(%@for{name: name, value: value}, context) do
node = Assign.new(context.node_ref, name, value)
case find_existing(context, node) do
nil ->
context
|> declare_variable(name)
|> advance(node)
node ->
context
|> advance_existing(node)
end
end
end
end