Skip to content

Commit f17057b

Browse files
committed
split tranche access to separate vector
1 parent 7c21e67 commit f17057b

File tree

10 files changed

+183
-132
lines changed

10 files changed

+183
-132
lines changed

include/mrdox/Corpus.hpp

+6-6
Original file line numberDiff line numberDiff line change
@@ -108,12 +108,12 @@ class MRDOX_VISIBLE
108108
MRDOX_DECL virtual bool visit(EnumInfo const&);
109109
MRDOX_DECL virtual bool visit(VarInfo const&);
110110

111-
MRDOX_DECL virtual bool visit(DataMember const&);
112-
MRDOX_DECL virtual bool visit(MemberEnum const&);
113-
MRDOX_DECL virtual bool visit(MemberFunction const&);
114-
MRDOX_DECL virtual bool visit(MemberRecord const&);
115-
MRDOX_DECL virtual bool visit(MemberType const&);
116-
MRDOX_DECL virtual bool visit(StaticDataMember const&);
111+
MRDOX_DECL virtual bool visit(DataMember const&, Access);
112+
MRDOX_DECL virtual bool visit(MemberEnum const&, Access);
113+
MRDOX_DECL virtual bool visit(MemberFunction const&, Access);
114+
MRDOX_DECL virtual bool visit(MemberRecord const&, Access);
115+
MRDOX_DECL virtual bool visit(MemberType const&, Access);
116+
MRDOX_DECL virtual bool visit(StaticDataMember const&, Access);
117117
};
118118

119119
/** Traverse the symbol, list, or its children.

include/mrdox/Metadata/Function.hpp

+20-21
Original file line numberDiff line numberDiff line change
@@ -35,29 +35,28 @@ union FnFlags0
3535
{
3636
BitFieldFullValue raw;
3737

38-
BitFlag<0> isVariadic;
39-
BitFlag<1> isVirtual;
40-
BitFlag<2> isVirtualAsWritten;
41-
BitFlag<3> isPure;
42-
BitFlag<4> isDefaulted;
43-
BitFlag<5> isExplicitlyDefaulted;
44-
BitFlag<6> isDeleted;
45-
BitFlag<7> isDeletedAsWritten;
46-
BitFlag<8> isNoReturn;
47-
48-
BitFlag<9> hasOverrideAttr;
49-
BitFlag<10> hasTrailingReturn;
50-
BitField<11, 2, ConstexprSpecKind> constexprKind;
51-
BitField<13, 4, ExceptionSpecificationType> exceptionSpecType;
52-
BitField<17, 6, OverloadedOperatorKind> overloadedOperator;
53-
BitField<23, 3, StorageClass> storageClass;
54-
BitFlag<26> isConst;
55-
BitFlag<27> isVolatile;
56-
BitField<28, 2, RefQualifierKind> refQualifier;
38+
BitFlag < 0> isVariadic;
39+
BitFlag < 1> isVirtual;
40+
BitFlag < 2> isVirtualAsWritten;
41+
BitFlag < 3> isPure;
42+
BitFlag < 4> isDefaulted;
43+
BitFlag < 5> isExplicitlyDefaulted;
44+
BitFlag < 6> isDeleted;
45+
BitFlag < 7> isDeletedAsWritten;
46+
BitFlag < 8> isNoReturn;
47+
BitFlag < 9> hasOverrideAttr;
48+
BitFlag <10> hasTrailingReturn;
49+
BitFlag <11> isConst;
50+
BitFlag <12> isVolatile;
51+
BitField<13> isFinal;
52+
53+
BitField<14, 2, ConstexprSpecKind> constexprKind;
54+
BitField<16, 4, ExceptionSpecificationType> exceptionSpecType;
55+
BitField<20, 6, OverloadedOperatorKind> overloadedOperator;
56+
BitField<26, 3, StorageClass> storageClass;
57+
BitField<29, 2, RefQualifierKind> refQualifier;
5758
};
5859

59-
60-
6160
/** Bit field used with function specifiers.
6261
*/
6362
union FnFlags1

include/mrdox/Metadata/Members.hpp

-6
Original file line numberDiff line numberDiff line change
@@ -28,42 +28,36 @@ struct DataMember
2828
{
2929
MemberTypeInfo const* I;
3030
RecordInfo const* From;
31-
Access access;
3231
};
3332

3433
struct MemberEnum
3534
{
3635
EnumInfo const* I;
3736
RecordInfo const* From;
38-
Access access;
3937
};
4038

4139
struct MemberFunction
4240
{
4341
FunctionInfo const* I;
4442
RecordInfo const* From;
45-
Access access;
4643
};
4744

4845
struct MemberRecord
4946
{
5047
RecordInfo const* I;
5148
RecordInfo const* From;
52-
Access access;
5349
};
5450

5551
struct MemberType
5652
{
5753
TypedefInfo const* I;
5854
RecordInfo const* From;
59-
Access access;
6055
};
6156

