const IRTree::IStm* CConditionalWrapper::ToStm() const { Temp::CLabel* tempLabel = new Temp::CLabel(); IRTree::CLabel* irLabel = new IRTree::CLabel( tempLabel ); const IRTree::IStm* cond = ToConditional( tempLabel, tempLabel ); const IRTree::CSeq* seq = new IRTree::CSeq( cond, irLabel ); return seq; }
IIRStm* CConditionalWrapper::ToStm() const { CLabel* tempLabel = new CLabel(); CIRLabel* irLabel = new CIRLabel( tempLabel ); IIRStm* cond = ToConditional( tempLabel, tempLabel ); CIRSeq* seq = new CIRSeq( cond, irLabel ); return seq; }
const IRTree::IExp* CConditionalWrapper::ToExp() const { Temp::CTemp* temp = new Temp::CTemp(); IRTree::CTemp* irTemp = new IRTree::CTemp( *temp ); IRTree::CMove* moveTrue = new IRTree::CMove( irTemp, new IRTree::CConst( 1 ) ); IRTree::CMove* moveFalse = new IRTree::CMove( irTemp, new IRTree::CConst( 0 ) ); Temp::CLabel* trueLabel = new Temp::CLabel(); Temp::CLabel* falseLabel = new Temp::CLabel(); IRTree::CLabel* trueIRLabel = new IRTree::CLabel( trueLabel ); IRTree::CLabel* falseIRLabel = new IRTree::CLabel( falseLabel ); IRTree::CSeq* seqTrue = new IRTree::CSeq( trueIRLabel, moveTrue ); IRTree::CSeq* seqFalse = new IRTree::CSeq( falseIRLabel, moveFalse ); const IRTree::IStm* cond = ToConditional( trueLabel, falseLabel ); IRTree::CEseq* eseq = new IRTree::CEseq( cond, irTemp ); return eseq; }
IIRExp* CConditionalWrapper::ToExp() const { CTemp* temp = new CTemp(); CIRTemp* irTemp = new CIRTemp( temp ); CIRMove* moveTrue = new CIRMove( irTemp, new CIRConst( 1 ) ); CIRMove* moveFalse = new CIRMove( irTemp, new CIRConst( 0 ) ); CLabel* trueLabel = new CLabel(); CLabel* falseLabel = new CLabel(); CIRLabel* trueIRLabel = new CIRLabel( trueLabel ); CIRLabel* falseIRLabel = new CIRLabel( falseLabel ); CIRSeq* seqTrue = new CIRSeq( trueIRLabel, moveTrue ); CIRSeq* seqFalse = new CIRSeq( falseIRLabel, moveFalse ); IIRStm* cond = ToConditional( trueLabel, falseLabel ); CIRESeq* eseq = new CIRESeq( cond, irTemp ); return eseq; }