Shoehorn sequence name into the args. Hopefully this ins't an issue later on.

This commit is contained in:
connor rigby 2017-11-21 09:52:45 -08:00
parent 296ea01ea1
commit 117eaec2f1
3 changed files with 17 additions and 20 deletions

View file

@ -9,15 +9,9 @@ defmodule Farmbot.CeleryScript.AST.Node.If do
env = mutate_env(env)
left = eval_lhs(lhs)
if is_number(left) or is_nil(left) do
eval_if(left, op, rhs)
# |> fn(result) ->
# Logger.debug 2, "IF evaluated to #{inspect result}."
# result
# end.() # for debug purposes.
|> do_jump(else_, then_, env)
else
{:error, "Lefthand could not be evaluated to a number (#{inspect left})", env}
cond do
is_number(left) or is_nil(left) -> eval_if(left, op, rhs) |> do_jump(else_, then_, env)
match?({:error, _}, left) -> {:error, elem(left, 1), env}
end
end
@ -35,7 +29,8 @@ defmodule Farmbot.CeleryScript.AST.Node.If do
defp eval_if(nil, :is_undefined, _), do: true
defp eval_if(_, :is_undefined, _), do: false
defp eval_if(nil, _, _), do: {:error, "Could not eval IF because left hand side of if statement is undefined."}
defp eval_if(nil, _, _),
do: {:error, "Could not eval IF because left hand side of if statement is undefined."}
defp eval_if(lhs, :>, rhs) when lhs > rhs, do: true
defp eval_if(_lhs, :>, _rhs), do: false

View file

@ -14,7 +14,9 @@ defmodule Farmbot.CeleryScript.AST.Node.Execute do
seq ->
case Farmbot.CeleryScript.AST.decode(seq) do
{:ok, ast} ->
Farmbot.CeleryScript.execute(ast, env)
# remove this some day.
ast_with_label = %{ast | args: Map.put(ast.args, :label, seq.name)}
Farmbot.CeleryScript.execute(ast_with_label, env)
{:error, reason} -> {:error, reason, env}
end
end

View file

@ -2,24 +2,24 @@ defmodule Farmbot.CeleryScript.AST.Node.Sequence do
@moduledoc false
use Farmbot.CeleryScript.AST.Node
use Farmbot.Logger
allow_args [:version, :is_outdated]
allow_args [:version, :is_outdated, :label]
def execute(%{version: _, is_outdated: _}, body, env) do
Logger.busy 2, "Starting sequence."
def execute(%{version: _, is_outdated: _, label: name}, body, env) do
Logger.busy 2, "[#{name}] - Sequence init."
env = mutate_env(env)
do_reduce(body, env)
do_reduce(body, env, name)
end
defp do_reduce([ast | rest], env) do
Logger.info 2, "Sequence Executing: #{inspect ast}"
defp do_reduce([ast | rest], env, name) do
Logger.info 2, "[#{name}] - Sequence Executing: #{inspect ast}"
case Farmbot.CeleryScript.execute(ast, env) do
{:ok, new_env} -> do_reduce(rest, new_env)
{:ok, new_env} -> do_reduce(rest, new_env, name)
{:error, reason, env} -> {:error, reason, env}
end
end
defp do_reduce([], env) do
Logger.success 2, "Sequence complete!"
defp do_reduce([], env, name) do
Logger.success 2, "[#{name}] - Sequence complete."
{:ok, env}
end
end