Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Marco Bubke
flatpak-qt-creator
Commits
0540aa36
Commit
0540aa36
authored
Aug 13, 2010
by
Roberto Raggi
Browse files
Get rid of the old Semantic pass.
parent
6659e3ec
Changes
26
Expand all
Hide whitespace changes
Inline
Side-by-side
src/libs/cplusplus/CppDocument.cpp
View file @
0540aa36
...
...
@@ -36,7 +36,6 @@
#include <Control.h>
#include <TranslationUnit.h>
#include <DiagnosticClient.h>
#include <Semantic.h>
#include <Literals.h>
#include <Symbols.h>
#include <Names.h>
...
...
src/libs/cplusplus/FindUsages.h
View file @
0540aa36
...
...
@@ -32,7 +32,6 @@
#include "LookupContext.h"
#include "CppDocument.h"
#include "Semantic.h"
#include "TypeOfExpression.h"
#include <ASTVisitor.h>
#include <QtCore/QSet>
...
...
src/libs/cplusplus/OverviewModel.cpp
View file @
0540aa36
...
...
@@ -31,7 +31,6 @@
#include "Overview.h"
#include <Scope.h>
#include <Semantic.h>
#include <Literals.h>
#include <Symbols.h>
...
...
src/libs/cplusplus/ResolveExpression.cpp
View file @
0540aa36
...
...
@@ -75,7 +75,7 @@ ResolveExpression::ResolveExpression(const LookupContext &context)
:
ASTVisitor
(
context
.
expressionDocument
()
->
translationUnit
()),
_scope
(
0
),
_context
(
context
),
sem
(
context
.
expressionDocument
()
->
translationUnit
())
bind
(
context
.
expressionDocument
()
->
translationUnit
())
{
}
ResolveExpression
::~
ResolveExpression
()
...
...
@@ -174,7 +174,7 @@ bool ResolveExpression::visit(BinaryExpressionAST *ast)
bool
ResolveExpression
::
visit
(
CastExpressionAST
*
ast
)
{
Scope
*
dummyScope
=
_context
.
expressionDocument
()
->
globalNamespace
();
FullySpecifiedType
ty
=
sem
.
check
(
ast
->
type_id
,
dummyScope
);
FullySpecifiedType
ty
=
bind
(
ast
->
type_id
,
dummyScope
);
addResult
(
ty
,
_scope
);
return
false
;
}
...
...
@@ -199,7 +199,7 @@ bool ResolveExpression::visit(ConditionalExpressionAST *ast)
bool
ResolveExpression
::
visit
(
CppCastExpressionAST
*
ast
)
{
Scope
*
dummyScope
=
_context
.
expressionDocument
()
->
globalNamespace
();
FullySpecifiedType
ty
=
sem
.
check
(
ast
->
type_id
,
dummyScope
);
FullySpecifiedType
ty
=
bind
(
ast
->
type_id
,
dummyScope
);
addResult
(
ty
,
_scope
);
return
false
;
}
...
...
@@ -221,8 +221,7 @@ bool ResolveExpression::visit(NewExpressionAST *ast)
{
if
(
ast
->
new_type_id
)
{
Scope
*
dummyScope
=
_context
.
expressionDocument
()
->
globalNamespace
();
FullySpecifiedType
ty
=
sem
.
check
(
ast
->
new_type_id
->
type_specifier_list
,
dummyScope
);
ty
=
sem
.
check
(
ast
->
new_type_id
->
ptr_operator_list
,
ty
,
dummyScope
);
FullySpecifiedType
ty
=
bind
(
ast
->
new_type_id
,
dummyScope
);
FullySpecifiedType
ptrTy
(
control
()
->
pointerType
(
ty
));
addResult
(
ptrTy
,
_scope
);
}
...
...
src/libs/cplusplus/ResolveExpression.h
View file @
0540aa36
...
...
@@ -33,8 +33,8 @@
#include "LookupContext.h"
#include <ASTVisitor.h>
#include <Semantic.h>
#include <FullySpecifiedType.h>
#include <Bind.h>
namespace
CPlusPlus
{
...
...
@@ -115,9 +115,8 @@ protected:
private:
Scope
*
_scope
;
LookupContext
_context
;
Semantic
sem
;
Bind
bind
;
QList
<
LookupItem
>
_results
;
Symbol
*
_declSymbol
;
};
}
// end of namespace CPlusPlus
...
...
src/plugins/cppeditor/cppeditor.cpp
View file @
0540aa36
...
...
@@ -43,7 +43,6 @@
#include <Names.h>
#include <CoreTypes.h>
#include <Literals.h>
#include <Semantic.h>
#include <ASTVisitor.h>
#include <SymbolVisitor.h>
#include <TranslationUnit.h>
...
...
src/plugins/cpptools/cppmodelmanager.cpp
View file @
0540aa36
...
...
@@ -60,7 +60,6 @@
#include <utils/qtcassert.h>
#include <TranslationUnit.h>
#include <Semantic.h>
#include <AST.h>
#include <Scope.h>
#include <Literals.h>
...
...
src/shared/cplusplus/Bind.cpp
View file @
0540aa36
...
...
@@ -162,11 +162,20 @@ void Bind::operator()(DeclarationAST *ast, Scope *scope)
(
void
)
switchScope
(
previousScope
);
}
void
Bind
::
operator
()(
ExpressionAST
*
ast
,
Scope
*
scope
)
FullySpecifiedType
Bind
::
operator
()(
ExpressionAST
*
ast
,
Scope
*
scope
)
{
Scope
*
previousScope
=
switchScope
(
scope
);
expression
(
ast
);
FullySpecifiedType
ty
=
expression
(
ast
);
(
void
)
switchScope
(
previousScope
);
return
ty
;
}
FullySpecifiedType
Bind
::
operator
()(
NewTypeIdAST
*
ast
,
Scope
*
scope
)
{
Scope
*
previousScope
=
switchScope
(
scope
);
FullySpecifiedType
ty
=
newTypeId
(
ast
);
(
void
)
switchScope
(
previousScope
);
return
ty
;
}
void
Bind
::
statement
(
StatementAST
*
ast
)
...
...
@@ -1875,7 +1884,7 @@ bool Bind::visit(FunctionDefinitionAST *ast)
this
->
ctorInitializer
(
ast
->
ctor_initializer
,
fun
);
if
(
!
_skipFunctionBodies
&&
ast
->
function_body
)
{
if
(
fun
&&
!
_skipFunctionBodies
&&
ast
->
function_body
)
{
Scope
*
previousScope
=
switchScope
(
fun
);
this
->
statement
(
ast
->
function_body
);
(
void
)
switchScope
(
previousScope
);
...
...
src/shared/cplusplus/Bind.h
View file @
0540aa36
...
...
@@ -61,7 +61,8 @@ public:
void
operator
()(
TranslationUnitAST
*
ast
,
Namespace
*
globalNamespace
);
void
operator
()(
DeclarationAST
*
ast
,
Scope
*
scope
);
void
operator
()(
ExpressionAST
*
ast
,
Scope
*
scope
);
FullySpecifiedType
operator
()(
ExpressionAST
*
ast
,
Scope
*
scope
);
FullySpecifiedType
operator
()(
NewTypeIdAST
*
ast
,
Scope
*
scope
);
bool
skipFunctionBodies
()
const
;
void
setSkipFunctionBodies
(
bool
skipFunctionBodies
);
...
...
src/shared/cplusplus/CheckDeclaration.cpp
deleted
100644 → 0
View file @
6659e3ec
This diff is collapsed.
Click to expand it.
src/shared/cplusplus/CheckDeclaration.h
deleted
100644 → 0
View file @
6659e3ec
/**************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
**
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** Commercial Usage
**
** Licensees holding valid Qt Commercial licenses may use this file in
** accordance with the Qt Commercial License Agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Nokia.
**
** GNU Lesser General Public License Usage
**
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** If you are unsure which license is appropriate for your use, please
** contact the sales department at http://qt.nokia.com/contact.
**
**************************************************************************/
// Copyright (c) 2008 Roberto Raggi <roberto.raggi@gmail.com>
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
#ifndef CPLUSPLUS_CHECKDECLARATION_H
#define CPLUSPLUS_CHECKDECLARATION_H
#include "CPlusPlusForwardDeclarations.h"
#include "SemanticCheck.h"
namespace
CPlusPlus
{
class
CPLUSPLUS_EXPORT
CheckDeclaration
:
public
SemanticCheck
{
public:
CheckDeclaration
(
Semantic
*
semantic
);
virtual
~
CheckDeclaration
();
void
check
(
DeclarationAST
*
declaration
,
Scope
*
scope
);
void
check
(
CtorInitializerAST
*
ast
,
Scope
*
scope
);
protected:
DeclarationAST
*
switchDeclaration
(
DeclarationAST
*
declaration
);
Scope
*
switchScope
(
Scope
*
scope
);
void
setDeclSpecifiers
(
Symbol
*
symbol
,
const
FullySpecifiedType
&
declSpecifiers
);
void
checkFunctionArguments
(
Function
*
fun
);
using
ASTVisitor
::
visit
;
virtual
bool
visit
(
SimpleDeclarationAST
*
ast
);
virtual
bool
visit
(
EmptyDeclarationAST
*
ast
);
virtual
bool
visit
(
AccessDeclarationAST
*
ast
);
virtual
bool
visit
(
QtPropertyDeclarationAST
*
ast
);
virtual
bool
visit
(
QtEnumDeclarationAST
*
ast
);
virtual
bool
visit
(
QtFlagsDeclarationAST
*
ast
);
virtual
bool
visit
(
AsmDefinitionAST
*
ast
);
virtual
bool
visit
(
ExceptionDeclarationAST
*
ast
);
virtual
bool
visit
(
FunctionDefinitionAST
*
ast
);
virtual
bool
visit
(
LinkageBodyAST
*
ast
);
virtual
bool
visit
(
LinkageSpecificationAST
*
ast
);
virtual
bool
visit
(
NamespaceAST
*
ast
);
virtual
bool
visit
(
NamespaceAliasDefinitionAST
*
ast
);
virtual
bool
visit
(
ParameterDeclarationAST
*
ast
);
virtual
bool
visit
(
TemplateDeclarationAST
*
ast
);
virtual
bool
visit
(
TypenameTypeParameterAST
*
ast
);
virtual
bool
visit
(
TemplateTypeParameterAST
*
ast
);
virtual
bool
visit
(
UsingAST
*
ast
);
virtual
bool
visit
(
UsingDirectiveAST
*
ast
);
virtual
bool
visit
(
MemInitializerAST
*
ast
);
virtual
bool
visit
(
ObjCProtocolDeclarationAST
*
ast
);
virtual
bool
visit
(
ObjCProtocolForwardDeclarationAST
*
ast
);
virtual
bool
visit
(
ObjCClassDeclarationAST
*
ast
);
virtual
bool
visit
(
ObjCClassForwardDeclarationAST
*
ast
);
virtual
bool
visit
(
ObjCMethodDeclarationAST
*
ast
);
virtual
bool
visit
(
ObjCVisibilityDeclarationAST
*
ast
);
virtual
bool
visit
(
ObjCPropertyDeclarationAST
*
ast
);
private:
bool
checkPropertyAttribute
(
ObjCPropertyAttributeAST
*
attrAst
,
int
&
flags
,
int
attr
);
void
checkQEnumsQFlagsNames
(
NameListAST
*
nameListAst
,
const
char
*
declName
);
unsigned
calculateScopeStart
(
ObjCClassDeclarationAST
*
ast
)
const
;
unsigned
calculateScopeStart
(
ObjCProtocolDeclarationAST
*
ast
)
const
;
private:
DeclarationAST
*
_declaration
;
Scope
*
_scope
;
bool
_checkAnonymousArguments
:
1
;
};
}
// end of namespace CPlusPlus
#endif // CPLUSPLUS_CHECKDECLARATION_H
src/shared/cplusplus/CheckDeclarator.cpp
deleted
100644 → 0
View file @
6659e3ec
/**************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
**
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** Commercial Usage
**
** Licensees holding valid Qt Commercial licenses may use this file in
** accordance with the Qt Commercial License Agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Nokia.
**
** GNU Lesser General Public License Usage
**
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** If you are unsure which license is appropriate for your use, please
** contact the sales department at http://qt.nokia.com/contact.
**
**************************************************************************/
// Copyright (c) 2008 Roberto Raggi <roberto.raggi@gmail.com>
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
#include "CheckDeclarator.h"
#include "Semantic.h"
#include "AST.h"
#include "Control.h"
#include "TranslationUnit.h"
#include "Literals.h"
#include "CoreTypes.h"
#include "Symbols.h"
using
namespace
CPlusPlus
;
CheckDeclarator
::
CheckDeclarator
(
Semantic
*
semantic
)
:
SemanticCheck
(
semantic
),
_declarator
(
0
),
_scope
(
0
),
_name
(
0
)
{
}
CheckDeclarator
::~
CheckDeclarator
()
{
}
FullySpecifiedType
CheckDeclarator
::
check
(
DeclaratorAST
*
declarator
,
const
FullySpecifiedType
&
type
,
Scope
*
scope
,
const
Name
**
name
)
{
FullySpecifiedType
previousType
=
switchFullySpecifiedType
(
type
);
Scope
*
previousScope
=
switchScope
(
scope
);
DeclaratorAST
*
previousDeclarator
=
switchDeclarator
(
declarator
);
const
Name
**
previousName
=
switchName
(
name
);
accept
(
declarator
);
(
void
)
switchName
(
previousName
);
(
void
)
switchDeclarator
(
previousDeclarator
);
(
void
)
switchScope
(
previousScope
);
return
switchFullySpecifiedType
(
previousType
);
}
FullySpecifiedType
CheckDeclarator
::
check
(
PtrOperatorListAST
*
ptrOperators
,
const
FullySpecifiedType
&
type
,
Scope
*
scope
)
{
FullySpecifiedType
previousType
=
switchFullySpecifiedType
(
type
);
Scope
*
previousScope
=
switchScope
(
scope
);
accept
(
ptrOperators
);
(
void
)
switchScope
(
previousScope
);
return
switchFullySpecifiedType
(
previousType
);
}
FullySpecifiedType
CheckDeclarator
::
check
(
ObjCMethodPrototypeAST
*
methodPrototype
,
Scope
*
scope
)
{
FullySpecifiedType
previousType
=
switchFullySpecifiedType
(
FullySpecifiedType
());
Scope
*
previousScope
=
switchScope
(
scope
);
accept
(
methodPrototype
);
(
void
)
switchScope
(
previousScope
);
return
switchFullySpecifiedType
(
previousType
);
}
DeclaratorAST
*
CheckDeclarator
::
switchDeclarator
(
DeclaratorAST
*
declarator
)
{
DeclaratorAST
*
previousDeclarator
=
_declarator
;
_declarator
=
declarator
;
return
previousDeclarator
;
}
FullySpecifiedType
CheckDeclarator
::
switchFullySpecifiedType
(
const
FullySpecifiedType
&
type
)
{
FullySpecifiedType
previousType
=
_fullySpecifiedType
;
_fullySpecifiedType
=
type
;
return
previousType
;
}
Scope
*
CheckDeclarator
::
switchScope
(
Scope
*
scope
)
{
Scope
*
previousScope
=
_scope
;
_scope
=
scope
;
return
previousScope
;
}
const
Name
**
CheckDeclarator
::
switchName
(
const
Name
**
name
)
{
const
Name
**
previousName
=
_name
;
_name
=
name
;
return
previousName
;
}
bool
CheckDeclarator
::
visit
(
DeclaratorAST
*
ast
)
{
accept
(
ast
->
ptr_operator_list
);
accept
(
ast
->
postfix_declarator_list
);
accept
(
ast
->
core_declarator
);
if
(
ast
->
initializer
)
{
FullySpecifiedType
exprTy
=
semantic
()
->
check
(
ast
->
initializer
,
_scope
);
if
(
Function
*
funTy
=
_fullySpecifiedType
->
asFunctionType
())
funTy
->
setPureVirtual
(
true
);
}
return
false
;
}
bool
CheckDeclarator
::
visit
(
DeclaratorIdAST
*
ast
)
{
const
Name
*
name
=
semantic
()
->
check
(
ast
->
name
,
_scope
);
if
(
_name
)
*
_name
=
name
;
return
false
;
}
bool
CheckDeclarator
::
visit
(
NestedDeclaratorAST
*
ast
)
{
accept
(
ast
->
declarator
);
return
false
;
}
bool
CheckDeclarator
::
visit
(
FunctionDeclaratorAST
*
ast
)
{
Function
*
fun
=
control
()
->
newFunction
(
ast
->
firstToken
());
fun
->
setAmbiguous
(
ast
->
as_cpp_initializer
!=
0
);
ast
->
symbol
=
fun
;
fun
->
setReturnType
(
_fullySpecifiedType
);
if
(
ast
->
parameters
)
{
DeclarationListAST
*
parameter_declarations
=
ast
->
parameters
->
parameter_declaration_list
;
for
(
DeclarationListAST
*
decl
=
parameter_declarations
;
decl
;
decl
=
decl
->
next
)
{
semantic
()
->
check
(
decl
->
value
,
fun
);
}
if
(
ast
->
parameters
->
dot_dot_dot_token
)
fun
->
setVariadic
(
true
);
}
// check the arguments
bool
hasDefaultArguments
=
false
;
for
(
unsigned
i
=
0
;
i
<
fun
->
argumentCount
();
++
i
)
{
Argument
*
arg
=
fun
->
argumentAt
(
i
)
->
asArgument
();
if
(
hasDefaultArguments
&&
!
arg
->
hasInitializer
())
{
translationUnit
()
->
error
(
ast
->
firstToken
(),
"default argument missing for parameter at position %d"
,
i
+
1
);
}
else
if
(
!
hasDefaultArguments
)
{
hasDefaultArguments
=
arg
->
hasInitializer
();
}
}
FullySpecifiedType
funTy
(
fun
);
funTy
=
semantic
()
->
check
(
ast
->
cv_qualifier_list
,
_scope
,
funTy
);
fun
->
setConst
(
funTy
.
isConst
());
fun
->
setVolatile
(
funTy
.
isVolatile
());
_fullySpecifiedType
=
funTy
;
return
false
;
}
bool
CheckDeclarator
::
visit
(
ArrayDeclaratorAST
*
ast
)
{
ArrayType
*
ty
=
control
()
->
arrayType
(
_fullySpecifiedType
);
// ### set the dimension
FullySpecifiedType
exprTy
=
semantic
()
->
check
(
ast
->
expression
,
_scope
);
FullySpecifiedType
arrTy
(
ty
);
_fullySpecifiedType
=
ty
;
return
false
;
}
bool
CheckDeclarator
::
visit
(
PointerToMemberAST
*
ast
)
{
const
Name
*
memberName
=
semantic
()
->
check
(
ast
->
nested_name_specifier_list
,
_scope
);
PointerToMemberType
*
ptrTy
=
control
()
->
pointerToMemberType
(
memberName
,
_fullySpecifiedType
);
FullySpecifiedType
ty
(
ptrTy
);
_fullySpecifiedType
=
ty
;
applyCvQualifiers
(
ast
->
cv_qualifier_list
);
return
false
;
}
bool
CheckDeclarator
::
visit
(
PointerAST
*
ast
)
{
if
(
_fullySpecifiedType
->
isReferenceType
())
translationUnit
()
->
error
(
ast
->
firstToken
(),
"cannot declare pointer to a reference"
);
PointerType
*
ptrTy
=
control
()
->
pointerType
(
_fullySpecifiedType
);
FullySpecifiedType
ty
(
ptrTy
);
_fullySpecifiedType
=
ty
;
applyCvQualifiers
(
ast
->
cv_qualifier_list
);
return
false
;
}
bool
CheckDeclarator
::
visit
(
ReferenceAST
*
ast
)
{
const
bool
rvalueRef
=
(
tokenKind
(
ast
->
reference_token
)
==
T_AMPER_AMPER
);
if
(
_fullySpecifiedType
->
isReferenceType
())
translationUnit
()
->
error
(
ast
->
firstToken
(),
"cannot declare reference to a reference"
);
ReferenceType
*
refTy
=
control
()
->
referenceType
(
_fullySpecifiedType
,
rvalueRef
);
FullySpecifiedType
ty
(
refTy
);
_fullySpecifiedType
=
ty
;
return
false
;
}
bool
CheckDeclarator
::
visit
(
ObjCMethodPrototypeAST
*
ast
)
{
if
(
!
ast
)
return
false
;
if
(
!
ast
->
selector
)
{
// TODO: (EV) this currently happens when parsing:
// + (id<NSSomeProtocol>) zoo;
// where the parser will start doing template magic. We'll need to disambiguate this case.
return
false
;
}
FullySpecifiedType
returnType
;
if
(
ast
->
type_name
&&
ast
->
type_name
->
type_id
)
returnType
=
semantic
()
->
check
(
ast
->
type_name
->
type_id
,
_scope
);
unsigned
location
=
ast
->
selector
->
firstToken
();
semantic
()
->
check
(
ast
->
selector
,
_scope
);
ObjCMethod
*
method
=
control
()
->
newObjCMethod
(
location
,
ast
->
selector
->
name
);
ast
->
symbol
=
method
;
method
->
setScope
(
_scope
);
method
->
setVisibility
(
semantic
()
->
currentVisibility
());
method
->
setReturnType
(
returnType
);
if
(
semantic
()
->
isObjCClassMethod
(
tokenKind
(
ast
->
method_type_token
)))
method
->
setStorage
(
Symbol
::
Static
);
for
(
ObjCMessageArgumentDeclarationListAST
*
it
=
ast
->
argument_list
;
it
;
it
=
it
->
next
)
{
ObjCMessageArgumentDeclarationAST
*
argDecl
=
it
->
value
;
semantic
()
->
check
(
argDecl
,
method
);
}
if
(
ast
->
dot_dot_dot_token
)
method
->
setVariadic
(
true
);
_fullySpecifiedType
=
FullySpecifiedType
(
method
);
_fullySpecifiedType
=
semantic
()
->
check
(
ast
->
attribute_list
,
_scope
,
_fullySpecifiedType
);
return
false
;
}
void
CheckDeclarator
::
applyCvQualifiers
(
SpecifierListAST
*
it
)
{
for
(;
it
;
it
=
it
->
next
)
{
SpecifierAST
*
cv
=
it
->
value
;
SimpleSpecifierAST
*
spec
=
static_cast
<
SimpleSpecifierAST
*>
(
cv
);
switch
(
translationUnit
()
->
tokenKind
(
spec
->
specifier_token
))
{
case
T_VOLATILE
:
_fullySpecifiedType
.
setVolatile
(
true
);
break
;
case
T_CONST
:
_fullySpecifiedType
.
setConst
(
true
);
break
;
default:
break
;
}
// switch
}
}
src/shared/cplusplus/CheckDeclarator.h
deleted
100644 → 0
View file @
6659e3ec
/**************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
**
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** Commercial Usage
**
** Licensees holding valid Qt Commercial licenses may use this file in
** accordance with the Qt Commercial License Agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Nokia.
**
** GNU Lesser General Public License Usage
**