const IRTree::IStm* CConditionalWrapper::andBinopToConditional( const IRTree::CBinop* binop, const Temp::CLabel* t, const Temp::CLabel* f ) const
{
	Temp::CLabel* firstTrueLabel = new Temp::CLabel();
	IRTree::CLabel* firstTrueIRLabel = new IRTree::CLabel( firstTrueLabel );

	
	CConditionalWrapper leftWrapper( binop->left );
	CConditionalWrapper rightWrapper( binop->right );

	return new IRTree::CSeq( leftWrapper.ToConditional(firstTrueLabel, f), firstTrueIRLabel, rightWrapper.ToConditional( t, f ) );
}
IIRStm* CConditionalWrapper::andBinopToConditional( const CIRBinOp* binop, CLabel* t, CLabel* f ) const
{
    CLabel* firstTrueLabel = new CLabel();
    CIRLabel* firstTrueIRLabel = new CIRLabel( firstTrueLabel );

    // –екурсивно смотрим аргументы
    CConditionalWrapper leftWrapper( binop->left );
    CConditionalWrapper rightWrapper( binop->right );

    return new CIRSeq( new CIRSeq( leftWrapper.ToConditional( firstTrueLabel, f ), firstTrueIRLabel), rightWrapper.ToConditional( t, f ) );
}