@Override
protected TypedResult eval() throws CompilerException
{
if (this.mayFold) {
final TypedResult val = evaluateArgument( 0 );
letDict().let( this.varName, null, val );
try {
final TypedResult result = evaluateArgument( 1 );
if (result.isConstant()) {
return result;
}
return evaluateToNode( val, result );
}
finally {
letDict().unlet( this.varName );
}
}
else {
letDict().let( this.varName, null, EvalLetVar.UNDEF );
try {
final TypedResult result = evaluateArgument( 1 );
if (result.isConstant()) {
return result;
}
final TypedResult val = evaluateArgument( 0 );
return evaluateToNode( val, result );
}
finally {
letDict().unlet( this.varName );
}