Skip to content

Commit 30d4fc1

Browse files
make cppast objects mutable
1 parent c42fd9f commit 30d4fc1

40 files changed

+224
-165
lines changed

cppast/include/cppast/cpp_asm_block.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class CppAsmBlock : public CppEntity
3737
}
3838

3939
private:
40-
const std::string asm_;
40+
std::string asm_;
4141
};
4242

4343
} // namespace cppast

cppast/include/cppast/cpp_attribute_specifier_sequence_container.h

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ namespace cppast {
1313

1414
class CppExpression;
1515

16-
using CppAttributeSpecifierSequence = std::vector<std::unique_ptr<const CppExpression>>;
16+
using CppAttributeSpecifierSequence = std::vector<std::unique_ptr<CppExpression>>;
1717

1818
/**
1919
* @brief A mixin class to allow objects to have attribute specifier sequence
@@ -43,6 +43,22 @@ class CppAttributeSpecifierSequenceContainer
4343
*/
4444
bool visit(const std::function<bool(const CppExpression& attributeSpecifier)>& callback) const;
4545

46+
/**
47+
* @brief Visits all attribute specifiers.
48+
*
49+
* @param callback The callback that is invoked once for each attribute specifier.
50+
*/
51+
void visitAll(const std::function<void(CppExpression& attributeSpecifier)>& callback);
52+
53+
/**
54+
* @brief Similar to visitAll() but interuptible.
55+
*
56+
* @param callback If the \a callback returns false then the visit is interrupted.
57+
* @return true If all attribute specifiers were visited without interruption.
58+
* @return false If the visit was interrupted.
59+
*/
60+
bool visit(const std::function<bool(CppExpression& attributeSpecifier)>& callback);
61+
4662
private:
4763
CppAttributeSpecifierSequence attribSpecifierSequence_;
4864
};

cppast/include/cppast/cpp_compound.h

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ enum class CppCompoundType : std::uint8_t
3434

3535
struct CppInheritanceInfo
3636
{
37-
const std::string baseName;
38-
const std::optional<CppAccessType> inhType;
39-
const bool isVirtual {false};
37+
std::string baseName;
38+
std::optional<CppAccessType> inhType;
39+
bool isVirtual {false};
4040
};
4141

