int
yasm::SubstDist(Expr& e, Diagnostic& diags,
                const TR1::function<void (unsigned int subst,
                                          Location loc,
                                          Location loc2)>& func)
{
    SubstDistFunctor functor(func);
    e.Simplify(diags, TR1::bind(&TransformDistBase, _1, _2, functor));
    return functor.m_subst;
}
void
yasm::SimplifyCalcDistNoBC(Expr& e, Diagnostic& diags)
{
    CalcDistNoBCFunctor functor;
    e.Simplify(diags, TR1::bind(&TransformDistBase, _1, _2, functor));
}