You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Dmitri Blinov (Jira)" <ji...@apache.org> on 2022/05/05 14:16:00 UTC

[jira] [Comment Edited] (JEXL-369) Add 'let' and 'const' variable declarations

    [ https://issues.apache.org/jira/browse/JEXL-369?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17532264#comment-17532264 ] 

Dmitri Blinov edited comment on JEXL-369 at 5/5/22 2:15 PM:
------------------------------------------------------------

Henri, could you please provide the vision of what should be changed with introduction of let ? Are we adding nested block-scoped variables like in JS or simply {{let}} is a new \{{var}} in lexical mode ?

May be this is not strictly relates to the ticket, but one of the things with lexically scoped variables that I think we should consider is grammar change to disallow single-statement variable declarations in lexical mode (as of now or with let). For example {{if (cond1) var x = 0;}} If we look at other languages, like JS or Java, this is not allowed. The statements where single-statement variable declarations should be disallowed are {{{}if/else{}}}, {{{}while{}}}, {{{}do{}}}, {{{}for{}}}.  For compatibility reasons in non-lexical mode we can keep the existing grammar. If my work may be of any reference, here is what I did. FunctionStatement() is named function declaration like \{{function x() ... }} and so I also restricted it in lexical mode.
{code:java}
void StatementBranch() #void : {}{    LOOKAHEAD(1) Block() | LOOKAHEAD({!getFeatures().isLexical()}) GenericStatement() | Statement()} 

void GenericStatement() #void : {}{    <SEMICOL>    | AnnotatedStatement()    | LOOKAHEAD(FunctionStatementLookahead()) FunctionStatement()    | LOOKAHEAD(DeclareLocalVar()) VarStatement()
    | LOOKAHEAD(Expression()) ExpressionStatement()
...

void Statement() #void : {}{    <SEMICOL>    | AnnotatedStatement()    | 
    | LOOKAHEAD(Expression()) ExpressionStatement()
...{code}
 


was (Author: dmitri_blinov):
Henri, could you please provide the vision of what should be changed with introduction of let ? Are we adding nested block-scoped variables like in JS or simply {{let}} is a new \{{var }} in lexical mode ?

May be this is not strictly relates to the ticket, but one of the things with lexically scoped variables that I think we should consider is grammar change to disallow single-statement variable declarations in lexical mode (as of now or with let). For example {{if (cond1) var x = 0;}} If we look at other languages, like JS or Java, this is not allowed. The statements where single-statement variable declarations should be disallowed are {{if/else}}, {{{}while{}}}, {{{}do{}}}, {{{}for{}}}.  For compatibility reasons in non-lexical mode we can keep the existing grammar. If my work may be of any reference, here is what I did. FunctionStatement() is named function declaration like {{function x() ... }} and so I also restricted it in lexical mode.
{code:java}
void StatementBranch() #void : {}{    LOOKAHEAD(1) Block() | LOOKAHEAD({!getFeatures().isLexical()}) GenericStatement() | Statement()} 

void GenericStatement() #void : {}{    <SEMICOL>    | AnnotatedStatement()    | LOOKAHEAD(FunctionStatementLookahead()) FunctionStatement()    | LOOKAHEAD(DeclareLocalVar()) VarStatement()
    | LOOKAHEAD(Expression()) ExpressionStatement()
...

void Statement() #void : {}{    <SEMICOL>    | AnnotatedStatement()    | 
    | LOOKAHEAD(Expression()) ExpressionStatement()
...{code}
 

> Add 'let' and 'const' variable declarations
> -------------------------------------------
>
>                 Key: JEXL-369
>                 URL: https://issues.apache.org/jira/browse/JEXL-369
>             Project: Commons JEXL
>          Issue Type: Improvement
>    Affects Versions: 3.2.1
>            Reporter: Henri Biestro
>            Assignee: Henri Biestro
>            Priority: Major
>             Fix For: 3.3
>
>
> WHAT:
> Add creation of lexical scope variables, modifiable with 'let', non-modifiable through 'const'.



--
This message was sent by Atlassian Jira
(v8.20.7#820007)