You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Henri Biestro (Jira)" <ji...@apache.org> on 2021/06/03 10:52:00 UTC

[jira] [Updated] (JEXL-287) Wrong resolution of local variables

     [ https://issues.apache.org/jira/browse/JEXL-287?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Henri Biestro updated JEXL-287:
-------------------------------
    Fix Version/s: 3.2

> Wrong resolution of local variables
> -----------------------------------
>
>                 Key: JEXL-287
>                 URL: https://issues.apache.org/jira/browse/JEXL-287
>             Project: Commons JEXL
>          Issue Type: Bug
>    Affects Versions: 3.1
>            Reporter: Dmitri Blinov
>            Assignee: Henri Biestro
>            Priority: Major
>             Fix For: 3.2
>
>
> Consider the following example
> {code:java}
> x = 1; if (false) var x = 2; x
> {code}
> In this example the {{null}} is returned, which is the value of uninitialized local variable {{x}}. The expected behaviour is to return {{1.}}
> The reason is the variable declaration is a *statement*, so one can expect that, as a statement, it should be evaluated according to its position within the script structure. 
> The suggestion is to move the {{Scope.declareVariable()}} call from parse time to interpretation time. Also, the resolution whether an identifier inside the script referes to the local variable or to the contextual variable should be moved from parse time to the interpretation time. 
> I think we can also reconsider the variable resolution during a variable initialization:
> {code:java}
> sum = 0; var sum = sum + 1{code}
> As of now, Jexl evaluates the local variable {{sum}} as {{1}}, as it considers the {{sum+1}} an expression referencing the local variable {{sum}}, which is, sort of, pointless. We can change this to referencing a contextual variable instead, so that the result would be {{2}}. It can be useful in plain-vanilla Jexl (without an access differentiator between local and contextual variables) to allow one to initialize a local variable {{foo}} with the value of contextual variable {{foo}} without using temporary variable.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)