Remove action types & separate calculations from assignements
The work Action::new
used to do was to be done anyway when updating functions (if the type is Str, you can only update a string).
This allows to extract common setup calls to keep the code more DRY.
Extract the numeric values and arrays validation with type parameters
Don't recheck values on assignement pass
The script checked again all the values on the assignement pass. Store the patch instead and simply iterate over the collected values to assign.
Exit early when errors. Defer computations. Cache results. Extract math in closures and use the same functions for single values and arrays.