#include "visitor.hh"
#include "range_checking.hh"
using namespace ast;

namespace range_checking {
    class RangeCheckVisitor : public Visitor {
    public:
	virtual void visit (RExpr &rexpr);
    };
};
using namespace range_checking;

void
RangeCheckVisitor::visit (RExpr &rexpr)
{
    if (rexpr.begin_br()->is_less() && rexpr.end_br()->is_less())
	return;
    if (rexpr.begin_br()->is_greater() && rexpr.end_br()->is_greater())
	return;

    throw new RangeError(rexpr);
}

void
RangeError::print_error_msg (std::ostream &os)
{
    os << "Invalid range expression." << std::endl;
}

void
range_checking::check(DProg *dprog)
{
    RangeCheckVisitor rcheck;
    dprog->accept_top_down(rcheck);
}


syntax highlighted by Code2HTML, v. 0.9.1