final RubyRange.LongFixnumRange range = super.executeLongFixnumRange(frame);
if (canLower(range)) {
return lower(range);
} else {
throw new UnexpectedResultException(range);
}
} else {
return super.executeIntegerFixnumRange(frame);
}
} catch (UnexpectedResultException e) {
if (e.getResult() instanceof Long && canLower((long) e.getResult())) {
hasNeededToLowerLongFixnum = true;
throw new UnexpectedResultException(lower((long) e.getResult()));
} else if (e.getResult() instanceof RubyRange.LongFixnumRange && canLower((RubyRange.LongFixnumRange) e.getResult())) {
hasNeededToLowerLongFixnumRange = true;
return lower((RubyRange.LongFixnumRange) e.getResult());
} else {
throw e;