forked from qt-creator/qt-creator
qmljs: update qmljs parser
Change-Id: I418c3f8c77f36274864edd71d8f86d37587cb3a7 Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io> Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
This commit is contained in:
@@ -71,12 +71,13 @@
|
||||
%token T_VAR "var" T_VOID "void" T_WHILE "while"
|
||||
%token T_WITH "with" T_XOR "^" T_XOR_EQ "^="
|
||||
%token T_NULL "null" T_TRUE "true" T_FALSE "false"
|
||||
%token T_CONST "const"
|
||||
%token T_CONST "const" T_LET "let"
|
||||
%token T_DEBUGGER "debugger"
|
||||
%token T_RESERVED_WORD "reserved word"
|
||||
%token T_MULTILINE_STRING_LITERAL "multiline string literal"
|
||||
%token T_COMMENT "comment"
|
||||
%token T_COMPATIBILITY_SEMICOLON
|
||||
%token T_ENUM "enum"
|
||||
|
||||
--- context keywords.
|
||||
%token T_PUBLIC "public"
|
||||
@@ -281,6 +282,7 @@ public:
|
||||
AST::UiArrayMemberList *UiArrayMemberList;
|
||||
AST::UiQualifiedId *UiQualifiedId;
|
||||
AST::UiQualifiedPragmaId *UiQualifiedPragmaId;
|
||||
AST::UiEnumMemberList *UiEnumMemberList;
|
||||
};
|
||||
|
||||
public:
|
||||
@@ -449,6 +451,7 @@ Parser::Parser(Engine *engine):
|
||||
location_stack(0),
|
||||
string_stack(0),
|
||||
program(0),
|
||||
yylval(0),
|
||||
first_token(0),
|
||||
last_token(0)
|
||||
{
|
||||
@@ -1207,6 +1210,59 @@ case $rule_number: {
|
||||
} break;
|
||||
./
|
||||
|
||||
UiObjectMember: T_ENUM T_IDENTIFIER T_LBRACE EnumMemberList T_RBRACE;
|
||||
/.
|
||||
case $rule_number: {
|
||||
AST::UiEnumDeclaration *enumDeclaration = new (pool) AST::UiEnumDeclaration(stringRef(2), sym(4).UiEnumMemberList->finish());
|
||||
enumDeclaration->enumToken = loc(1);
|
||||
enumDeclaration->rbraceToken = loc(5);
|
||||
sym(1).Node = enumDeclaration;
|
||||
break;
|
||||
}
|
||||
./
|
||||
|
||||
EnumMemberList: T_IDENTIFIER;
|
||||
/.
|
||||
case $rule_number: {
|
||||
AST::UiEnumMemberList *node = new (pool) AST::UiEnumMemberList(stringRef(1));
|
||||
node->memberToken = loc(1);
|
||||
sym(1).Node = node;
|
||||
break;
|
||||
}
|
||||
./
|
||||
|
||||
EnumMemberList: T_IDENTIFIER T_EQ T_NUMERIC_LITERAL;
|
||||
/.
|
||||
case $rule_number: {
|
||||
AST::UiEnumMemberList *node = new (pool) AST::UiEnumMemberList(stringRef(1), sym(3).dval);
|
||||
node->memberToken = loc(1);
|
||||
node->valueToken = loc(3);
|
||||
sym(1).Node = node;
|
||||
break;
|
||||
}
|
||||
./
|
||||
|
||||
EnumMemberList: EnumMemberList T_COMMA T_IDENTIFIER;
|
||||
/.
|
||||
case $rule_number: {
|
||||
AST::UiEnumMemberList *node = new (pool) AST::UiEnumMemberList(sym(1).UiEnumMemberList, stringRef(3));
|
||||
node->memberToken = loc(3);
|
||||
sym(1).Node = node;
|
||||
break;
|
||||
}
|
||||
./
|
||||
|
||||
EnumMemberList: EnumMemberList T_COMMA T_IDENTIFIER T_EQ T_NUMERIC_LITERAL;
|
||||
/.
|
||||
case $rule_number: {
|
||||
AST::UiEnumMemberList *node = new (pool) AST::UiEnumMemberList(sym(1).UiEnumMemberList, stringRef(3), sym(5).dval);
|
||||
node->memberToken = loc(3);
|
||||
node->valueToken = loc(5);
|
||||
sym(1).Node = node;
|
||||
break;
|
||||
}
|
||||
./
|
||||
|
||||
JsIdentifier: T_IDENTIFIER;
|
||||
|
||||
JsIdentifier: T_PROPERTY ;
|
||||
@@ -1602,6 +1658,7 @@ ReservedIdentifier: T_DEFAULT ;
|
||||
ReservedIdentifier: T_DELETE ;
|
||||
ReservedIdentifier: T_DO ;
|
||||
ReservedIdentifier: T_ELSE ;
|
||||
ReservedIdentifier: T_ENUM ;
|
||||
ReservedIdentifier: T_FALSE ;
|
||||
ReservedIdentifier: T_FINALLY ;
|
||||
ReservedIdentifier: T_FOR ;
|
||||
@@ -1622,6 +1679,7 @@ ReservedIdentifier: T_VAR ;
|
||||
ReservedIdentifier: T_VOID ;
|
||||
ReservedIdentifier: T_WHILE ;
|
||||
ReservedIdentifier: T_CONST ;
|
||||
ReservedIdentifier: T_LET ;
|
||||
ReservedIdentifier: T_DEBUGGER ;
|
||||
ReservedIdentifier: T_RESERVED_WORD ;
|
||||
ReservedIdentifier: T_WITH ;
|
||||
@@ -2486,14 +2544,26 @@ VariableStatement: VariableDeclarationKind VariableDeclarationList T_AUTOMATIC_S
|
||||
VariableStatement: VariableDeclarationKind VariableDeclarationList T_SEMICOLON ;
|
||||
/.
|
||||
case $rule_number: {
|
||||
AST::VariableStatement *node = new (pool) AST::VariableStatement(
|
||||
sym(2).VariableDeclarationList->finish (/*readOnly=*/sym(1).ival == T_CONST));
|
||||
AST::VariableDeclaration::VariableScope s = AST::VariableDeclaration::FunctionScope;
|
||||
if (sym(1).ival == T_LET)
|
||||
s = AST::VariableDeclaration::BlockScope;
|
||||
else if (sym(1).ival == T_CONST)
|
||||
s = AST::VariableDeclaration::ReadOnlyBlockScope;
|
||||
|
||||
AST::VariableStatement *node = new (pool) AST::VariableStatement(sym(2).VariableDeclarationList->finish(s));
|
||||
node->declarationKindToken = loc(1);
|
||||
node->semicolonToken = loc(3);
|
||||
sym(1).Node = node;
|
||||
} break;
|
||||
./
|
||||
|
||||
VariableDeclarationKind: T_LET ;
|
||||
/.
|
||||
case $rule_number: {
|
||||
sym(1).ival = T_LET;
|
||||
} break;
|
||||
./
|
||||
|
||||
VariableDeclarationKind: T_CONST ;
|
||||
/.
|
||||
case $rule_number: {
|
||||
@@ -2542,7 +2612,8 @@ case $rule_number: {
|
||||
VariableDeclaration: JsIdentifier InitialiserOpt ;
|
||||
/.
|
||||
case $rule_number: {
|
||||
AST::VariableDeclaration *node = new (pool) AST::VariableDeclaration(stringRef(1), sym(2).Expression);
|
||||
AST::VariableDeclaration::VariableScope s = AST::VariableDeclaration::FunctionScope;
|
||||
AST::VariableDeclaration *node = new (pool) AST::VariableDeclaration(stringRef(1), sym(2).Expression, s);
|
||||
node->identifierToken = loc(1);
|
||||
sym(1).Node = node;
|
||||
} break;
|
||||
@@ -2551,7 +2622,8 @@ case $rule_number: {
|
||||
VariableDeclarationNotIn: JsIdentifier InitialiserNotInOpt ;
|
||||
/.
|
||||
case $rule_number: {
|
||||
AST::VariableDeclaration *node = new (pool) AST::VariableDeclaration(stringRef(1), sym(2).Expression);
|
||||
AST::VariableDeclaration::VariableScope s = AST::VariableDeclaration::FunctionScope;
|
||||
AST::VariableDeclaration *node = new (pool) AST::VariableDeclaration(stringRef(1), sym(2).Expression, s);
|
||||
node->identifierToken = loc(1);
|
||||
sym(1).Node = node;
|
||||
} break;
|
||||
@@ -2677,8 +2749,9 @@ case $rule_number: {
|
||||
IterationStatement: T_FOR T_LPAREN T_VAR VariableDeclarationListNotIn T_SEMICOLON ExpressionOpt T_SEMICOLON ExpressionOpt T_RPAREN Statement ;
|
||||
/.
|
||||
case $rule_number: {
|
||||
AST::VariableDeclaration::VariableScope s = AST::VariableDeclaration::FunctionScope;
|
||||
AST::LocalForStatement *node = new (pool) AST::LocalForStatement(
|
||||
sym(4).VariableDeclarationList->finish (/*readOnly=*/false), sym(6).Expression,
|
||||
sym(4).VariableDeclarationList->finish(s), sym(6).Expression,
|
||||
sym(8).Expression, sym(10).Statement);
|
||||
node->forToken = loc(1);
|
||||
node->lparenToken = loc(2);
|
||||
|
||||
Reference in New Issue
Block a user