diff options
author | Lars Knoll <lars.knoll@qt.io> | 2018-03-20 22:40:07 +0100 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2018-04-26 21:37:48 +0000 |
commit | 1b30e8f94cc15352583e8e1f27139676683f62af (patch) | |
tree | f149be122d7e31d915f718a65ae7e9fb01f751b5 /src/qml/parser | |
parent | 09cd6f8020b7c25eaaf959a48c452b01aebcf627 (diff) |
Implement support for the ** and **= operators
Change-Id: I58a21e70fdd040175b52465d6ba52e7fceaf6398
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/qml/parser')
-rw-r--r-- | src/qml/parser/qqmljs.g | 18 | ||||
-rw-r--r-- | src/qml/parser/qqmljsast_p.h | 2 | ||||
-rw-r--r-- | src/qml/parser/qqmljslexer.cpp | 4 |
3 files changed, 22 insertions, 2 deletions
diff --git a/src/qml/parser/qqmljs.g b/src/qml/parser/qqmljs.g index 7defdb8a08..6ee4fe2b18 100644 --- a/src/qml/parser/qqmljs.g +++ b/src/qml/parser/qqmljs.g @@ -63,7 +63,8 @@ %token T_RBRACE "}" T_RBRACKET "]" T_REMAINDER "%" %token T_REMAINDER_EQ "%=" T_RETURN "return" T_RPAREN ")" %token T_SEMICOLON ";" T_AUTOMATIC_SEMICOLON T_STAR "*" -%token T_STAR_STAR "**" T_STAR_EQ "*=" T_STRING_LITERAL "string literal" +%token T_STAR_STAR "**" T_STAR_STAR_EQ "**=" T_STAR_EQ "*=" +%token T_STRING_LITERAL "string literal" %token T_PROPERTY "property" T_SIGNAL "signal" T_READONLY "readonly" %token T_SWITCH "switch" T_THIS "this" T_THROW "throw" %token T_TILDE "~" T_TRY "try" T_TYPEOF "typeof" @@ -2186,7 +2187,13 @@ UnaryExpression: T_NOT UnaryExpression; ExponentiationExpression: UnaryExpression; ExponentiationExpression: UpdateExpression T_STAR_STAR ExponentiationExpression; -/. case $rule_number: { UNIMPLEMENTED; } ./ +/. + case $rule_number: { + AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::Exp, sym(3).Expression); + node->operatorToken = loc(2); + sym(1).Node = node; + } break; +./ MultiplicativeExpression: ExponentiationExpression; @@ -2489,6 +2496,13 @@ AssignmentOperator: T_STAR_EQ; } break; ./ +AssignmentOperator: T_STAR_STAR_EQ; +/. + case $rule_number: { + sym(1).ival = QSOperator::InplaceExp; + } break; +./ + AssignmentOperator: T_DIVIDE_EQ; /. case $rule_number: { diff --git a/src/qml/parser/qqmljsast_p.h b/src/qml/parser/qqmljsast_p.h index cd5c3a1021..6992985097 100644 --- a/src/qml/parser/qqmljsast_p.h +++ b/src/qml/parser/qqmljsast_p.h @@ -77,6 +77,8 @@ enum Op { Div, InplaceDiv, Equal, + Exp, + InplaceExp, Ge, Gt, In, diff --git a/src/qml/parser/qqmljslexer.cpp b/src/qml/parser/qqmljslexer.cpp index 1165183483..1617f3dfa5 100644 --- a/src/qml/parser/qqmljslexer.cpp +++ b/src/qml/parser/qqmljslexer.cpp @@ -661,6 +661,10 @@ again: return T_STAR_EQ; } else if (_char == QLatin1Char('*')) { scanChar(); + if (_char == QLatin1Char('=')) { + scanChar(); + return T_STAR_STAR_EQ; + } return T_STAR_STAR; } return T_STAR; |