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
a7219736
Commit
a7219736
authored
Nov 10, 2009
by
Roberto Raggi
Browse files
Cleanup Postfix operators.
parent
aff9a743
Changes
9
Hide whitespace changes
Inline
Side-by-side
src/libs/cplusplus/ResolveExpression.cpp
View file @
a7219736
...
...
@@ -208,8 +208,8 @@ bool ResolveExpression::visit(PostfixExpressionAST *ast)
{
accept
(
ast
->
base_expression
);
for
(
PostfixAST
*
fx
=
ast
->
postfix_expressions
;
fx
;
fx
=
fx
->
next
)
{
accept
(
fx
);
for
(
Postfix
List
AST
*
it
=
ast
->
postfix_expressions
;
it
;
it
=
it
->
next
)
{
accept
(
it
->
value
);
}
return
false
;
...
...
src/plugins/cppeditor/cppeditor.cpp
View file @
a7219736
...
...
@@ -318,10 +318,11 @@ protected:
virtual
bool
visit
(
PostfixExpressionAST
*
ast
)
{
accept
(
ast
->
base_expression
);
for
(
PostfixAST
*
it
=
ast
->
postfix_expressions
;
it
;
it
=
it
->
next
)
{
if
(
it
->
asMemberAccess
()
!=
0
)
for
(
PostfixListAST
*
it
=
ast
->
postfix_expressions
;
it
;
it
=
it
->
next
)
{
PostfixAST
*
fx
=
it
->
value
;
if
(
fx
->
asMemberAccess
()
!=
0
)
continue
;
// skip members
accept
(
it
);
accept
(
fx
);
}
return
false
;
}
...
...
src/shared/cplusplus/AST.cpp
View file @
a7219736
...
...
@@ -1331,10 +1331,8 @@ unsigned PostfixExpressionAST::firstToken() const
unsigned
PostfixExpressionAST
::
lastToken
()
const
{
for
(
PostfixAST
*
it
=
postfix_expressions
;
it
;
it
=
it
->
next
)
{
if
(
!
it
->
next
)
return
it
->
lastToken
();
}
if
(
postfix_expressions
)
return
postfix_expressions
->
lastToken
();
return
base_expression
->
lastToken
();
}
...
...
src/shared/cplusplus/AST.h
View file @
a7219736
...
...
@@ -66,6 +66,10 @@ public:
:
value
(
_Tp
()),
next
(
0
)
{
}
List
(
const
_Tp
&
value
)
:
value
(
value
),
next
(
0
)
{
}
unsigned
firstToken
()
const
{
if
(
value
)
...
...
@@ -1459,12 +1463,8 @@ protected:
class
CPLUSPLUS_EXPORT
PostfixAST
:
public
AST
{
public:
PostfixAST
*
next
;
public:
virtual
PostfixAST
*
asPostfix
()
{
return
this
;
}
};
class
CPLUSPLUS_EXPORT
CallAST
:
public
PostfixAST
...
...
@@ -1592,7 +1592,7 @@ class CPLUSPLUS_EXPORT PostfixExpressionAST: public ExpressionAST
{
public:
ExpressionAST
*
base_expression
;
PostfixAST
*
postfix_expressions
;
Postfix
List
AST
*
postfix_expressions
;
public:
virtual
PostfixExpressionAST
*
asPostfixExpression
()
{
return
this
;
}
...
...
src/shared/cplusplus/ASTVisit.cpp
View file @
a7219736
...
...
@@ -662,8 +662,7 @@ void PostfixExpressionAST::accept0(ASTVisitor *visitor)
{
if
(
visitor
->
visit
(
this
))
{
accept
(
base_expression
,
visitor
);
for
(
PostfixAST
*
it
=
postfix_expressions
;
it
;
it
=
it
->
next
)
accept
(
it
,
visitor
);
accept
(
postfix_expressions
,
visitor
);
}
visitor
->
endVisit
(
this
);
}
...
...
src/shared/cplusplus/ASTfwd.h
View file @
a7219736
...
...
@@ -199,6 +199,7 @@ typedef List<BaseSpecifierAST *> BaseSpecifierListAST;
typedef
List
<
EnumeratorAST
*>
EnumeratorListAST
;
typedef
List
<
MemInitializerAST
*>
MemInitializerListAST
;
typedef
List
<
NewArrayDeclaratorAST
*>
NewArrayDeclaratorListAST
;
typedef
List
<
PostfixAST
*>
PostfixListAST
;
typedef
List
<
NameAST
*>
ObjCIdentifierListAST
;
typedef
List
<
ObjCMessageArgumentAST
*>
ObjCMessageArgumentListAST
;
...
...
src/shared/cplusplus/CheckExpression.cpp
View file @
a7219736
...
...
@@ -251,8 +251,8 @@ bool CheckExpression::visit(TypeConstructorCallAST *ast)
bool
CheckExpression
::
visit
(
PostfixExpressionAST
*
ast
)
{
FullySpecifiedType
exprTy
=
semantic
()
->
check
(
ast
->
base_expression
,
_scope
);
for
(
PostfixAST
*
fx
=
ast
->
postfix_expressions
;
fx
;
fx
=
fx
->
next
)
{
accept
(
fx
);
// ### not exactly.
for
(
Postfix
List
AST
*
it
=
ast
->
postfix_expressions
;
it
;
it
=
it
->
next
)
{
accept
(
it
->
value
);
// ### not exactly.
}
return
false
;
}
...
...
src/shared/cplusplus/Parser.cpp
View file @
a7219736
...
...
@@ -3599,7 +3599,7 @@ bool Parser::parsePostfixExpression(ExpressionAST *&node)
{
DEBUG_THIS_RULE
();
if
(
parseCorePostfixExpression
(
node
))
{
PostfixAST
*
postfix_expressions
=
0
,
Postfix
List
AST
*
postfix_expressions
=
0
,
**
postfix_ptr
=
&
postfix_expressions
;
while
(
LA
())
{
if
(
LA
()
==
T_LPAREN
)
{
...
...
@@ -3607,19 +3607,19 @@ bool Parser::parsePostfixExpression(ExpressionAST *&node)
ast
->
lparen_token
=
consumeToken
();
parseExpressionList
(
ast
->
expression_list
);
match
(
T_RPAREN
,
&
ast
->
rparen_token
);
*
postfix_ptr
=
ast
;
*
postfix_ptr
=
new
(
_pool
)
PostfixListAST
(
ast
)
;
postfix_ptr
=
&
(
*
postfix_ptr
)
->
next
;
}
else
if
(
LA
()
==
T_LBRACKET
)
{
ArrayAccessAST
*
ast
=
new
(
_pool
)
ArrayAccessAST
;
ast
->
lbracket_token
=
consumeToken
();
parseExpression
(
ast
->
expression
);
match
(
T_RBRACKET
,
&
ast
->
rbracket_token
);
*
postfix_ptr
=
ast
;
*
postfix_ptr
=
new
(
_pool
)
PostfixListAST
(
ast
)
;
postfix_ptr
=
&
(
*
postfix_ptr
)
->
next
;
}
else
if
(
LA
()
==
T_PLUS_PLUS
||
LA
()
==
T_MINUS_MINUS
)
{
PostIncrDecrAST
*
ast
=
new
(
_pool
)
PostIncrDecrAST
;
ast
->
incr_decr_token
=
consumeToken
();
*
postfix_ptr
=
ast
;
*
postfix_ptr
=
new
(
_pool
)
PostfixListAST
(
ast
)
;
postfix_ptr
=
&
(
*
postfix_ptr
)
->
next
;
}
else
if
(
LA
()
==
T_DOT
||
LA
()
==
T_ARROW
)
{
MemberAccessAST
*
ast
=
new
(
_pool
)
MemberAccessAST
;
...
...
@@ -3629,7 +3629,7 @@ bool Parser::parsePostfixExpression(ExpressionAST *&node)
if
(
!
parseNameId
(
ast
->
member_name
))
_translationUnit
->
error
(
cursor
(),
"expected unqualified-id before token `%s'"
,
tok
().
spell
());
*
postfix_ptr
=
ast
;
*
postfix_ptr
=
new
(
_pool
)
PostfixListAST
(
ast
)
;
postfix_ptr
=
&
(
*
postfix_ptr
)
->
next
;
}
else
break
;
}
// while
...
...
tests/auto/cplusplus/ast/tst_ast.cpp
View file @
a7219736
...
...
@@ -574,7 +574,7 @@ void tst_AST::normal_array_access()
{
QVERIFY
(
postfixExpr
->
postfix_expressions
&&
!
postfixExpr
->
postfix_expressions
->
next
);
ArrayAccessAST
*
rhs
=
postfixExpr
->
postfix_expressions
->
asArrayAccess
();
ArrayAccessAST
*
rhs
=
postfixExpr
->
postfix_expressions
->
value
->
asArrayAccess
();
QVERIFY
(
rhs
&&
rhs
->
expression
);
SimpleNameAST
*
b
=
rhs
->
expression
->
asSimpleName
();
QVERIFY
(
b
);
...
...
@@ -620,7 +620,7 @@ void tst_AST::array_access_with_nested_expression()
{
QVERIFY
(
postfixExpr
->
postfix_expressions
&&
!
postfixExpr
->
postfix_expressions
->
next
);
ArrayAccessAST
*
rhs
=
postfixExpr
->
postfix_expressions
->
asArrayAccess
();
ArrayAccessAST
*
rhs
=
postfixExpr
->
postfix_expressions
->
value
->
asArrayAccess
();
QVERIFY
(
rhs
&&
rhs
->
expression
);
SimpleNameAST
*
b
=
rhs
->
expression
->
asSimpleName
();
QVERIFY
(
b
);
...
...
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