Foam::token Foam::functionEntries::ifeqEntry::expand ( const dictionary& dict, const string& keyword, const token& t ) { if (keyword[0] == '$') { word varName = keyword(1, keyword.size()-1); // lookup the variable name in the given dictionary const entry* ePtr = dict.lookupScopedEntryPtr ( varName, true, true ); if (ePtr) { return token(ePtr->stream()); } else { // String expansion. Allow unset variables string expanded(keyword); stringOps::inplaceExpand(expanded, dict, true, true); // Re-form as a string token so we can compare to string return token(expanded, t.lineNumber()); } } else if (!t.isString()) { // Re-form as a string token so we can compare to string return token(keyword, t.lineNumber()); } else { return t; } }
Foam::token Foam::functionEntries::ifeqEntry::expand ( const dictionary& dict, const token& t ) { if (t.isWord()) { return expand(dict, t.wordToken(), t); } else if (t.isVariable()) { return expand(dict, t.stringToken(), t); } else if (t.isString()) { return expand(dict, t.stringToken(), t); } else { return t; } }
bool Foam::functionEntries::ifeqEntry::equalToken ( const token& t1, const token& t2 ) { const bool eqType = (t1.type() == t2.type()); switch (t1.type()) { case token::UNDEFINED: return eqType; case token::PUNCTUATION: return (eqType && t1.pToken() == t2.pToken()); case token::WORD: if (eqType) { return t1.wordToken() == t2.wordToken(); } else if (t2.isString()) { return t1.wordToken() == t2.stringToken(); } else { return false; } case token::STRING: case token::VARIABLE: case token::VERBATIMSTRING: if (eqType) { return t1.stringToken() == t2.stringToken(); } else if (t2.isWord()) { return t1.stringToken() == t2.wordToken(); } else { return false; } case token::LABEL: if (eqType) { return t1.labelToken() == t2.labelToken(); } else if (t2.isScalar()) { return t1.labelToken() == t2.scalarToken(); } else { return false; } case token::FLOAT_SCALAR: if (eqType) { return equal(t1.floatScalarToken(), t2.floatScalarToken()); } else if (t2.isScalar()) { return t1.scalarToken() == t2.scalarToken(); } else { return false; } case token::DOUBLE_SCALAR: if (eqType) { return equal(t1.doubleScalarToken(), t2.doubleScalarToken()); } else if (t2.isScalar()) { return t1.scalarToken() == t2.scalarToken(); } else { return false; } case token::LONG_DOUBLE_SCALAR: if (eqType) { return equal ( t1.longDoubleScalarToken(), t2.longDoubleScalarToken() ); } else if (t2.isScalar()) { return t1.scalarToken() == t2.scalarToken(); } else { return false; } case token::COMPOUND: return false; case token::ERROR: return eqType; } return false; }