diff --git a/lib/farmbot/celery_script/ast/node/_if.ex b/lib/farmbot/celery_script/ast/node/_if.ex index 36a11e36..ec1e8970 100644 --- a/lib/farmbot/celery_script/ast/node/_if.ex +++ b/lib/farmbot/celery_script/ast/node/_if.ex @@ -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 diff --git a/lib/farmbot/celery_script/ast/node/execute.ex b/lib/farmbot/celery_script/ast/node/execute.ex index 50de6c5c..bd998974 100644 --- a/lib/farmbot/celery_script/ast/node/execute.ex +++ b/lib/farmbot/celery_script/ast/node/execute.ex @@ -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 diff --git a/lib/farmbot/celery_script/ast/node/sequence.ex b/lib/farmbot/celery_script/ast/node/sequence.ex index 7dc5b039..ee479fda 100644 --- a/lib/farmbot/celery_script/ast/node/sequence.ex +++ b/lib/farmbot/celery_script/ast/node/sequence.ex @@ -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