refactor special handling in evalf_(add, mul)