[ https://issues.apache.org/jira/browse/JEXL-390?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17651338#comment-17651338 ]
Henri Biestro commented on JEXL-390: ------------------------------------ You are absolutely correct. One way to fool-proof it ( pragmas must occur before any statement) and maintain compatibility (and choice) would be to introduce a feature flag (much like operator names). > Pragmas should not be statements > -------------------------------- > > Key: JEXL-390 > URL: https://issues.apache.org/jira/browse/JEXL-390 > Project: Commons JEXL > Issue Type: Improvement > Affects Versions: 3.2.1 > Reporter: Dmitri Blinov > Assignee: Henri Biestro > Priority: Minor > Fix For: 3.3 > > > In Jexl pragmas are treated as statements syntactically, but do not find > their way to AST tree and this leads to strange bugs like in the following > example > {code} > @Test > public void testBadPragmas() throws Exception { > final JexlEngine jexl = new > JexlBuilder().cache(1024).debug(true).create(); > final JexlScript script = jexl.createScript("if (true) #pragma one > 42"); > JexlContext jc = new MapContext(); > final Object result = script.execute(jc); > debuggerCheck(jexl); > } > {code} > While this partucular bug can be trivially fixed, in fact the whole idea to > allow putting pragmas for example inside a loop or inside if-branch is a > strange language design (I'm not aware of examples in other languages) as it > gives false idea of the pragma being controlled by script execution logic. > If there's no reason or use case to keep this design as is, my proposal is to > make a grammar change and allow pragmas to be declared only at the top of the > script. Another point to change current pragma implementation is that pragmas > can not be used with expressions, e.g. no way to specify standard options / > imports. -- This message was sent by Atlassian Jira (v8.20.10#820010)