#include "AlternativePrinter.h"
#include "AlternativeFinder.h"
#include "Alternative.h"
#include "SynTree/Statement.h"
#include "SynTree/Type.h"
#include "SynTree/Expression.h"
#include "utility.h"

namespace ResolvExpr {
    AlternativePrinter::AlternativePrinter( std::ostream &os ) : SymTab::Indexer( false ), os( os ) {}

    void AlternativePrinter::visit( ExprStmt *exprStmt ) {
	TypeEnvironment env;
	AlternativeFinder finder( *this, env );
	finder.findWithAdjustment( exprStmt->get_expr() );
	int count = 1;
	os << "There are " << finder.get_alternatives().size() << " alternatives" << std::endl;
	for ( AltList::const_iterator i = finder.get_alternatives().begin(); i != finder.get_alternatives().end(); ++i ) {
	    os << "Alternative " << count++ << " ==============" << std::endl;
	    printAll( i->expr->get_results(), os );
	    //    i->print( os );
	    os << std::endl;
	} // for
    } // AlternativePrinter::visit
} // namespace ResolvExpr
