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
Tobias Hunger
qt-creator
Commits
d01795d9
Commit
d01795d9
authored
Feb 09, 2009
by
Roberto Raggi
Browse files
Reimplemented Type::as*Type() using virtual methods.
parent
ce22a960
Changes
15
Hide whitespace changes
Inline
Side-by-side
src/libs/cplusplus/Icons.cpp
View file @
d01795d9
...
...
@@ -63,11 +63,13 @@ Icons::Icons()
QIcon
Icons
::
iconForSymbol
(
const
Symbol
*
symbol
)
const
{
if
(
symbol
->
isFunction
()
||
(
symbol
->
isDeclaration
()
&&
symbol
->
type
()
->
isFunction
()))
FullySpecifiedType
symbolType
=
symbol
->
type
();
if
(
symbol
->
isFunction
()
||
(
symbol
->
isDeclaration
()
&&
symbolType
&&
symbolType
->
isFunctionType
()))
{
const
Function
*
function
=
symbol
->
asFunction
();
if
(
!
function
)
function
=
symbol
->
type
()
->
asFunction
();
function
=
symbol
->
type
()
->
asFunction
Type
();
if
(
function
->
isSlot
())
{
if
(
function
->
isPublic
())
{
...
...
src/libs/cplusplus/OverviewModel.cpp
View file @
d01795d9
...
...
@@ -171,7 +171,7 @@ QVariant OverviewModel::data(const QModelIndex &index, int role) const
if
(
!
symbol
->
isScopedSymbol
()
||
symbol
->
isFunction
())
{
QString
type
=
_overview
.
prettyType
(
symbol
->
type
());
if
(
!
type
.
isEmpty
())
{
if
(
!
symbol
->
type
()
->
isFunction
())
if
(
!
symbol
->
type
()
->
isFunction
Type
())
name
+=
QLatin1String
(
": "
);
name
+=
type
;
}
...
...
src/libs/cplusplus/ResolveExpression.cpp
View file @
d01795d9
...
...
@@ -512,7 +512,7 @@ bool ResolveExpression::visit(CallAST *ast)
_results
.
clear
();
foreach
(
Result
p
,
baseResults
)
{
if
(
Function
*
funTy
=
p
.
first
->
asFunction
())
{
if
(
Function
*
funTy
=
p
.
first
->
asFunction
Type
())
{
unsigned
minNumberArguments
=
0
;
for
(;
minNumberArguments
<
funTy
->
argumentCount
();
++
minNumberArguments
)
{
Argument
*
arg
=
funTy
->
argumentAt
(
minNumberArguments
)
->
asArgument
();
...
...
@@ -528,7 +528,7 @@ bool ResolveExpression::visit(CallAST *ast)
p
.
first
=
funTy
->
returnType
();
addResult
(
p
);
}
}
else
if
(
Class
*
classTy
=
p
.
first
->
asClass
())
{
}
else
if
(
Class
*
classTy
=
p
.
first
->
asClass
Type
())
{
// Constructor call
p
.
first
=
control
()
->
namedType
(
classTy
->
name
());
addResult
(
p
);
...
...
@@ -566,7 +566,7 @@ bool ResolveExpression::visit(ArrayAccessAST *ast)
resolveArrayOperator
(
p
,
namedTy
,
classObject
->
asClass
());
foreach
(
Result
r
,
overloads
)
{
FullySpecifiedType
ty
=
r
.
first
;
Function
*
funTy
=
ty
->
asFunction
();
Function
*
funTy
=
ty
->
asFunction
Type
();
if
(
!
funTy
)
continue
;
...
...
@@ -621,7 +621,7 @@ ResolveExpression::resolveMemberExpression(const QList<Result> &baseResults,
classObject
->
asClass
());
foreach
(
Result
r
,
overloads
)
{
FullySpecifiedType
ty
=
r
.
first
;
Function
*
funTy
=
ty
->
asFunction
();
Function
*
funTy
=
ty
->
asFunction
Type
();
if
(
!
funTy
)
continue
;
...
...
@@ -651,7 +651,7 @@ ResolveExpression::resolveMemberExpression(const QList<Result> &baseResults,
if
(
NamedType
*
namedTy
=
ty
->
asNamedType
())
results
+=
resolveMember
(
p
,
memberName
,
namedTy
);
else
if
(
Function
*
fun
=
ty
->
asFunction
())
{
else
if
(
Function
*
fun
=
ty
->
asFunction
Type
())
{
if
(
fun
->
scope
()
->
isBlockScope
()
||
fun
->
scope
()
->
isNamespaceScope
())
{
ty
=
fun
->
returnType
();
...
...
@@ -849,7 +849,7 @@ QList<Symbol *> ResolveClass::resolveClass(NamedType *namedTy,
resolvedSymbols
.
append
(
klass
);
}
else
if
(
candidate
->
isTypedef
())
{
if
(
Declaration
*
decl
=
candidate
->
asDeclaration
())
{
if
(
Class
*
asClass
=
decl
->
type
()
->
asClass
())
{
if
(
Class
*
asClass
=
decl
->
type
()
->
asClass
Type
())
{
// typedef struct { } Point;
// Point pt;
// pt.
...
...
@@ -863,7 +863,7 @@ QList<Symbol *> ResolveClass::resolveClass(NamedType *namedTy,
}
}
}
else
if
(
Declaration
*
decl
=
candidate
->
asDeclaration
())
{
if
(
Function
*
funTy
=
decl
->
type
()
->
asFunction
())
{
if
(
Function
*
funTy
=
decl
->
type
()
->
asFunction
Type
())
{
// QString foo("ciao");
// foo.
if
(
funTy
->
scope
()
->
isBlockScope
()
||
funTy
->
scope
()
->
isNamespaceScope
())
{
...
...
src/plugins/cppeditor/cppeditor.cpp
View file @
d01795d9
...
...
@@ -424,7 +424,7 @@ static bool isCompatible(Name *name, Name *otherName)
static
bool
isCompatible
(
Function
*
definition
,
Symbol
*
declaration
,
QualifiedNameId
*
declarationName
)
{
Function
*
declTy
=
declaration
->
type
()
->
asFunction
();
Function
*
declTy
=
declaration
->
type
()
->
asFunction
Type
();
if
(
!
declTy
)
return
false
;
...
...
@@ -507,7 +507,7 @@ void CPPEditor::switchDeclarationDefinition()
if
(
declaration
)
openEditorAt
(
declaration
);
}
else
if
(
lastSymbol
->
type
()
->
isFunction
())
{
}
else
if
(
lastSymbol
->
type
()
->
isFunction
Type
())
{
if
(
Symbol
*
def
=
findDefinition
(
lastSymbol
))
openEditorAt
(
def
);
}
...
...
@@ -594,7 +594,7 @@ Symbol *CPPEditor::findDefinition(Symbol *symbol)
if
(
symbol
->
isFunction
())
return
0
;
// symbol is a function definition.
Function
*
funTy
=
symbol
->
type
()
->
asFunction
();
Function
*
funTy
=
symbol
->
type
()
->
asFunction
Type
();
if
(
!
funTy
)
return
0
;
// symbol does not have function type.
...
...
src/plugins/cppeditor/cpphoverhandler.cpp
View file @
d01795d9
...
...
@@ -147,13 +147,13 @@ static QString buildHelpId(const FullySpecifiedType &type,
Name
*
name
=
0
;
Scope
*
scope
=
0
;
if
(
const
Function
*
f
=
type
->
asFunction
())
{
if
(
const
Function
*
f
=
type
->
asFunction
Type
())
{
name
=
f
->
name
();
scope
=
f
->
scope
();
}
else
if
(
const
Class
*
c
=
type
->
asClass
())
{
}
else
if
(
const
Class
*
c
=
type
->
asClass
Type
())
{
name
=
c
->
name
();
scope
=
c
->
scope
();
}
else
if
(
const
Enum
*
e
=
type
->
asEnum
())
{
}
else
if
(
const
Enum
*
e
=
type
->
asEnum
Type
())
{
name
=
e
->
name
();
scope
=
e
->
scope
();
}
else
if
(
const
NamedType
*
t
=
type
->
asNamedType
())
{
...
...
@@ -270,7 +270,7 @@ void CppHoverHandler::updateHelpIdAndTooltip(TextEditor::ITextEditor *editor, in
m_helpId
=
buildHelpId
(
docType
,
symbol
);
QString
displayName
=
buildHelpId
(
firstType
,
symbol
);
if
(
!
firstType
->
isClass
()
&&
!
firstType
->
isNamedType
())
{
if
(
!
firstType
->
isClass
Type
()
&&
!
firstType
->
isNamedType
())
{
Overview
overview
;
overview
.
setShowArgumentNames
(
true
);
overview
.
setShowReturnTypes
(
true
);
...
...
src/plugins/cpptools/cppcodecompletion.cpp
View file @
d01795d9
...
...
@@ -512,7 +512,7 @@ int CppCodeCompletion::startCompletion(TextEditor::ITextEditable *editor)
context
=
typeOfExpression
.
lookupContext
();
}
if
(
!
resolvedTypes
.
isEmpty
())
{
if
(
!
resolvedTypes
.
isEmpty
()
&&
resolvedTypes
.
first
().
first
)
{
FullySpecifiedType
exprTy
=
resolvedTypes
.
first
().
first
;
if
(
exprTy
->
isReferenceType
())
...
...
@@ -549,9 +549,9 @@ int CppCodeCompletion::startCompletion(TextEditor::ITextEditable *editor)
// If it's a class, add completions for the constructors
foreach
(
const
TypeOfExpression
::
Result
&
result
,
results
)
{
if
(
result
.
first
->
isClass
())
{
if
(
result
.
first
->
isClass
Type
())
{
FullySpecifiedType
exprTy
=
result
.
first
;
if
(
completeConstructors
(
exprTy
->
asClass
()))
if
(
completeConstructors
(
exprTy
->
asClass
Type
()))
return
m_startPosition
;
break
;
}
...
...
@@ -567,7 +567,7 @@ bool CppCodeCompletion::completeFunction(FullySpecifiedType exprTy,
const
QList
<
TypeOfExpression
::
Result
>
&
resolvedTypes
,
const
LookupContext
&
)
{
if
(
Class
*
klass
=
exprTy
->
asClass
())
{
if
(
Class
*
klass
=
exprTy
->
asClass
Type
())
{
completeConstructors
(
klass
);
}
else
{
ConvertToCompletionItem
toCompletionItem
(
this
);
...
...
@@ -578,7 +578,7 @@ bool CppCodeCompletion::completeFunction(FullySpecifiedType exprTy,
QSet
<
QString
>
signatures
;
foreach
(
TypeOfExpression
::
Result
p
,
resolvedTypes
)
{
FullySpecifiedType
ty
=
p
.
first
;
if
(
Function
*
fun
=
ty
->
asFunction
())
{
if
(
Function
*
fun
=
ty
->
asFunction
Type
())
{
if
(
TextEditor
::
CompletionItem
item
=
toCompletionItem
(
fun
))
{
QString
signature
;
signature
+=
overview
.
prettyName
(
fun
->
name
());
...
...
@@ -612,7 +612,7 @@ bool CppCodeCompletion::completeMember(const QList<TypeOfExpression::Result> &re
if
(
ReferenceType
*
refTy
=
ty
->
asReferenceType
())
ty
=
refTy
->
elementType
();
if
(
Class
*
classTy
=
ty
->
asClass
())
{
if
(
Class
*
classTy
=
ty
->
asClass
Type
())
{
Symbol
*
symbol
=
result
.
second
;
if
(
symbol
&&
!
symbol
->
isClass
())
classObjectCandidates
.
append
(
classTy
);
...
...
@@ -641,7 +641,7 @@ bool CppCodeCompletion::completeMember(const QList<TypeOfExpression::Result> &re
foreach
(
TypeOfExpression
::
Result
r
,
overloads
)
{
FullySpecifiedType
ty
=
r
.
first
;
Function
*
funTy
=
ty
->
asFunction
();
Function
*
funTy
=
ty
->
asFunction
Type
();
if
(
!
funTy
)
continue
;
...
...
@@ -674,7 +674,7 @@ bool CppCodeCompletion::completeMember(const QList<TypeOfExpression::Result> &re
if
(
!
classObjectCandidates
.
contains
(
c
))
classObjectCandidates
.
append
(
c
);
}
}
else
if
(
Class
*
classTy
=
ptrTy
->
elementType
()
->
asClass
())
{
}
else
if
(
Class
*
classTy
=
ptrTy
->
elementType
()
->
asClass
Type
())
{
// typedef struct { int x } *Ptr;
// Ptr p;
// p->
...
...
@@ -715,14 +715,14 @@ bool CppCodeCompletion::completeMember(const QList<TypeOfExpression::Result> &re
++
m_startPosition
;
namedTy
=
ptrTy
->
elementType
()
->
asNamedType
();
}
}
else
if
(
Class
*
classTy
=
ty
->
asClass
())
{
}
else
if
(
Class
*
classTy
=
ty
->
asClass
Type
())
{
Symbol
*
symbol
=
result
.
second
;
if
(
symbol
&&
!
symbol
->
isClass
())
classObjectCandidates
.
append
(
classTy
);
}
else
{
namedTy
=
ty
->
asNamedType
();
if
(
!
namedTy
)
{
Function
*
fun
=
ty
->
asFunction
();
Function
*
fun
=
ty
->
asFunction
Type
();
if
(
fun
&&
(
fun
->
scope
()
->
isBlockScope
()
||
fun
->
scope
()
->
isNamespaceScope
()))
namedTy
=
fun
->
returnType
()
->
asNamedType
();
}
...
...
@@ -759,24 +759,24 @@ bool CppCodeCompletion::completeScope(const QList<TypeOfExpression::Result> &res
foreach
(
result
,
results
)
{
FullySpecifiedType
ty
=
result
.
first
;
if
(
ty
->
isClass
()
||
ty
->
isNamespace
())
if
(
ty
->
isClass
Type
()
||
ty
->
isNamespace
Type
())
break
;
}
FullySpecifiedType
exprTy
=
result
.
first
;
if
(
!
exprTy
)
{
return
false
;
}
else
if
(
exprTy
->
a
sNamespace
())
{
}
else
if
(
exprTy
->
i
sNamespace
Type
())
{
QList
<
Symbol
*>
candidates
;
foreach
(
TypeOfExpression
::
Result
p
,
results
)
{
if
(
Namespace
*
ns
=
p
.
first
->
asNamespace
())
if
(
Namespace
*
ns
=
p
.
first
->
asNamespace
Type
())
candidates
.
append
(
ns
);
}
completeNamespace
(
candidates
,
context
);
}
else
if
(
exprTy
->
isClass
())
{
}
else
if
(
exprTy
->
isClass
Type
())
{
QList
<
Symbol
*>
candidates
;
foreach
(
TypeOfExpression
::
Result
p
,
results
)
{
if
(
Class
*
k
=
p
.
first
->
asClass
())
if
(
Class
*
k
=
p
.
first
->
asClass
Type
())
candidates
.
append
(
k
);
}
completeClass
(
candidates
,
context
);
...
...
@@ -896,7 +896,7 @@ bool CppCodeCompletion::completeConstructors(Class *klass)
for
(
unsigned
i
=
0
;
i
<
klass
->
memberCount
();
++
i
)
{
Symbol
*
member
=
klass
->
memberAt
(
i
);
if
(
!
member
->
type
()
->
isFunction
())
if
(
!
member
->
type
()
->
isFunction
Type
())
continue
;
else
if
(
!
member
->
identity
())
continue
;
...
...
@@ -959,7 +959,7 @@ bool CppCodeCompletion::completeQtMethod(CPlusPlus::FullySpecifiedType,
for
(
unsigned
i
=
0
;
i
<
scope
->
symbolCount
();
++
i
)
{
Symbol
*
member
=
scope
->
symbolAt
(
i
);
Function
*
fun
=
member
->
type
()
->
asFunction
();
Function
*
fun
=
member
->
type
()
->
asFunction
Type
();
if
(
!
fun
)
continue
;
if
(
wantSignals
&&
!
fun
->
isSignal
())
...
...
@@ -1075,7 +1075,7 @@ void CppCodeCompletion::complete(const TextEditor::CompletionItem &item)
if
(
m_completionOperator
==
T_LPAREN
)
{
if
(
symbol
)
{
Function
*
function
=
symbol
->
type
()
->
asFunction
();
Function
*
function
=
symbol
->
type
()
->
asFunction
Type
();
QTC_ASSERT
(
function
,
return
);
m_functionArgumentWidget
=
new
FunctionArgumentWidget
();
...
...
@@ -1094,8 +1094,8 @@ void CppCodeCompletion::complete(const TextEditor::CompletionItem &item)
//qDebug() << "current symbol:" << overview.prettyName(symbol->name())
//<< overview.prettyType(symbol->type());
if
(
m_autoInsertBraces
&&
symbol
)
{
if
(
Function
*
function
=
symbol
->
type
()
->
asFunction
())
{
if
(
m_autoInsertBraces
&&
symbol
&&
symbol
->
type
()
)
{
if
(
Function
*
function
=
symbol
->
type
()
->
asFunction
Type
())
{
// If the member is a function, automatically place the opening parenthesis,
// except when it might take template parameters.
const
bool
hasReturnType
=
function
->
returnType
().
isValid
()
||
...
...
src/plugins/designer/workbenchintegration.cpp
View file @
d01795d9
...
...
@@ -195,7 +195,7 @@ static const Function *findDeclaration(const Class *cl, const QString &functionN
const
Overview
overview
;
for
(
unsigned
j
=
0
;
j
<
mCount
;
j
++
)
{
// go through all members
if
(
const
Declaration
*
decl
=
cl
->
memberAt
(
j
)
->
asDeclaration
())
if
(
const
Function
*
fun
=
decl
->
type
()
->
asFunction
())
{
if
(
const
Function
*
fun
=
decl
->
type
()
->
asFunction
Type
())
{
// Format signature
QString
memberFunction
=
overview
.
prettyName
(
fun
->
name
());
memberFunction
+=
QLatin1Char
(
'('
);
...
...
@@ -233,7 +233,7 @@ static bool isCompatible(const Name *name, const Name *otherName)
// TODO: remove me, see below
static
bool
isCompatible
(
const
Function
*
definition
,
const
Symbol
*
declaration
,
const
QualifiedNameId
*
declarationName
)
{
Function
*
declTy
=
declaration
->
type
()
->
asFunction
();
Function
*
declTy
=
declaration
->
type
()
->
asFunction
Type
();
if
(
!
declTy
)
return
false
;
...
...
@@ -385,7 +385,7 @@ static void addDeclaration(const QString &docFileName, const Class *cl, const QS
const
unsigned
mCount
=
cl
->
memberCount
();
for
(
unsigned
j
=
0
;
j
<
mCount
;
j
++
)
{
// go through all members
if
(
const
Declaration
*
decl
=
cl
->
memberAt
(
j
)
->
asDeclaration
())
if
(
const
Function
*
fun
=
decl
->
type
()
->
asFunction
())
{
if
(
const
Function
*
fun
=
decl
->
type
()
->
asFunction
Type
())
{
// we are only interested in declarations of methods.
// fun->column() returns always 0, what can cause trouble in case in one
// line if there is: "private slots: void foo();"
...
...
src/shared/cplusplus/CheckDeclaration.cpp
View file @
d01795d9
...
...
@@ -130,8 +130,8 @@ bool CheckDeclaration::visit(SimpleDeclarationAST *ast)
FullySpecifiedType
ty
=
semantic
()
->
check
(
ast
->
decl_specifier_seq
,
_scope
);
FullySpecifiedType
qualTy
=
ty
.
qualifiedType
();
if
(
_templateParameters
)
{
if
(
Class
*
klass
=
ty
->
asClass
())
{
if
(
_templateParameters
&&
ty
)
{
if
(
Class
*
klass
=
ty
->
asClass
Type
())
{
klass
->
setTemplateParameters
(
_templateParameters
);
}
}
...
...
@@ -142,7 +142,8 @@ bool CheckDeclaration::visit(SimpleDeclarationAST *ast)
FullySpecifiedType
declTy
=
semantic
()
->
check
(
it
->
declarator
,
qualTy
,
_scope
,
&
name
);
if
(
Function
*
fun
=
declTy
->
asFunction
())
{
Function
*
fun
=
0
;
if
(
declTy
&&
0
!=
(
fun
=
declTy
->
asFunctionType
()))
{
fun
->
setScope
(
_scope
);
fun
->
setName
(
name
);
fun
->
setMethodKey
(
semantic
()
->
currentMethodKey
());
...
...
@@ -162,7 +163,7 @@ bool CheckDeclaration::visit(SimpleDeclarationAST *ast)
symbol
->
setType
(
control
()
->
integerType
(
IntegerType
::
Int
));
symbol
->
setType
(
declTy
);
if
(
_templateParameters
&&
it
==
ast
->
declarators
&&
!
ty
->
a
sClass
())
if
(
_templateParameters
&&
it
==
ast
->
declarators
&&
ty
&&
!
ty
->
i
sClass
Type
())
symbol
->
setTemplateParameters
(
_templateParameters
);
symbol
->
setVisibility
(
semantic
()
->
currentVisibility
());
...
...
@@ -225,13 +226,13 @@ bool CheckDeclaration::visit(FunctionDefinitionAST *ast)
Name
*
name
=
0
;
FullySpecifiedType
funTy
=
semantic
()
->
check
(
ast
->
declarator
,
qualTy
,
_scope
,
&
name
);
Function
*
fun
=
funTy
->
asFunction
();
if
(
!
fun
)
{
if
(
!
(
funTy
&&
funTy
->
isFunctionType
()))
{
translationUnit
()
->
error
(
ast
->
firstToken
(),
"expected a function prototype"
);
return
false
;
}
Function
*
fun
=
funTy
->
asFunctionType
();
fun
->
setName
(
name
);
fun
->
setTemplateParameters
(
_templateParameters
);
fun
->
setVisibility
(
semantic
()
->
currentVisibility
());
...
...
src/shared/cplusplus/CheckDeclarator.cpp
View file @
d01795d9
...
...
@@ -135,9 +135,12 @@ bool CheckDeclarator::visit(DeclaratorAST *ast)
// ### check the initializer
// FullySpecifiedType exprTy = semantic()->check(ast->initializer, _scope);
if
(
ast
->
initializer
&&
_fullySpecifiedType
->
isFunction
())
{
_fullySpecifiedType
->
asFunction
()
->
setPureVirtual
(
true
);
if
(
ast
->
initializer
&&
_fullySpecifiedType
)
{
if
(
Function
*
funTy
=
_fullySpecifiedType
->
asFunctionType
())
{
funTy
->
setPureVirtual
(
true
);
}
}
return
false
;
}
...
...
src/shared/cplusplus/CheckExpression.cpp
View file @
d01795d9
...
...
@@ -319,7 +319,7 @@ bool CheckExpression::visit(QtMethodAST *ast)
Scope
dummy
;
FullySpecifiedType
methTy
=
semantic
()
->
check
(
ast
->
declarator
,
FullySpecifiedType
(),
&
dummy
,
&
name
);
Function
*
fty
=
methTy
->
asFunction
();
Function
*
fty
=
methTy
->
asFunction
Type
();
if
(
!
fty
)
translationUnit
()
->
warning
(
ast
->
firstToken
(),
"expected a function declarator"
);
else
{
...
...
src/shared/cplusplus/CoreTypes.h
View file @
d01795d9
...
...
@@ -66,6 +66,12 @@ class CPLUSPLUS_EXPORT VoidType: public Type
public:
virtual
bool
isEqualTo
(
const
Type
*
other
)
const
;
virtual
const
VoidType
*
asVoidType
()
const
{
return
this
;
}
virtual
VoidType
*
asVoidType
()
{
return
this
;
}
protected:
virtual
void
accept0
(
TypeVisitor
*
visitor
);
};
...
...
@@ -91,6 +97,12 @@ public:
virtual
bool
isEqualTo
(
const
Type
*
other
)
const
;
virtual
IntegerType
*
asIntegerType
()
{
return
this
;
}
virtual
const
IntegerType
*
asIntegerType
()
const
{
return
this
;
}
protected:
virtual
void
accept0
(
TypeVisitor
*
visitor
);
...
...
@@ -115,6 +127,12 @@ public:
virtual
bool
isEqualTo
(
const
Type
*
other
)
const
;
virtual
const
FloatType
*
asFloatType
()
const
{
return
this
;
}
virtual
FloatType
*
asFloatType
()
{
return
this
;
}
protected:
virtual
void
accept0
(
TypeVisitor
*
visitor
);
...
...
@@ -132,6 +150,12 @@ public:
virtual
bool
isEqualTo
(
const
Type
*
other
)
const
;
virtual
const
PointerType
*
asPointerType
()
const
{
return
this
;
}
virtual
PointerType
*
asPointerType
()
{
return
this
;
}
protected:
virtual
void
accept0
(
TypeVisitor
*
visitor
);
...
...
@@ -150,6 +174,12 @@ public:
virtual
bool
isEqualTo
(
const
Type
*
other
)
const
;
virtual
const
PointerToMemberType
*
asPointerToMemberType
()
const
{
return
this
;
}
virtual
PointerToMemberType
*
asPointerToMemberType
()
{
return
this
;
}
protected:
virtual
void
accept0
(
TypeVisitor
*
visitor
);
...
...
@@ -168,6 +198,12 @@ public:
virtual
bool
isEqualTo
(
const
Type
*
other
)
const
;
virtual
const
ReferenceType
*
asReferenceType
()
const
{
return
this
;
}
virtual
ReferenceType
*
asReferenceType
()
{
return
this
;
}
protected:
virtual
void
accept0
(
TypeVisitor
*
visitor
);
...
...
@@ -186,6 +222,12 @@ public:
virtual
bool
isEqualTo
(
const
Type
*
other
)
const
;
virtual
const
ArrayType
*
asArrayType
()
const
{
return
this
;
}
virtual
ArrayType
*
asArrayType
()
{
return
this
;
}
protected:
virtual
void
accept0
(
TypeVisitor
*
visitor
);
...
...
@@ -204,6 +246,12 @@ public:
virtual
bool
isEqualTo
(
const
Type
*
other
)
const
;
virtual
const
NamedType
*
asNamedType
()
const
{
return
this
;
}
virtual
NamedType
*
asNamedType
()
{
return
this
;
}
protected:
virtual
void
accept0
(
TypeVisitor
*
visitor
);
...
...
src/shared/cplusplus/Symbols.cpp
View file @
d01795d9
...
...
@@ -188,7 +188,7 @@ void Function::setTemplateParameters(Scope *templateParameters)
bool
Function
::
isEqualTo
(
const
Type
*
other
)
const
{
const
Function
*
o
=
other
->
asFunction
();
const
Function
*
o
=
other
->
asFunction
Type
();
if
(
!
o
)
return
false
;
Name
*
l
=
identity
();
...
...
@@ -323,7 +323,7 @@ FullySpecifiedType Enum::type() const
bool
Enum
::
isEqualTo
(
const
Type
*
other
)
const
{
const
Enum
*
o
=
other
->
asEnum
();
const
Enum
*
o
=
other
->
asEnum
Type
();
if
(
!
o
)
return
false
;
Name
*
l
=
identity
();
...
...
@@ -356,7 +356,7 @@ Namespace::~Namespace()
bool
Namespace
::
isEqualTo
(
const
Type
*
other
)
const
{
const
Namespace
*
o
=
other
->
asNamespace
();
const
Namespace
*
o
=
other
->
asNamespace
Type
();
if
(
!
o
)
return
false
;
Name
*
l
=
identity
();
...
...
@@ -458,7 +458,7 @@ FullySpecifiedType Class::type() const
bool
Class
::
isEqualTo
(
const
Type
*
other
)
const
{
const
Class
*
o
=
other
->
asClass
();
const
Class
*
o
=
other
->
asClass
Type
();
if
(
!
o
)
return
false
;
Name
*
l
=
identity
();
...
...
src/shared/cplusplus/Symbols.h
View file @
d01795d9
...
...
@@ -217,6 +217,12 @@ public:
virtual
Enum
*
asEnum
()
{
return
this
;
}
virtual
const
Enum
*
asEnumType
()
const
{
return
this
;
}
virtual
Enum
*
asEnumType
()
{
return
this
;
}
protected:
virtual
void
visitSymbol0
(
SymbolVisitor
*
visitor
);
virtual
void
accept0
(
TypeVisitor
*
visitor
);
...
...
@@ -278,6 +284,12 @@ public:
virtual
Function
*
asFunction
()
{
return
this
;
}
virtual
const
Function
*
asFunctionType
()
const
{
return
this
;
}
virtual
Function
*
asFunctionType
()
{
return
this
;
}
protected:
virtual
void
visitSymbol0
(
SymbolVisitor
*
visitor
);
virtual
void
accept0
(
TypeVisitor
*
visitor
);
...
...
@@ -318,6 +330,12 @@ public:
virtual
Namespace
*
asNamespace
()
{
return
this
;
}
virtual
const
Namespace
*
asNamespaceType
()
const
{
return
this
;
}
virtual
Namespace
*
asNamespaceType
()
{
return
this
;
}
protected:
virtual
void
visitSymbol0
(
SymbolVisitor
*
visitor
);
virtual
void
accept0
(
TypeVisitor
*
visitor
);
...
...
@@ -388,6 +406,12 @@ public:
virtual
Class
*
asClass
()
{
return
this
;
}
virtual
const
Class
*
asClassType
()
const
{
return
this
;
}
virtual
Class
*
asClassType
()
{
return
this
;
}
protected:
virtual
void
visitSymbol0
(
SymbolVisitor
*
visitor
);
virtual
void
accept0
(
TypeVisitor
*
visitor
);
...
...
src/shared/cplusplus/Type.cpp
View file @
d01795d9
...
...
@@ -64,121 +64,40 @@ Type::~Type()
{
}
bool
Type
::
isVoidType
()
const
{
return
dynamic_cast
<
const
VoidType
*>
(
this
)
!=
0
;
}
{
return
asVoidType
(
)
!=
0
;
}
bool
Type
::
isIntegerType
()
const
{
return
dynamic_cast
<
const
IntegerType
*>
(
this
)
!=
0
;
}
{
return
as
IntegerType
(
)
!=
0
;
}
bool
Type
::
isFloatType
()
const
{
return
dynamic_cast
<
const
FloatType
*>
(
this
)
!=
0
;
}
{
return
as
FloatType
(
)
!=
0
;
}
bool
Type
::
isPointerType
()
const
{
return
dynamic_cast
<
const
PointerType
*>
(
this
)
!=
0
;
}
{
return
as
PointerType
()
!=
0
;
}
bool
Type
::
isPointerToMemberType
()
const
{
return
dynamic_cast
<
const
PointerToMemberType
*>
(
this
)
!=
0
;
}
{
return
as
PointerToMemberType
(
)
!=
0
;
}
bool
Type
::
isReferenceType
()
const