forked from qt-creator/qt-creator
Added ObjC protocol expressions.
This commit is contained in:
@@ -2104,4 +2104,23 @@ unsigned ObjCMessageArgumentAST::lastToken() const
|
||||
return parameter_key_identifier + 1;
|
||||
}
|
||||
|
||||
unsigned ObjCProtocolExpressionAST::firstToken() const
|
||||
{
|
||||
return protocol_token;
|
||||
}
|
||||
|
||||
unsigned ObjCProtocolExpressionAST::lastToken() const
|
||||
{
|
||||
if (rparen_token)
|
||||
return rparen_token + 1;
|
||||
|
||||
if (identifier_token)
|
||||
return identifier_token + 1;
|
||||
|
||||
if (lparen_token)
|
||||
return lparen_token + 1;
|
||||
|
||||
return protocol_token + 1;
|
||||
}
|
||||
|
||||
CPLUSPLUS_END_NAMESPACE
|
||||
|
||||
@@ -2653,6 +2653,27 @@ protected:
|
||||
virtual void accept0(ASTVisitor *visitor);
|
||||
};
|
||||
|
||||
class CPLUSPLUS_EXPORT ObjCProtocolExpressionAST: public ExpressionAST
|
||||
{
|
||||
public:
|
||||
unsigned protocol_token;
|
||||
unsigned lparen_token;
|
||||
unsigned identifier_token;
|
||||
unsigned rparen_token;
|
||||
|
||||
public:
|
||||
virtual ObjCProtocolExpressionAST *asObjCProtocolExpression()
|
||||
{ return this; }
|
||||
|
||||
virtual unsigned firstToken() const;
|
||||
virtual unsigned lastToken() const;
|
||||
|
||||
virtual ObjCProtocolExpressionAST *clone(MemoryPool *pool) const;
|
||||
|
||||
protected:
|
||||
virtual void accept0(ASTVisitor *visitor);
|
||||
};
|
||||
|
||||
CPLUSPLUS_END_NAMESPACE
|
||||
CPLUSPLUS_END_HEADER
|
||||
|
||||
|
||||
@@ -1311,4 +1311,14 @@ ObjCMessageArgumentAST *ObjCMessageArgumentAST::clone(MemoryPool *pool) const
|
||||
return ast;
|
||||
}
|
||||
|
||||
ObjCProtocolExpressionAST *ObjCProtocolExpressionAST::clone(MemoryPool *pool) const
|
||||
{
|
||||
ObjCProtocolExpressionAST *ast = new (pool) ObjCProtocolExpressionAST;
|
||||
ast->protocol_token = protocol_token;
|
||||
ast->lparen_token = lparen_token;
|
||||
ast->identifier_token = identifier_token;
|
||||
ast->rparen_token = rparen_token;
|
||||
return ast;
|
||||
}
|
||||
|
||||
CPLUSPLUS_END_NAMESPACE
|
||||
|
||||
@@ -1234,4 +1234,13 @@ void ObjCMessageArgumentAST::accept0(ASTVisitor *visitor)
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
|
||||
void ObjCProtocolExpressionAST::accept0(ASTVisitor *visitor)
|
||||
{
|
||||
if (visitor->visit(this)) {
|
||||
// visit ObjCProtocolExpressionAST
|
||||
// visit ExpressionAST
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
|
||||
CPLUSPLUS_END_NAMESPACE
|
||||
|
||||
@@ -206,6 +206,7 @@ public:
|
||||
virtual bool visit(ObjCMessageExpressionAST *) { return true; }
|
||||
virtual bool visit(ObjCMessageArgumentListAST *) { return true; }
|
||||
virtual bool visit(ObjCMessageArgumentAST *) { return true; }
|
||||
virtual bool visit(ObjCProtocolExpressionAST *) { return true; }
|
||||
|
||||
virtual bool visit(DeclarationListAST *) { return true; }
|
||||
virtual void endVisit(DeclarationListAST *) { }
|
||||
@@ -323,6 +324,7 @@ public:
|
||||
virtual void endVisit(ObjCMessageExpressionAST *) { }
|
||||
virtual void endVisit(ObjCMessageArgumentListAST *) { }
|
||||
virtual void endVisit(ObjCMessageArgumentAST *) { }
|
||||
virtual void endVisit(ObjCProtocolExpressionAST *) { }
|
||||
|
||||
private:
|
||||
Control *_control;
|
||||
|
||||
@@ -179,6 +179,7 @@ class ObjCProtocolRefsAST;
|
||||
class ObjCMessageExpressionAST;
|
||||
class ObjCMessageArgumentListAST;
|
||||
class ObjCMessageArgumentAST;
|
||||
class ObjCProtocolExpressionAST;
|
||||
|
||||
CPLUSPLUS_END_NAMESPACE
|
||||
CPLUSPLUS_END_HEADER
|
||||
|
||||
@@ -2849,16 +2849,17 @@ bool Parser::parseObjCEncodeExpression(ExpressionAST *&)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Parser::parseObjCProtocolExpression(ExpressionAST *&)
|
||||
bool Parser::parseObjCProtocolExpression(ExpressionAST *&node)
|
||||
{
|
||||
if (LA() != T_AT_PROTOCOL)
|
||||
return false;
|
||||
|
||||
/*unsigned protocol_token = */ consumeToken();
|
||||
unsigned lparen_token = 0, identifier_token = 0, rparen_token = 0;
|
||||
match(T_LPAREN, &lparen_token);
|
||||
match(T_IDENTIFIER, &identifier_token);
|
||||
match(T_RPAREN, &rparen_token);
|
||||
ObjCProtocolExpressionAST *ast = new (_pool) ObjCProtocolExpressionAST;
|
||||
ast->protocol_token = consumeToken();
|
||||
match(T_LPAREN, &(ast->lparen_token));
|
||||
match(T_IDENTIFIER, &(ast->identifier_token));
|
||||
match(T_RPAREN, &(ast->rparen_token));
|
||||
node = ast;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user