On 17/07/2013 19:17, Violeta Georgieva wrote:
> 2013/7/17 Mark Thomas wrote:
>>
>> On 17/07/2013 12:43, Mark Thomas wrote:
>>> Violeta Georgieva <miles...@gmail.com> wrote:
>>>
>>>> Having the example from the test:
>>>> (x->y->x-y)(2)(1)
>>>>
>>>> We may transform it like this:
>>>> (()->y->2-y)()(1)
>>>>
>>>> So instead of returning right way when formalParameters.isEmpty()
>>>>
>>>> Shouldn't we have something like the one below in order to continue
>>>> evaluation of the nested expression:
>>>>
>>>>
>>>>
>>>> --- org/apache/el/parser/AstLambdaExpression.java (revision 1504024)
>>>> +++ org/apache/el/parser/AstLambdaExpression.java (working copy)
>>>> @@ -54,9 +54,12 @@
>>>>      LambdaExpression le = new LambdaExpression(formalParameters, ve);
>>>>         le.setELContext(ctx);
>>>>
>>>> +        Object result = le;
>>>> +        int i = 2;
>>>>         if (formalParameters.isEmpty()) {
>>>>             // No formal parameters - invoke the expression
>>>> -            return le.invoke(ctx, (Object[]) null);
>>>> +            result = ((LambdaExpression) result).invoke(ctx,
>>>> (Object[])
>>>> null);
>>>> +            i++;
>>>>         }
>>>>
>>>>       // If there are method parameters, need to invoke the expression
>>>> with
>>>> @@ -64,8 +67,6 @@
>>>>         // should be that many nested expressions.
>>>>      // If there are more nested expressions that parameters this will
>>>> return
>>>>         // a LambdaExpression
>>>> -        Object result = le;
>>>> -        int i = 2;
>>>>         while (result instanceof LambdaExpression && i <
>>>> jjtGetNumChildren()) {
>>>>             result = ((LambdaExpression) result).invoke(
>>>>                     ((AstMethodParameters)
>>>> children[i]).getParameters(ctx));
>>>
>>> I agree the current solution isn't right but I have some local test
> cases that I'm fairly sure will still fail with the above patch. I'm
> working on a fix and should have something to commit soon.
>>
>> Fix applied. What do you think?
> 
> 
> Why it is expected that (()->y->()->x->x-y)()(1)()(2) should throw
> ELException? (TestAstLambdaExpression.testNested04())
> Isn't it a correct one?

That is a copy and paste error that is masking at least two bugs. I've
fixed one bug and am trying to track down why this expression won't
evaluate.

I need to look at your proposal above again.

Mark


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to