6257
struct StaticDataMember
6358
{
6459
VarInfo const* I;
6560
RecordInfo const* From;
66-
Access access;
6761
};
6862

6963
} // mrdox

source/lib/api/AST/ASTVisitor.cpp

+19-1
Original file line numberDiff line numberDiff line change
@@ -796,6 +796,7 @@ constructFunction(
796796
I.specs0.isConst = D->isConst();
797797
I.specs0.isVolatile = D->isVolatile();
798798
I.specs0.refQualifier = D->getRefQualifier();
799+
I.specs0.isFinal = D->template hasAttr<FinalAttr>();
799800
//D->isCopyAssignmentOperator()
800801
//D->isMoveAssignmentOperator()
801802
//D->isOverloadedOperator();
@@ -947,8 +948,25 @@ buildRecord(
947948
}
948949
}
949950

951+
AccessSpecifier access;
952+
if(auto CT = D->getDescribedClassTemplate())
953+
{
954+
access = CT->getAccess();
955+
}
956+
else if(auto MSI = D->getMemberSpecializationInfo())
957+
{
958+
access = MSI->getInstantiatedFrom()->getAccess();
959+
}
960+
else if(auto* CTSD = dyn_cast<ClassTemplateSpecializationDecl>(D))
961+
{
962+
access = CTSD->getSpecializedTemplate()->getAccess();
963+
}
964+
else
965+
{
966+
access = D->getAccess();
967+
}
950968
insertBitcode(ex_, writeBitcode(I));
951-
insertBitcode(ex_, writeParent(std::move(I), D->getAccess()));
969+
insertBitcode(ex_, writeParent(std::move(I), access));
952970
}
953971

954972
void

source/lib/api/Corpus.cpp

+17-22
Original file line numberDiff line numberDiff line change
@@ -112,39 +112,34 @@ bool Corpus::Visitor::visit(VarInfo const&)
112112

113113
//---
114114

115-
bool Corpus::Visitor::visit(DataMember const&)
115+
bool Corpus::Visitor::visit(DataMember const&, Access)
116116
{
117117
return true;
118118
}
119119

120-
bool Corpus::Visitor::visit(MemberEnum const& I)
120+
bool Corpus::Visitor::visit(MemberEnum const& I, Access)
121121
{
122-
return visit(*I.I);
123-
// return true;
122+
return true;
124123
}
125124

126-
bool Corpus::Visitor::visit(MemberFunction const& I)
125+
bool Corpus::Visitor::visit(MemberFunction const& I, Access)
127126
{
128-
return visit(*I.I);
129-
// return true;
127+
return true;
130128
}
131129

132-
bool Corpus::Visitor::visit(MemberRecord const& I)
130+
bool Corpus::Visitor::visit(MemberRecord const& I, Access)
133131
{
134-
return visit(*I.I);
135-
// return true;
132+
return true;
136133
}
137134

138-
bool Corpus::Visitor::visit(MemberType const& I)
135+
bool Corpus::Visitor::visit(MemberType const& I, Access)
139136
{
140-
return visit(*I.I);
141-
// return true;
137+
return true;
142138
}
143139

144-
bool Corpus::Visitor::visit(StaticDataMember const& I)
140+
bool Corpus::Visitor::visit(StaticDataMember const& I, Access)
145141
{
146-
return visit(*I.I);
147-
// return true;
142+
return true;
148143
}
149144

150145

@@ -211,30 +206,30 @@ traverse(
211206
for(auto const& t : I.Children_.Records)
212207
if(! f.visit(MemberRecord{
213208
&get<RecordInfo>(t.id),
214-
&I, t.access}))
209+
&I}, t.access))
215210
return false;
216211
for(auto const& t : I.Children_.Functions)
217212
if(! f.visit(MemberFunction{
218213
&get<FunctionInfo>(t.id),
219-
&I, t.access}))
214+
&I}, t.access))
220215
return false;
221216
for(auto const& t : I.Children_.Types)
222217
if(! f.visit(MemberType{
223218
&get<TypedefInfo>(t.id),
224-
&I, t.access}))
219+
&I}, t.access))
225220
return false;
226221
for(auto const& t : I.Children_.Enums)
227222
if(! f.visit(MemberEnum{
228223
&get<EnumInfo>(t.id),
229-
&I, t.access}))
224+
&I}, t.access))
230225
return false;
231226
for(auto const& t : I.Children_.Vars)
232227
if(! f.visit(StaticDataMember{
233228
&get<VarInfo>(t.id),
234-
&I, t.access}))
229+
&I}, t.access))
235230
return false;
236231
for(auto const& t : I.Members)
237-
if(! f.visit(DataMember{&t, &I, t.access}))
232+
if(! f.visit(DataMember{&t, &I}, t.access))
238233
return false;
239234
return true;
240235
}

0 commit comments

Comments
 (0)