4242
/**
@@ -99,6 +99,16 @@ class CppCompound : public CppEntity, public CppTemplatableEntity
9999
});
100100
}
101101

102+
bool visitAll(const Visitor<CppEntity&>& callback);
103+
104+
template <typename _EntityClass>
105+
bool visit(const Visitor<_EntityClass&>& callback)
106+
{
107+
return visitAll([&callback](CppEntity& entity) {
108+
return (entity.entityType() != _EntityClass::EntityType()) || callback(static_cast<_EntityClass&>(entity));
109+
});
110+
}
111+
102112
const std::string& name() const
103113
{
104114
return name_;

cppast/include/cppast/cpp_control_blocks.h

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ class CppControlBlockBase
3939
}
4040

4141
private:
42-
const std::unique_ptr<CppEntity> cond_;
43-
const std::unique_ptr<CppEntity> body_;
42+
std::unique_ptr<CppEntity> cond_;
43+
std::unique_ptr<CppEntity> body_;
4444
};
4545

4646
class CppIfBlock : public CppEntity, public CppControlBlockBase<CppEntityType::IF_BLOCK>
@@ -62,7 +62,7 @@ class CppIfBlock : public CppEntity, public CppControlBlockBase<CppEntityType::I
6262
}
6363

6464
private:
65-
const std::unique_ptr<CppEntity> else_;
65+
std::unique_ptr<CppEntity> else_;
6666
};
6767

6868
class CppWhileBlock : public CppEntity, public CppControlBlockBase<CppEntityType::WHILE_BLOCK>
@@ -85,8 +85,6 @@ class CppDoWhileBlock : public CppEntity, public CppControlBlockBase<CppEntityTy
8585
}
8686
};
8787

88-
using CppExpressions = std::vector<std::unique_ptr<const CppExpression>>;
89-
9088
class CppForBlock : public CppEntity
9189
{
9290
public:
@@ -97,8 +95,8 @@ class CppForBlock : public CppEntity
9795

9896
public:
9997
CppForBlock(std::unique_ptr<CppEntity> start,
100-
std::unique_ptr<const CppExpression> stop,
101-
std::unique_ptr<const CppExpression> step,
98+
std::unique_ptr<CppExpression> stop,
99+
std::unique_ptr<CppExpression> step,
102100
std::unique_ptr<CppEntity> body)
103101
: CppEntity(EntityType())
104102
, start_(std::move(start))
@@ -129,10 +127,10 @@ class CppForBlock : public CppEntity
129127
}
130128

131129
private:
132-
const std::unique_ptr<CppEntity> start_;
133-
const std::unique_ptr<const CppExpression> stop_;
134-
const std::unique_ptr<const CppExpression> step_;
135-
const std::unique_ptr<CppEntity> body_;
130+
std::unique_ptr<CppEntity> start_;
131+
std::unique_ptr<CppExpression> stop_;
132+
std::unique_ptr<CppExpression> step_;
133+
std::unique_ptr<CppEntity> body_;
136134
};
137135

138136
class CppRangeForBlock : public CppEntity
@@ -169,9 +167,9 @@ class CppRangeForBlock : public CppEntity
169167
}
170168

171169
private:
172-
const std::unique_ptr<CppVar> var_;
173-
const std::unique_ptr<CppExpression> expr_;
174-
const std::unique_ptr<CppEntity> body_;
170+
std::unique_ptr<CppVar> var_;
171+
std::unique_ptr<CppExpression> expr_;
172+
std::unique_ptr<CppEntity> body_;
175173
};
176174

177175
class CppCase
@@ -227,8 +225,8 @@ class CppSwitchBlock : public CppEntity
227225
}
228226

229227
private:
230-
const std::unique_ptr<CppExpression> cond_;
231-
const std::vector<CppCase> body_;
228+
std::unique_ptr<CppExpression> cond_;
229+
std::vector<CppCase> body_;
232230
};
233231

234232
} // namespace cppast

cppast/include/cppast/cpp_documentation_comment.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class CppDocumentationComment : public CppEntity
3333
}
3434

3535
private:
36-
const std::string doc_; ///< Entire comment text
36+
std::string doc_; ///< Entire comment text
3737
};
3838

3939
} // namespace cppast

cppast/include/cppast/cpp_enum.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -111,10 +111,10 @@ class CppEnum : public CppEntity
111111
}
112112

113113
private:
114-
const std::string name_; // Can be empty for anonymous enum.
115-
const std::list<CppEnumItem> itemList_; // Can be nullptr for forward declared enum.
116-
const bool isClass_;
117-
const std::string underlyingType_;
114+
std::string name_; // Can be empty for anonymous enum.
115+
std::list<CppEnumItem> itemList_; // Can be nullptr for forward declared enum.
116+
bool isClass_;
117+
std::string underlyingType_;
118118
};
119119

120120
} // namespace cppast

cppast/include/cppast/cpp_expression.h

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ class CppNameExpr : public CppAtomicExpr, public CppCommonAtomicExprImplBase<Cpp
173173
class CppVartypeExpr : public CppAtomicExpr, public CppAtomicExprImplBase<CppAtomicExprType::VARTYPE>
174174
{
175175
public:
176-
CppVartypeExpr(std::unique_ptr<const CppVarType> atom)
176+
CppVartypeExpr(std::unique_ptr<CppVarType> atom)
177177
: CppAtomicExpr(AtomicExprType())
178178
, atom_(std::move(atom))
179179
{
@@ -185,14 +185,14 @@ class CppVartypeExpr : public CppAtomicExpr, public CppAtomicExprImplBase<CppAto
185185
}
186186

187187
private:
188-
std::unique_ptr<const CppVarType> atom_;
188+
std::unique_ptr<CppVarType> atom_;
189189
};
190190

191191
// TODO: Eliminate CppLambda by merging to CppLambdaExpr.
192192
class CppLambdaExpr : public CppAtomicExpr, public CppAtomicExprImplBase<CppAtomicExprType::LAMBDA>
193193
{
194194
public:
195-
CppLambdaExpr(std::unique_ptr<const CppLambda> lambda)
195+
CppLambdaExpr(std::unique_ptr<CppLambda> lambda)
196196
: CppAtomicExpr(AtomicExprType())
197197
, lambda_(std::move(lambda))
198198
{
@@ -205,7 +205,7 @@ class CppLambdaExpr : public CppAtomicExpr, public CppAtomicExprImplBase<CppAtom
205205
}
206206

207207
private:
208-
const std::unique_ptr<const CppLambda> lambda_;
208+
std::unique_ptr<CppLambda> lambda_;
209209
};
210210

211211
class CppMonomialExpr : public CppExpression
@@ -236,8 +236,8 @@ class CppMonomialExpr : public CppExpression
236236
}
237237

238238
private:
239-
const CppUnaryOperator oper_;
240-
const std::unique_ptr<CppExpression> term_;
239+
CppUnaryOperator oper_;
240+
std::unique_ptr<CppExpression> term_;
241241
};
242242

243243
class CppBinomialExpr : public CppExpression
@@ -250,8 +250,8 @@ class CppBinomialExpr : public CppExpression
250250

251251
public:
252252
CppBinomialExpr(CppBinaryOperator oper,
253-
std::unique_ptr<const CppExpression> term1,
254-
std::unique_ptr<const CppExpression> term2)
253+
std::unique_ptr<CppExpression> term1,
254+
std::unique_ptr<CppExpression> term2)
255255
: CppExpression(ExpressionType())
256256
, oper_(oper)
257257
, term1_(std::move(term1))
@@ -276,9 +276,9 @@ class CppBinomialExpr : public CppExpression
276276
}
277277

278278
private:
279-
const CppBinaryOperator oper_;
280-
const std::unique_ptr<const CppExpression> term1_;
281-
const std::unique_ptr<const CppExpression> term2_;
279+
CppBinaryOperator oper_;
280+
std::unique_ptr<CppExpression> term1_;
281+
std::unique_ptr<CppExpression> term2_;
282282
};
283283

284284
class CppTrinomialExpr : public CppExpression
@@ -324,10 +324,10 @@ class CppTrinomialExpr : public CppExpression
324324
}
325325

326326
private:
327-
const CppTernaryOperator oper_;
328-
const std::unique_ptr<CppExpression> term1_;
329-
const std::unique_ptr<CppExpression> term2_;
330-
const std::unique_ptr<CppExpression> term3_;
327+
CppTernaryOperator oper_;
328+
std::unique_ptr<CppExpression> term1_;
329+
std::unique_ptr<CppExpression> term2_;
330+
std::unique_ptr<CppExpression> term3_;
331331
};
332332

333333
class CppFunctionCallExpr : public CppExpression
@@ -339,7 +339,7 @@ class CppFunctionCallExpr : public CppExpression
339339
}
340340

341341
public:
342-
CppFunctionCallExpr(std::unique_ptr<const CppExpression> func, std::vector<std::unique_ptr<const CppExpression>> args)
342+
CppFunctionCallExpr(std::unique_ptr<CppExpression> func, std::vector<std::unique_ptr<CppExpression>> args)
343343
: CppExpression(ExpressionType())
344344
, function_(std::move(func))
345345
, arguments_(std::move(args))
@@ -363,8 +363,8 @@ class CppFunctionCallExpr : public CppExpression
363363
}
364364

365365
private:
366-
const std::unique_ptr<const CppExpression> function_;
367-
const std::vector<std::unique_ptr<const CppExpression>> arguments_;
366+
std::unique_ptr<CppExpression> function_;
367+
std::vector<std::unique_ptr<CppExpression>> arguments_;
368368
};
369369

370370
class CppUniformInitializerExpr : public CppExpression
@@ -376,7 +376,7 @@ class CppUniformInitializerExpr : public CppExpression
376376
}
377377

378378
public:
379-
CppUniformInitializerExpr(std::string name, std::vector<std::unique_ptr<const CppExpression>> args)
379+
CppUniformInitializerExpr(std::string name, std::vector<std::unique_ptr<CppExpression>> args)
380380
: CppExpression(ExpressionType())
381381
, name_(std::move(name))
382382
, arguments_(std::move(args))
@@ -400,8 +400,8 @@ class CppUniformInitializerExpr : public CppExpression
400400
}
401401

402402
private:
403-
const std::string name_;
404-
const std::vector<std::unique_ptr<const CppExpression>> arguments_;
403+
std::string name_;
404+
std::vector<std::unique_ptr<CppExpression>> arguments_;
405405
};
406406

407407
class CppInitializerListExpr : public CppExpression
@@ -413,7 +413,7 @@ class CppInitializerListExpr : public CppExpression
413413
}
414414

415415
public:
416-
CppInitializerListExpr(std::vector<std::unique_ptr<const CppExpression>> exprList)
416+
CppInitializerListExpr(std::vector<std::unique_ptr<CppExpression>> exprList)
417417
: CppExpression(ExpressionType())
418418
, exprList_(std::move(exprList))
419419
{
@@ -431,7 +431,7 @@ class CppInitializerListExpr : public CppExpression
431431
}
432432

433433
private:
434-
const std::vector<std::unique_ptr<const CppExpression>> exprList_;
434+
std::vector<std::unique_ptr<CppExpression>> exprList_;
435435
};
436436

437437
class CppTypecastExpr : public CppExpression
@@ -461,8 +461,8 @@ class CppTypecastExpr : public CppExpression
461461

462462
protected:
463463
CppTypecastExpr(CppTypecastType typecastType,
464-
std::unique_ptr<const CppVarType> targetType,
465-
std::unique_ptr<const CppExpression> expr)
464+
std::unique_ptr<CppVarType> targetType,
465+
std::unique_ptr<CppExpression> expr)
466466
: CppExpression(ExpressionType())
467467
, castType_(typecastType)
468468
, targetType_(std::move(targetType))
@@ -471,9 +471,9 @@ class CppTypecastExpr : public CppExpression
471471
}
472472

473473
private:
474-
const CppTypecastType castType_;
475-
const std::unique_ptr<const CppVarType> targetType_;
476-
const std::unique_ptr<const CppExpression> expr_;
474+
CppTypecastType castType_;
475+
std::unique_ptr<CppVarType> targetType_;
476+
std::unique_ptr<CppExpression> expr_;
477477
};
478478

479479
template <CppTypecastType _TypecastType>
@@ -491,7 +491,7 @@ class CppTypecastExprImplBase
491491
class CppCStyleTypecastExpr : public CppTypecastExpr, public CppTypecastExprImplBase<CppTypecastType::C_STYLE>
492492
{
493493
public:
494-
CppCStyleTypecastExpr(std::unique_ptr<const CppVarType> targetType, std::unique_ptr<const CppExpression> expr)
494+
CppCStyleTypecastExpr(std::unique_ptr<CppVarType> targetType, std::unique_ptr<CppExpression> expr)
495495
: CppTypecastExpr(TypecastType(), std::move(targetType), std::move(expr))
496496
{
497497
}
@@ -501,7 +501,7 @@ class CppFunctionStyleTypecastExpr : public CppTypecastExpr,
501501
public CppTypecastExprImplBase<CppTypecastType::FUNCTION_STYLE>
502502
{
503503
public:
504-
CppFunctionStyleTypecastExpr(std::unique_ptr<const CppVarType> targetType, std::unique_ptr<const CppExpression> expr)
504+
CppFunctionStyleTypecastExpr(std::unique_ptr<CppVarType> targetType, std::unique_ptr<CppExpression> expr)
505505
: CppTypecastExpr(TypecastType(), std::move(targetType), std::move(expr))
506506
{
507507
}
@@ -510,7 +510,7 @@ class CppFunctionStyleTypecastExpr : public CppTypecastExpr,
510510
class CppStaticCastExpr : public CppTypecastExpr, public CppTypecastExprImplBase<CppTypecastType::STATIC>
511511
{
512512
public:
513-
CppStaticCastExpr(std::unique_ptr<const CppVarType> targetType, std::unique_ptr<const CppExpression> expr)
513+
CppStaticCastExpr(std::unique_ptr<CppVarType> targetType, std::unique_ptr<CppExpression> expr)
514514
: CppTypecastExpr(TypecastType(), std::move(targetType), std::move(expr))
515515
{
516516
}
@@ -519,7 +519,7 @@ class CppStaticCastExpr : public CppTypecastExpr, public CppTypecastExprImplBase
519519
class CppConstCastExpr : public CppTypecastExpr, public CppTypecastExprImplBase<CppTypecastType::CONST>
520520
{
521521
public:
522-
CppConstCastExpr(std::unique_ptr<const CppVarType> targetType, std::unique_ptr<const CppExpression> expr)
522+
CppConstCastExpr(std::unique_ptr<CppVarType> targetType, std::unique_ptr<CppExpression> expr)
523523
: CppTypecastExpr(TypecastType(), std::move(targetType), std::move(expr))
524524
{
525525
}
@@ -528,7 +528,7 @@ class CppConstCastExpr : public CppTypecastExpr, public CppTypecastExprImplBase<
528528
class CppDynamiCastExpr : public CppTypecastExpr, public CppTypecastExprImplBase<CppTypecastType::DYNAMIC>
529529
{
530530
public:
531-
CppDynamiCastExpr(std::unique_ptr<const CppVarType> targetType, std::unique_ptr<const CppExpression> expr)
531+
CppDynamiCastExpr(std::unique_ptr<CppVarType> targetType, std::unique_ptr<CppExpression> expr)
532532
: CppTypecastExpr(TypecastType(), std::move(targetType), std::move(expr))
533533
{
534534
}
@@ -537,7 +537,7 @@ class CppDynamiCastExpr : public CppTypecastExpr, public CppTypecastExprImplBase
537537
class CppReinterpretCastExpr : public CppTypecastExpr, public CppTypecastExprImplBase<CppTypecastType::REINTERPRET>
538538
{
539539
public:
540-
CppReinterpretCastExpr(std::unique_ptr<const CppVarType> targetType, std::unique_ptr<const CppExpression> expr)
540+
CppReinterpretCastExpr(std::unique_ptr<CppVarType> targetType, std::unique_ptr<CppExpression> expr)
541541
: CppTypecastExpr(TypecastType(), std::move(targetType), std::move(expr))
542542
{
543543
}

0 commit comments

Comments
 (0)