Next idea: Replace `params` object with `better_params` object. Avoids legacy breakages

pull/1200/head
Rick Carlino 2020-05-09 16:35:16 -05:00
parent 755cfb6f9e
commit 4694108cfd
2 changed files with 21 additions and 5 deletions

View File

@ -112,6 +112,18 @@ defmodule FarmbotCeleryScript.Compiler.Sequence do
end
end
def create_better_params(body) do
Enum.reduce(body, %{}, fn ast, map ->
case ast do
%{kind: :variable_declaration} ->
args = Map.fetch!(ast, :args)
Map.put(map, Map.fetch!(args, :label), Map.fetch!(args, :data_value))
hmm ->
raise "Unexpected kind #{inspect(hmm)}"
end
end)
end
def compile_sequence(
%{args: %{locals: %{body: params}} = args, body: block, meta: meta},
env
@ -137,6 +149,8 @@ defmodule FarmbotCeleryScript.Compiler.Sequence do
end
end)
better_params = create_better_params(body)
{:__block__, env, assignments} = compile_block(body, env)
sequence_name = meta[:sequence_name] || args[:sequence_name]
steps = compile_block(block, env) |> decompose_block_to_steps()
@ -153,7 +167,7 @@ defmodule FarmbotCeleryScript.Compiler.Sequence do
# parent = Keyword.fetch!(params, :parent)
unquote_splicing(params_fetch)
unquote_splicing(assignments)
better_params = unquote(better_params)
# Unquote the remaining sequence steps.
unquote(steps)
end

View File

@ -1,7 +1,7 @@
defmodule FarmbotCeleryScript.Compiler.UpdateResource do
alias FarmbotCeleryScript.{Compiler, AST, DotProps}
alias FarmbotCeleryScript.{ AST, DotProps}
def update_resource(%AST{args: args, body: body}, env) do
def update_resource(%AST{args: args, body: body}, _env) do
quote location: :keep do
me = unquote(__MODULE__)
variable = unquote(Map.fetch!(args, :resource))
@ -9,8 +9,10 @@ defmodule FarmbotCeleryScript.Compiler.UpdateResource do
case variable do
%AST{kind: :identifier} ->
{name, environ, nil} = Compiler.compile_ast(variable, params)
me.do_update(Keyword.fetch!(environ, name), update)
args = Map.fetch!(variable, :args)
label = Map.fetch!(args, :label)
resource = Map.fetch!(better_params, label)
me.do_update(resource, update)
%AST{kind: :resource} ->
me.do_update(variable.args, update)