Skip to content

Commit 3db05cf

Browse files
Pass settings to isVariableChanged() (#4871)
1 parent 49c5a5a commit 3db05cf

File tree

1 file changed

+8
-26
lines changed

1 file changed

+8
-26
lines changed

lib/programmemory.cpp

Lines changed: 8 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,7 @@ static void fillProgramMemoryFromConditions(ProgramMemory& pm, const Token* tok,
334334
fillProgramMemoryFromConditions(pm, tok->scope(), tok, settings);
335335
}
336336

337-
static void fillProgramMemoryFromAssignments(ProgramMemory& pm, const Token* tok, const ProgramMemory& state, const ProgramMemory::Map& vars)
337+
static void fillProgramMemoryFromAssignments(ProgramMemory& pm, const Token* tok, const Settings* settings, const ProgramMemory& state, const ProgramMemory::Map& vars)
338338
{
339339
int indentlevel = 0;
340340
for (const Token *tok2 = tok; tok2; tok2 = tok2->previous()) {
@@ -357,7 +357,7 @@ static void fillProgramMemoryFromAssignments(ProgramMemory& pm, const Token* tok
357357
}
358358
}
359359
} else if (tok2->exprId() > 0 && Token::Match(tok2, ".|(|[|*|%var%") && !pm.hasValue(tok2->exprId()) &&
360-
isVariableChanged(tok2, 0, nullptr, true)) {
360+
isVariableChanged(tok2, 0, settings, true)) {
361361
pm.setUnknown(tok2);
362362
}
363363

@@ -403,13 +403,14 @@ static void removeModifiedVars(ProgramMemory& pm, const Token* tok, const Token*
403403

404404
static ProgramMemory getInitialProgramState(const Token* tok,
405405
const Token* origin,
406+
const Settings* settings,
406407
const ProgramMemory::Map& vars = ProgramMemory::Map {})
407408
{
408409
ProgramMemory pm;
409410
if (origin) {
410411
fillProgramMemoryFromConditions(pm, origin, nullptr);
411412
const ProgramMemory state = pm;
412-
fillProgramMemoryFromAssignments(pm, tok, state, vars);
413+
fillProgramMemoryFromAssignments(pm, tok, settings, state, vars);
413414
removeModifiedVars(pm, tok, origin);
414415
}
415416
return pm;
@@ -447,7 +448,7 @@ void ProgramMemoryState::addState(const Token* tok, const ProgramMemory::Map& va
447448
addVars(pm, vars);
448449
fillProgramMemoryFromConditions(pm, tok, settings);
449450
ProgramMemory local = pm;
450-
fillProgramMemoryFromAssignments(pm, tok, local, vars);
451+
fillProgramMemoryFromAssignments(pm, tok, settings, local, vars);
451452
addVars(pm, vars);
452453
replace(pm, tok);
453454
}
@@ -501,34 +502,15 @@ ProgramMemory ProgramMemoryState::get(const Token* tok, const Token* ctx, const
501502
return local.state;
502503
}
503504

504-
ProgramMemory getProgramMemory(const Token *tok, const ProgramMemory::Map& vars)
505-
{
506-
ProgramMemory programMemory;
507-
for (const auto& p:vars) {
508-
const ValueFlow::Value &value = p.second;
509-
programMemory.replace(getInitialProgramState(tok, value.tokvalue));
510-
programMemory.replace(getInitialProgramState(tok, value.condition));
511-
}
512-
fillProgramMemoryFromConditions(programMemory, tok, nullptr);
513-
ProgramMemory state;
514-
for (const auto& p:vars) {
515-
const ValueFlow::Value &value = p.second;
516-
programMemory.setValue(p.first.tok, value);
517-
}
518-
state = programMemory;
519-
fillProgramMemoryFromAssignments(programMemory, tok, state, vars);
520-
return programMemory;
521-
}
522-
523505
ProgramMemory getProgramMemory(const Token* tok, const Token* expr, const ValueFlow::Value& value, const Settings* settings)
524506
{
525507
ProgramMemory programMemory;
526-
programMemory.replace(getInitialProgramState(tok, value.tokvalue));
527-
programMemory.replace(getInitialProgramState(tok, value.condition));
508+
programMemory.replace(getInitialProgramState(tok, value.tokvalue, settings));
509+
programMemory.replace(getInitialProgramState(tok, value.condition, settings));
528510
fillProgramMemoryFromConditions(programMemory, tok, settings);
529511
programMemory.setValue(expr, value);
530512
const ProgramMemory state = programMemory;
531-
fillProgramMemoryFromAssignments(programMemory, tok, state, {{expr, value}});
513+
fillProgramMemoryFromAssignments(programMemory, tok, settings, state, {{expr, value}});
532514
return programMemory;
533515
}
534516

0 commit comments

Comments
 (0)