public IntExpression visit(UnaryIntExpression intExpr) {
IntExpression ret = lookup(intExpr);
if (ret!=null) return ret;
final IntExpression child = intExpr.intExpr().accept(this);
ret = (child==intExpr.intExpr()) ? intExpr : child.apply(intExpr.op());
return cache(intExpr,ret);
}
/**
* Calls lookup(intExpr) and returns the cached value, if any.