data: Tests for DataType

* Added Array and Reference Modifier for DataType.
* Created basic tests for DataType.
* Fixed bug where qualifiers of modifiers were not copied correctly.
* Fixed bug where DataType modifiers were applied in the wrong (reverse) order.
This commit is contained in:
malte_langkabel
2014-07-14 11:29:44 +02:00
parent 9284397d46
commit ce54bd50ed
18 changed files with 228 additions and 69 deletions
+19
View File
@@ -1,7 +1,9 @@
#include "data/parser/cxx/utilityCxx.h"
#include "data/type/DataType.h"
#include "data/type/modifier/DataTypeModifierArray.h"
#include "data/type/modifier/DataTypeModifierPointer.h"
#include "data/type/modifier/DataTypeModifierReference.h"
#include "data/type/DataTypeModifierStack.h"
#include "data/type/DataTypeQualifierList.h"
@@ -25,6 +27,23 @@ namespace utility
qualType = type->getPointeeType();
}
else if (type->isArrayType())
{
std::shared_ptr<DataTypeModifier> modifier = std::make_shared<DataTypeModifierArray>();
if (qualType.isConstQualified())
modifier->addQualifier(DataTypeQualifierList::QUALIFIER_CONST);
modifierStack.push(modifier);
qualType = clang::dyn_cast<clang::ArrayType>(type)->getElementType();
}
else if (type->isReferenceType())
{
std::shared_ptr<DataTypeModifier> modifier = std::make_shared<DataTypeModifierReference>();
// references can not be const qualified
modifierStack.push(modifier);
qualType = type->getPointeeType();
}
else if (type->isStructureOrClassType() || type->isEnumeralType())
{
typeName = qualType.getAsString();