[ 
http://issues.apache.org/jira/browse/VELOCITY-285?page=comments#action_12447560 
] 
            
Henning Schmiedehausen commented on VELOCITY-285:
-------------------------------------------------

Ok, I know what that is. It is the loop variable. Sounds crazy, but here it 
goes:

If you set velocimacro.context.localscope = true then it works.

The problem is, that the loop variable (and also the counter variable) are 
always considered "local". However if v.c.l = false, then the put instruction 
in runtime.directive.Foreach, line 415 and 417 put the value right through the 
context into the global context (see VMContext#put), treating it as global. 


> reference within macro and foreach is incorrect
> -----------------------------------------------
>
>                 Key: VELOCITY-285
>                 URL: http://issues.apache.org/jira/browse/VELOCITY-285
>             Project: Velocity
>          Issue Type: Bug
>          Components: Engine
>    Affects Versions: 1.4
>         Environment: Operating System: other
> Platform: Other
>            Reporter: Gilles Scokart
>         Assigned To: Henning Schmiedehausen
>            Priority: Minor
>             Fix For: 1.5
>
>
> It seems that there is a bug when we have loop into a recursive macro.
> Here is the test I run :
> #macro (test_loop $p)
> call to test_loop ($p)
> #foreach($child in $p)
>     in the loop the param should not be changed : ($p)
> #test_loop($child)
> #end
> return
> #end
> #set($l1=["a"])
> #set($l = [$l1])
> #test_loop($l)
> It produce:
> call to test_loop ([[a]])
>       in the loop the param should not be changed : ([[a]])
> call to test_loop ([a])
>       in the loop the param should not be changed : (a)
> call to test_loop (a)
> return
> return
> return
> IMHO, it should be 
> call to test_loop ([[a]])
>       in the loop the param should not be changed : ([[a]])
> call to test_loop ([a])
>       in the loop the param should not be changed : ([a])
> call to test_loop (a)
> return
> return
> return
> The difference is in the second recusive call.  I don't know why, but it seems
> that the instruction #foreach($child in $p) has modified $p that contains the
> value of $child.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to