ENH: no dictionary variable and function expansion when discarding entry

- the 'protect' inputMode is used to supply defaults.
  If an entry already exists, it should act as a no-op without any
  side-effects whatsoever.
This commit is contained in:
Mark Olesen
2017-07-20 10:27:35 +02:00
parent e082be566b
commit f304c7e830
4 changed files with 12 additions and 6 deletions

View File

@ -191,7 +191,7 @@ int main(int argc, char *argv[])
<< endl; << endl;
} }
int oldFlag = entry::disableFunctionEntries; const int oldFlag = entry::disableFunctionEntries;
if (!enableEntries) if (!enableEntries)
{ {
// By default disable dictionary expansion for fields // By default disable dictionary expansion for fields

View File

@ -464,7 +464,7 @@ int main(int argc, char *argv[])
<< endl; << endl;
} }
int oldFlag = entry::disableFunctionEntries; const int oldFlag = entry::disableFunctionEntries;
if (!enableEntries) if (!enableEntries)
{ {
// By default disable dictionary expansion for fields // By default disable dictionary expansion for fields

View File

@ -500,7 +500,7 @@ int main(int argc, char *argv[])
IOobjectList objects(runTime, runTime.timeName()); IOobjectList objects(runTime, runTime.timeName());
int oldFlag = entry::disableFunctionEntries; const int oldFlag = entry::disableFunctionEntries;
if (!enableEntries) if (!enableEntries)
{ {
// By default disable dictionary expansion for fields // By default disable dictionary expansion for fields

View File

@ -283,15 +283,21 @@ bool Foam::entry::New(dictionary& parentDict, Istream& is)
} }
else if (functionEntries::inputModeEntry::protect()) else if (functionEntries::inputModeEntry::protect())
{ {
// read and discard the entry // Read and discard the entry.
// Disable function/variable expansion to avoid side-effects
const int oldFlag = entry::disableFunctionEntries;
entry::disableFunctionEntries = 1;
if (nextToken == token::BEGIN_BLOCK) if (nextToken == token::BEGIN_BLOCK)
{ {
dictionaryEntry dummy(keyword, parentDict, is); dictionaryEntry dummy("dummy", parentDict, is);
} }
else else
{ {
primitiveEntry dummy(keyword, parentDict, is); primitiveEntry dummy("dummy", parentDict, is);
} }
entry::disableFunctionEntries = oldFlag;
return true; return true;
} }
else if (functionEntries::inputModeEntry::error()) else if (functionEntries::inputModeEntry::error())