Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Tobias Hunger
qt-creator
Commits
59e07298
Commit
59e07298
authored
Dec 07, 2009
by
Roberto Raggi
Browse files
Improved error recovery when parsing ctor-initializers.
parent
fd4aee7e
Changes
1
Hide whitespace changes
Inline
Side-by-side
src/shared/cplusplus/Parser.cpp
View file @
59e07298
...
...
@@ -1832,16 +1832,32 @@ bool Parser::parseMemInitializerList(MemInitializerListAST *&node)
if
(
parseMemInitializer
(
*
initializer
))
{
initializer
=
&
(
*
initializer
)
->
next
;
while
(
LA
()
==
T_COMMA
)
{
consumeToken
();
// consume T_COMMA
if
(
parseMemInitializer
(
*
initializer
))
initializer
=
&
(
*
initializer
)
->
next
;
else
_translationUnit
->
error
(
cursor
(),
"expected a member initializer"
);
while
(
true
)
{
if
(
LA
()
==
T_LBRACE
)
break
;
else
if
(
LA
()
==
T_COMMA
||
(
LA
()
==
T_IDENTIFIER
&&
(
LA
(
2
)
==
T_LPAREN
||
LA
(
2
)
==
T_COLON_COLON
)))
{
if
(
LA
()
!=
T_COMMA
)
_translationUnit
->
error
(
cursor
(),
"expected `,'"
);
else
consumeToken
();
if
(
parseMemInitializer
(
*
initializer
))
initializer
=
&
(
*
initializer
)
->
next
;
else
_translationUnit
->
error
(
cursor
(),
"expected a member initializer"
);
}
else
break
;
}
if
(
LA
()
!=
T_LBRACE
)
_translationUnit
->
error
(
cursor
(),
"expected `{'"
);
return
true
;
}
return
false
;
}
...
...
@@ -2892,10 +2908,26 @@ bool Parser::parseSimpleDeclaration(DeclarationAST *&node,
return
true
;
}
else
if
(
!
_inFunctionBody
&&
declarator
&&
(
LA
()
==
T_COLON
||
LA
()
==
T_LBRACE
||
LA
()
==
T_TRY
))
{
CtorInitializerAST
*
ctor_initializer
=
0
;
if
(
LA
()
==
T_COLON
)
bool
hasCtorInitializer
=
false
;
if
(
LA
()
==
T_COLON
)
{
hasCtorInitializer
=
true
;
parseCtorInitializer
(
ctor_initializer
);
if
(
LA
()
==
T_LBRACE
)
{
if
(
LA
()
!=
T_LBRACE
)
{
const
unsigned
pos
=
cursor
();
for
(
int
n
=
0
;
n
<
3
&&
LA
();
consumeToken
(),
++
n
)
if
(
LA
()
==
T_LBRACE
)
break
;
if
(
LA
()
!=
T_LBRACE
)
{
_translationUnit
->
error
(
pos
,
"unexpected token `%s'"
,
_translationUnit
->
spell
(
pos
));
rewind
(
pos
);
}
}
}
if
(
LA
()
==
T_LBRACE
||
hasCtorInitializer
)
{
FunctionDefinitionAST
*
ast
=
new
(
_pool
)
FunctionDefinitionAST
;
ast
->
qt_invokable_token
=
qt_invokable_token
;
ast
->
decl_specifier_list
=
decl_specifier_seq
;
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment