TODO:
- Macros as expressions (not just statements)
- Better way to make sure macro variables don't override user variables (not just prefixing with macro_MacroName)
- reduce total number of variables used, especially when there's a lot of explicit targ
- "=" for assigning to variables
- support NAME variables in object variables