Vincent Bussol created JEXL-431:
-----------------------------------

             Summary: Parse error with variables declared in a catch clause
                 Key: JEXL-431
                 URL: https://issues.apache.org/jira/browse/JEXL-431
             Project: Commons JEXL
          Issue Type: Bug
    Affects Versions: 3.4.0
            Reporter: Vincent Bussol


A variable defined in a catch clause cannot be reused in the same block.
The following scripts are not allowed by the parser:
{code:java}
try {
  // do stuff
} catch (let error) {
  // manage error
}
let error = 'hello error';{code}
Or:
{code:java}
try {
  // do stuff
} catch (let error) {
  // manage error
}
try {
  // do stuff
} catch (let error) {
  // manage error
}{code}

Both cases end with a parsing error:
{code:java}
error: variable is already declared {code}

A failing test can look like:
{code:java}
JexlEngine jexl = new JexlBuilder().create();
final String src = "let x = 0; try { x += 19 } catch (let error) { return 169 } 
try { x += 23 } catch (let error) { return 169 }";
final JexlScript script = jexl.createScript(src);
assertNotNull(script);
final Object result = script.execute(null);
assertEquals(42, result); {code}

At runtime it works fine.
A try-with-resources is working fine as well:
{code:java}
try (let closeable = open()) {
  // IO stuff
}
try (let closeable = open()) {
  // IO stuff
}{code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to