diff options
author | Andrei Karas <akaras@inbox.ru> | 2015-07-21 18:22:35 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2015-07-21 18:22:35 +0300 |
commit | bb3d13f93d26d281b6c78dc47dc94e8507f26b6f (patch) | |
tree | cf9dc23ee1edef953abc4e2e355071858f849d44 /src | |
parent | cfdf4361c7d0d8983d407c3a791207f16901683e (diff) | |
download | paranucker-bb3d13f93d26d281b6c78dc47dc94e8507f26b6f.tar.gz paranucker-bb3d13f93d26d281b6c78dc47dc94e8507f26b6f.tar.bz2 paranucker-bb3d13f93d26d281b6c78dc47dc94e8507f26b6f.tar.xz paranucker-bb3d13f93d26d281b6c78dc47dc94e8507f26b6f.zip |
Add to parsers to get fields type. Limit type pointers to parse only one child nodes level.
Diffstat (limited to 'src')
-rw-r--r-- | src/nodes/decl/field_decl.h | 2 | ||||
-rw-r--r-- | src/parsers/decl/field_decl.cpp | 6 | ||||
-rw-r--r-- | src/parsers/type/pointer_type.cpp | 3 | ||||
-rw-r--r-- | src/parsers/type/record_type.cpp | 3 | ||||
-rw-r--r-- | src/parsers/type/reference_type.cpp | 3 | ||||
-rw-r--r-- | src/parsers/type/typename_type.cpp | 4 | ||||
-rw-r--r-- | src/parsers/type/union_type.cpp | 4 | ||||
-rw-r--r-- | src/parsers/type/vector_type.cpp | 4 | ||||
-rw-r--r-- | src/parsers/type/void_type.cpp | 3 |
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); } } |