summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/nodes/decl/field_decl.h2
-rw-r--r--src/parsers/decl/field_decl.cpp6
-rw-r--r--src/parsers/type/pointer_type.cpp3
-rw-r--r--src/parsers/type/record_type.cpp3
-rw-r--r--src/parsers/type/reference_type.cpp3
-rw-r--r--src/parsers/type/typename_type.cpp4
-rw-r--r--src/parsers/type/union_type.cpp4
-rw-r--r--src/parsers/type/vector_type.cpp4
-rw-r--r--src/parsers/type/void_type.cpp3
9 files changed, 22 insertions, 10 deletions
diff --git a/src/nodes/decl/field_decl.h b/src/nodes/decl/field_decl.h
index 9aafdf5..18bf46f 100644
--- a/src/nodes/decl/field_decl.h
+++ b/src/nodes/decl/field_decl.h
@@ -34,6 +34,7 @@ struct FieldDeclNode : public DeclNode
DeclNode(),
declSize(nullptr),
declBitType(nullptr),
+ fieldType(nullptr),
initial(nullptr),
qualifier(nullptr),
isBitField(false),
@@ -45,6 +46,7 @@ struct FieldDeclNode : public DeclNode
IntegerCstNode *declSize;
TypeNode *declBitType;
+ TypeNode *fieldType;
Node *initial;
Node *qualifier;
bool isBitField;
diff --git a/src/parsers/decl/field_decl.cpp b/src/parsers/decl/field_decl.cpp
index 1d425b9..e7521fd 100644
--- a/src/parsers/decl/field_decl.cpp
+++ b/src/parsers/decl/field_decl.cpp
@@ -70,6 +70,12 @@ void parseFieldDeclNode(FieldDeclNode *node)
node,
DECL_QUALIFIER(node->gccNode),
"qualifier");
+
+ node->fieldType = static_cast<TypeNode*>(createParseNode(
+ node,
+ TREE_TYPE(node->gccNode),
+ "field type",
+ node->parseChilds));
}
}
diff --git a/src/parsers/type/pointer_type.cpp b/src/parsers/type/pointer_type.cpp
index 42cafd3..d15bc52 100644
--- a/src/parsers/type/pointer_type.cpp
+++ b/src/parsers/type/pointer_type.cpp
@@ -41,7 +41,8 @@ void parsePointerTypeNode(PointerTypeNode *node)
node->nestedType = static_cast<TypeNode*>(createParseNode(
node,
TREE_TYPE(node->gccNode),
- "nested type"));
+ "nested type",
+ false));
}
}
diff --git a/src/parsers/type/record_type.cpp b/src/parsers/type/record_type.cpp
index 2db2d12..f7ba01a 100644
--- a/src/parsers/type/record_type.cpp
+++ b/src/parsers/type/record_type.cpp
@@ -33,12 +33,13 @@ void parseRecordTypeNode(RecordTypeNode *node)
fillType(node);
Log::dump(node);
- fillTypeName(node);
fillTypeAttributes(node);
if (!node->parseChilds)
return;
+ fillTypeName(node);
+
FOR_CHAIN(node->gccNode, it, TYPE_FIELDS, DECL_CHAIN)
{
node->fields.push_back(static_cast<DeclNode*>(
diff --git a/src/parsers/type/reference_type.cpp b/src/parsers/type/reference_type.cpp
index a225f5f..6642431 100644
--- a/src/parsers/type/reference_type.cpp
+++ b/src/parsers/type/reference_type.cpp
@@ -33,11 +33,12 @@ void parseReferenceTypeNode(ReferenceTypeNode *node)
fillType(node);
Log::dump(node);
+ fillTypeAttributes(node);
+
if (!node->parseChilds)
return;
fillTypeName(node);
- fillTypeAttributes(node);
node->nestedType = static_cast<TypeNode*>(createParseNode(
node,
TREE_TYPE(node->gccNode),
diff --git a/src/parsers/type/typename_type.cpp b/src/parsers/type/typename_type.cpp
index c295b79..053d87f 100644
--- a/src/parsers/type/typename_type.cpp
+++ b/src/parsers/type/typename_type.cpp
@@ -39,12 +39,12 @@ void parseTypeNameTypeNode(TypeNameTypeNode *node)
setPrintField(node, TYPENAME_IS_RESOLVING_P, isResolving);
#endif
+ fillTypeAttributes(node);
+
if (!node->parseChilds)
return;
fillTypeName(node);
- fillTypeAttributes(node);
-
#ifdef ENABLE_CXXLANG
node->fullName = createParseNode(
node,
diff --git a/src/parsers/type/union_type.cpp b/src/parsers/type/union_type.cpp
index 392dd63..5788397 100644
--- a/src/parsers/type/union_type.cpp
+++ b/src/parsers/type/union_type.cpp
@@ -33,12 +33,12 @@ void parseUnionTypeNode(UnionTypeNode *node)
fillType(node);
Log::dump(node);
+ fillTypeAttributes(node);
+
if (!node->parseChilds)
return;
fillTypeName(node);
- fillTypeAttributes(node);
-
FOR_CHAIN(node->gccNode, it, TYPE_FIELDS, DECL_CHAIN)
{
node->fields.push_back(static_cast<DeclNode*>(
diff --git a/src/parsers/type/vector_type.cpp b/src/parsers/type/vector_type.cpp
index 82dfac8..adcb003 100644
--- a/src/parsers/type/vector_type.cpp
+++ b/src/parsers/type/vector_type.cpp
@@ -35,12 +35,12 @@ void parseVectorTypeNode(VectorTypeNode *node)
setPrintField(node, TYPE_VECTOR_SUBPARTS, vectorSize);
+ fillTypeAttributes(node);
+
if (!node->parseChilds)
return;
fillTypeName(node);
- fillTypeAttributes(node);
-
// TREE_TYPE - element type
node->elementType = static_cast<TypeNode*>(createParseNode(
diff --git a/src/parsers/type/void_type.cpp b/src/parsers/type/void_type.cpp
index b7881e0..a76deb2 100644
--- a/src/parsers/type/void_type.cpp
+++ b/src/parsers/type/void_type.cpp
@@ -33,11 +33,12 @@ void parseVoidTypeNode(VoidTypeNode *node)
fillType(node);
Log::dump(node);
+ fillTypeAttributes(node);
+
if (!node->parseChilds)
return;
fillTypeName(node);
- fillTypeAttributes(node);
}
}