public Expression getExpandedExp(ExpressionPool pool) {
if (expandedExp == null) {
// this part of the code may be called by the multiple threads
// even if that happens, there is no consistency problem
// because two thread will compute the same value.
expandedExp = this.visit(new RefExpRemover(pool, false));
}
return expandedExp;
}