Description
Add a configuration property which would change macro parameter passing from pass by name, to pass by value. I think in many instances this option will provide behavior that is more intuitive to the user. There are two important exceptions to this, references created by #define, and references created by BlockMacro's $bodyContent. This allows the user to still specify pass by name semantics when desired, for example:
#define($x) #if($foo)$foo.bar#
{else}#go($x)
In the above example '#if($foo)$foo.bar#{else}
None#end' will be passed by name. In all other cases pass by value rules apply for example:
#go($foo.bar [1, 2, 3] #if($bar)Yes#
{else}No#end)
In the above example all parameters will be evaluated to a value first, then passed to #go. This has potential performance improvements also.