std::string IfExpr::toString() { std::string ret = "if ("; if (getCond() != NULL) ret += getCond()->toString(); ret += ") then "; if (getThen() != NULL) ret += getThen()->toString(); if (getElse() != NULL) { ret += " else " + getElse()->toString(); } return ret; }
// For Debugging Use void IfExpr::print(FILE* file, int indent) { fprintf(file, "%*s(IfExpr:\n", indent, ""); if (getCond() != NULL) { fprintf(file, "%*s:cond\n", indent + 2, ""); getCond()->print(file, indent + 4); } if (getThen() != NULL) { fprintf(file, "%*s:then\n", indent + 2, ""); getThen()->print(file, indent + 4); } if (getElse() != NULL) { fprintf(file, "%*s:else\n", indent + 2, ""); getElse()->print(file, indent + 4); } fprintf(file, "%*s)\n", indent, ""); }
VExprConditionalStatementHandle VExprConditionalStatement::substitute(VExprExpressionHandle pDst, const HashTable<VExprExpressionHandle> & hashSrc) const { VExprExpressionHandle pNewIf = getIf()->substitute(pDst, hashSrc); VExprStatementOrNullHandle pNewThen = getThen()->substitute(pDst, hashSrc); if (getElse().valid()) { VExprStatementOrNullHandle pNewElse = getElse()->substitute(pDst, hashSrc); return VExprConditionalStatementHandle(VExprConditionalStatement(pNewIf, pNewThen, pNewElse)); } else { return VExprConditionalStatementHandle(VExprConditionalStatement(pNewIf, pNewThen)); } assert(0); }
VExprConditionalStatementHandle VExprConditionalStatement::flatten(VExprIdentifierHandle pInstName) const { VExprExpressionHandle pFlatIf = getIf()->flatten(pInstName); VExprStatementOrNullHandle pFlatThen = getThen()->flatten(pInstName); if (getElse().valid()) { VExprStatementOrNullHandle pFlatElse = getElse()->flatten(pInstName); return VExprConditionalStatementHandle(VExprConditionalStatement(pFlatIf, pFlatThen, pFlatElse)); } else { return VExprConditionalStatementHandle(VExprConditionalStatement(pFlatIf, pFlatThen)); } assert(0); }
std::string VExprConditionalStatement::getString(unsigned int indentLevel) const { std::string s = indent(indentLevel) + "if (" + getIf()->getString() + ") begin\n" + getThen()->getString(indentLevel+1); if (getElse().valid() && getElse()->getStatementHandle().valid()) { s = s + indent(indentLevel) + "end\n" + indent(indentLevel) + "else begin\n" + getElse()->getString(indentLevel+1); } // if (indentLevel != 0) // s += indent(1); // s += "}\n"; s = s + indent(indentLevel) + "end\n"; return s; }