let n1_i = n1.get_num();
let n2_i = n2.get_num();
+ // FIXME(arithmetic_overflow)
+ // what should this do for too large n2,
+ // - logical right shift should probably turn to 0
+ // - arithmetic right shift should maybe differ for negative numbers
+ //
+ // note: negaitve n2 is already handled above
+ #[allow(arithmetic_overflow)]
if let Ok(n2) = usize::try_from(n2_i) {
Ok(Number::arena_from(n1_i >> n2, arena))
} else {
- Ok(Number::arena_from(n1_i >> usize::max_value(), arena))
+ Ok(Number::arena_from(n1_i >> usize::MAX, arena))
}
}
(Number::Fixnum(n1), Number::Integer(n2)) => {
match result {
Ok(n2) => Ok(Number::arena_from(n1 >> n2, arena)),
- Err(_) => Ok(Number::arena_from(n1 >> usize::max_value(), arena)),
+ Err(_) => Ok(Number::arena_from(n1 >> usize::MAX, arena)),
}
}
(Number::Integer(n1), Number::Fixnum(n2)) => match usize::try_from(n2.get_num()) {
Ok(n2) => Ok(Number::arena_from(Integer::from(&*n1 >> n2), arena)),
- _ => Ok(Number::arena_from(
- Integer::from(&*n1 >> usize::max_value()),
- arena,
- )),
+ _ => Ok(Number::arena_from(Integer::from(&*n1 >> usize::MAX), arena)),
},
(Number::Integer(n1), Number::Integer(n2)) => {
let result: Result<usize, _> = (&*n2).try_into();
match result {
Ok(n2) => Ok(Number::arena_from(Integer::from(&*n1 >> n2), arena)),
- Err(_) => Ok(Number::arena_from(
- Integer::from(&*n1 >> usize::max_value()),
- arena,
- )),
+ Err(_) => Ok(Number::arena_from(Integer::from(&*n1 >> usize::MAX), arena)),
}
}
(Number::Integer(_), n2) => Err(numerical_type_error(ValidType::Integer, n2, stub_gen)),
Ok(Number::arena_from(n1_i << n2, arena))
} else {
let n1 = Integer::from(n1_i);
- Ok(Number::arena_from(n1 << usize::max_value(), arena))
+ Ok(Number::arena_from(n1 << usize::MAX, arena))
}
}
(Number::Fixnum(n1), Number::Integer(n2)) => {
match (&*n2).try_into() as Result<usize, _> {
Ok(n2) => Ok(Number::arena_from(n1 << n2, arena)),
- _ => Ok(Number::arena_from(n1 << usize::max_value(), arena)),
+ _ => Ok(Number::arena_from(n1 << usize::MAX, arena)),
}
}
(Number::Integer(n1), Number::Fixnum(n2)) => match usize::try_from(n2.get_num()) {
Ok(n2) => Ok(Number::arena_from(Integer::from(&*n1 << n2), arena)),
- _ => Ok(Number::arena_from(
- Integer::from(&*n1 << usize::max_value()),
- arena,
- )),
+ _ => Ok(Number::arena_from(Integer::from(&*n1 << usize::MAX), arena)),
},
(Number::Integer(n1), Number::Integer(n2)) => match (&*n2).try_into() as Result<usize, _> {
Ok(n2) => Ok(Number::arena_from(Integer::from(&*n1 << n2), arena)),
- _ => Ok(Number::arena_from(
- Integer::from(&*n1 << usize::max_value()),
- arena,
- )),
+ _ => Ok(Number::arena_from(Integer::from(&*n1 << usize::MAX), arena)),
},
(Number::Integer(_), n2) => Err(numerical_type_error(ValidType::Integer, n2, stub_gen)),
(Number::Fixnum(_), n2) => Err(numerical_type_error(ValidType::Integer, n2, stub_gen)),