// To allow subclassing this class, we use a singleton pattern
// and theses protected methods.
protected Op transformation(Transform transform, Op op, OpVisitor beforeVisitor, OpVisitor afterVisitor)
{
ExprTransform exprTransform = new ExprTransformApplyTransform(transform, beforeVisitor, afterVisitor) ;
ApplyTransformVisitor v = new ApplyTransformVisitor(transform, exprTransform) ;
return transformation(v, op, beforeVisitor, afterVisitor) ;
}