@@ -61,7 +61,7 @@ static constexpr int AST_MAX_DEPTH = 150;
61
61
62
62
63
63
TokenList::TokenList (const Settings* settings)
64
- : mTokensFrontBack()
64
+ : mTokensFrontBack(new TokensFrontBack )
65
65
, mSettings(settings)
66
66
{
67
67
if (mSettings && (mSettings ->enforcedLang != Standards::Language::None)) {
@@ -90,9 +90,11 @@ const std::string& TokenList::getSourceFilePath() const
90
90
// Deallocate lists..
91
91
void TokenList::deallocateTokens ()
92
92
{
93
- deleteTokens (mTokensFrontBack .front );
94
- mTokensFrontBack .front = nullptr ;
95
- mTokensFrontBack .back = nullptr ;
93
+ if (mTokensFrontBack ) {
94
+ deleteTokens (mTokensFrontBack ->front );
95
+ mTokensFrontBack ->front = nullptr ;
96
+ mTokensFrontBack ->back = nullptr ;
97
+ }
96
98
mFiles .clear ();
97
99
}
98
100
@@ -171,100 +173,100 @@ void TokenList::addtoken(const std::string& str, const nonneg int lineno, const
171
173
}
172
174
}
173
175
174
- if (mTokensFrontBack . back ) {
175
- mTokensFrontBack . back ->insertToken (str);
176
+ if (mTokensFrontBack -> back ) {
177
+ mTokensFrontBack -> back ->insertToken (str);
176
178
} else {
177
- mTokensFrontBack . front = new Token (*this , mTokensFrontBack );
178
- mTokensFrontBack . back = mTokensFrontBack . front ;
179
- mTokensFrontBack . back ->str (str);
179
+ mTokensFrontBack -> front = new Token (*this , mTokensFrontBack );
180
+ mTokensFrontBack -> back = mTokensFrontBack -> front ;
181
+ mTokensFrontBack -> back ->str (str);
180
182
}
181
183
182
- mTokensFrontBack . back ->linenr (lineno);
183
- mTokensFrontBack . back ->column (column);
184
- mTokensFrontBack . back ->fileIndex (fileno );
184
+ mTokensFrontBack -> back ->linenr (lineno);
185
+ mTokensFrontBack -> back ->column (column);
186
+ mTokensFrontBack -> back ->fileIndex (fileno );
185
187
}
186
188
187
189
void TokenList::addtoken (const std::string& str, const Token *locationTok)
188
190
{
189
191
if (str.empty ())
190
192
return ;
191
193
192
- if (mTokensFrontBack . back ) {
193
- mTokensFrontBack . back ->insertToken (str);
194
+ if (mTokensFrontBack -> back ) {
195
+ mTokensFrontBack -> back ->insertToken (str);
194
196
} else {
195
- mTokensFrontBack . front = new Token (*this , mTokensFrontBack );
196
- mTokensFrontBack . back = mTokensFrontBack . front ;
197
- mTokensFrontBack . back ->str (str);
197
+ mTokensFrontBack -> front = new Token (*this , mTokensFrontBack );
198
+ mTokensFrontBack -> back = mTokensFrontBack -> front ;
199
+ mTokensFrontBack -> back ->str (str);
198
200
}
199
201
200
- mTokensFrontBack . back ->linenr (locationTok->linenr ());
201
- mTokensFrontBack . back ->column (locationTok->column ());
202
- mTokensFrontBack . back ->fileIndex (locationTok->fileIndex ());
202
+ mTokensFrontBack -> back ->linenr (locationTok->linenr ());
203
+ mTokensFrontBack -> back ->column (locationTok->column ());
204
+ mTokensFrontBack -> back ->fileIndex (locationTok->fileIndex ());
203
205
}
204
206
205
207
void TokenList::addtoken (const Token * tok, const nonneg int lineno, const nonneg int column, const nonneg int fileno)
206
208
{
207
209
if (tok == nullptr )
208
210
return ;
209
211
210
- if (mTokensFrontBack . back ) {
211
- mTokensFrontBack . back ->insertToken (tok->str (), tok->originalName ());
212
+ if (mTokensFrontBack -> back ) {
213
+ mTokensFrontBack -> back ->insertToken (tok->str (), tok->originalName ());
212
214
} else {
213
- mTokensFrontBack . front = new Token (*this , mTokensFrontBack );
214
- mTokensFrontBack . back = mTokensFrontBack . front ;
215
- mTokensFrontBack . back ->str (tok->str ());
215
+ mTokensFrontBack -> front = new Token (*this , mTokensFrontBack );
216
+ mTokensFrontBack -> back = mTokensFrontBack -> front ;
217
+ mTokensFrontBack -> back ->str (tok->str ());
216
218
if (!tok->originalName ().empty ())
217
- mTokensFrontBack . back ->originalName (tok->originalName ());
219
+ mTokensFrontBack -> back ->originalName (tok->originalName ());
218
220
}
219
221
220
- mTokensFrontBack . back ->linenr (lineno);
221
- mTokensFrontBack . back ->column (column);
222
- mTokensFrontBack . back ->fileIndex (fileno );
223
- mTokensFrontBack . back ->flags (tok->flags ());
222
+ mTokensFrontBack -> back ->linenr (lineno);
223
+ mTokensFrontBack -> back ->column (column);
224
+ mTokensFrontBack -> back ->fileIndex (fileno );
225
+ mTokensFrontBack -> back ->flags (tok->flags ());
224
226
}
225
227
226
228
void TokenList::addtoken (const Token *tok, const Token *locationTok)
227
229
{
228
230
if (tok == nullptr || locationTok == nullptr )
229
231
return ;
230
232
231
- if (mTokensFrontBack . back ) {
232
- mTokensFrontBack . back ->insertToken (tok->str (), tok->originalName ());
233
+ if (mTokensFrontBack -> back ) {
234
+ mTokensFrontBack -> back ->insertToken (tok->str (), tok->originalName ());
233
235
} else {
234
- mTokensFrontBack . front = new Token (*this , mTokensFrontBack );
235
- mTokensFrontBack . back = mTokensFrontBack . front ;
236
- mTokensFrontBack . back ->str (tok->str ());
236
+ mTokensFrontBack -> front = new Token (*this , mTokensFrontBack );
237
+ mTokensFrontBack -> back = mTokensFrontBack -> front ;
238
+ mTokensFrontBack -> back ->str (tok->str ());
237
239
if (!tok->originalName ().empty ())
238
- mTokensFrontBack . back ->originalName (tok->originalName ());
240
+ mTokensFrontBack -> back ->originalName (tok->originalName ());
239
241
}
240
242
241
- mTokensFrontBack . back ->flags (tok->flags ());
242
- mTokensFrontBack . back ->linenr (locationTok->linenr ());
243
- mTokensFrontBack . back ->column (locationTok->column ());
244
- mTokensFrontBack . back ->fileIndex (locationTok->fileIndex ());
243
+ mTokensFrontBack -> back ->flags (tok->flags ());
244
+ mTokensFrontBack -> back ->linenr (locationTok->linenr ());
245
+ mTokensFrontBack -> back ->column (locationTok->column ());
246
+ mTokensFrontBack -> back ->fileIndex (locationTok->fileIndex ());
245
247
}
246
248
247
249
void TokenList::addtoken (const Token *tok)
248
250
{
249
251
if (tok == nullptr )
250
252
return ;
251
253
252
- if (mTokensFrontBack . back ) {
253
- mTokensFrontBack . back ->insertToken (tok->str (), tok->originalName (), tok->getMacroName ());
254
+ if (mTokensFrontBack -> back ) {
255
+ mTokensFrontBack -> back ->insertToken (tok->str (), tok->originalName (), tok->getMacroName ());
254
256
} else {
255
- mTokensFrontBack . front = new Token (*this , mTokensFrontBack );
256
- mTokensFrontBack . back = mTokensFrontBack . front ;
257
- mTokensFrontBack . back ->str (tok->str ());
257
+ mTokensFrontBack -> front = new Token (*this , mTokensFrontBack );
258
+ mTokensFrontBack -> back = mTokensFrontBack -> front ;
259
+ mTokensFrontBack -> back ->str (tok->str ());
258
260
if (!tok->originalName ().empty ())
259
- mTokensFrontBack . back ->originalName (tok->originalName ());
261
+ mTokensFrontBack -> back ->originalName (tok->originalName ());
260
262
if (!tok->getMacroName ().empty ())
261
- mTokensFrontBack . back ->setMacroName (tok->getMacroName ());
263
+ mTokensFrontBack -> back ->setMacroName (tok->getMacroName ());
262
264
}
263
265
264
- mTokensFrontBack . back ->flags (tok->flags ());
265
- mTokensFrontBack . back ->linenr (tok->linenr ());
266
- mTokensFrontBack . back ->column (tok->column ());
267
- mTokensFrontBack . back ->fileIndex (tok->fileIndex ());
266
+ mTokensFrontBack -> back ->flags (tok->flags ());
267
+ mTokensFrontBack -> back ->linenr (tok->linenr ());
268
+ mTokensFrontBack -> back ->column (tok->column ());
269
+ mTokensFrontBack -> back ->fileIndex (tok->fileIndex ());
268
270
}
269
271
270
272
@@ -395,19 +397,19 @@ void TokenList::createTokens(simplecpp::TokenList&& tokenList)
395
397
if (str.size () > 1 && str[0 ] == ' .' && std::isdigit (str[1 ]))
396
398
str = ' 0' + str;
397
399
398
- if (mTokensFrontBack . back ) {
399
- mTokensFrontBack . back ->insertToken (str);
400
+ if (mTokensFrontBack -> back ) {
401
+ mTokensFrontBack -> back ->insertToken (str);
400
402
} else {
401
- mTokensFrontBack . front = new Token (*this , mTokensFrontBack );
402
- mTokensFrontBack . back = mTokensFrontBack . front ;
403
- mTokensFrontBack . back ->str (str);
403
+ mTokensFrontBack -> front = new Token (*this , mTokensFrontBack );
404
+ mTokensFrontBack -> back = mTokensFrontBack -> front ;
405
+ mTokensFrontBack -> back ->str (str);
404
406
}
405
407
406
- mTokensFrontBack . back ->fileIndex (tok->location .fileIndex );
407
- mTokensFrontBack . back ->linenr (tok->location .line );
408
- mTokensFrontBack . back ->column (tok->location .col );
408
+ mTokensFrontBack -> back ->fileIndex (tok->location .fileIndex );
409
+ mTokensFrontBack -> back ->linenr (tok->location .line );
410
+ mTokensFrontBack -> back ->column (tok->location .col );
409
411
if (!tok->macro .empty ())
410
- mTokensFrontBack . back ->setMacroName (tok->macro );
412
+ mTokensFrontBack -> back ->setMacroName (tok->macro );
411
413
412
414
tok = tok->next ;
413
415
if (tok)
@@ -419,7 +421,7 @@ void TokenList::createTokens(simplecpp::TokenList&& tokenList)
419
421
mFile = Path::getRelativePath (mFile , mSettings ->basePaths );
420
422
}
421
423
422
- Token::assignProgressValues (mTokensFrontBack . front );
424
+ Token::assignProgressValues (mTokensFrontBack -> front );
423
425
}
424
426
425
427
// ---------------------------------------------------------------------------
@@ -1849,7 +1851,7 @@ static Token * createAstAtToken(Token *tok)
1849
1851
1850
1852
void TokenList::createAst () const
1851
1853
{
1852
- for (Token *tok = mTokensFrontBack . front ; tok; tok = tok ? tok->next () : nullptr ) {
1854
+ for (Token *tok = mTokensFrontBack -> front ; tok; tok = tok ? tok->next () : nullptr ) {
1853
1855
Token* const nextTok = createAstAtToken (tok);
1854
1856
if (precedes (nextTok, tok))
1855
1857
throw InternalError (tok, " Syntax Error: Infinite loop when creating AST." , InternalError::AST);
@@ -1874,11 +1876,11 @@ void TokenList::validateAst(bool print) const
1874
1876
{
1875
1877
OnException oe{[&] {
1876
1878
if (print)
1877
- mTokensFrontBack . front ->printOut (std::cout);
1879
+ mTokensFrontBack -> front ->printOut (std::cout);
1878
1880
}};
1879
1881
// Check for some known issues in AST to avoid crash/hang later on
1880
1882
std::set<const Token*> safeAstTokens; // list of "safe" AST tokens without endless recursion
1881
- for (const Token *tok = mTokensFrontBack . front ; tok; tok = tok->next ()) {
1883
+ for (const Token *tok = mTokensFrontBack -> front ; tok; tok = tok->next ()) {
1882
1884
// Syntax error if binary operator only has 1 operand
1883
1885
if ((tok->isAssignmentOp () || tok->isComparisonOp () || Token::Match (tok," [|^/%]" )) && tok->astOperand1 () && !tok->astOperand2 ())
1884
1886
throw InternalError (tok, " Syntax Error: AST broken, binary operator has only one operand." , InternalError::AST);
@@ -2003,7 +2005,7 @@ bool TokenList::validateToken(const Token* tok) const
2003
2005
{
2004
2006
if (!tok)
2005
2007
return true ;
2006
- for (const Token *t = mTokensFrontBack . front ; t; t = t->next ()) {
2008
+ for (const Token *t = mTokensFrontBack -> front ; t; t = t->next ()) {
2007
2009
if (tok==t)
2008
2010
return true ;
2009
2011
}
0 commit comments