add => Ok(const_int(a + b)),
subtract => Ok(const_int(a - b)),
mul => Ok(const_int(a * b)),
+ div if b == 0 => Err(~"divide by zero"),
div => Ok(const_int(a / b)),
+ rem if b == 0 => Err(~"modulo zero"),
rem => Ok(const_int(a % b)),
and | bitand => Ok(const_int(a & b)),
or | bitor => Ok(const_int(a | b)),
add => Ok(const_uint(a + b)),
subtract => Ok(const_uint(a - b)),
mul => Ok(const_uint(a * b)),
+ div if b == 0 => Err(~"divide by zero"),
div => Ok(const_uint(a / b)),
+ rem if b == 0 => Err(~"modulo zero"),
rem => Ok(const_uint(a % b)),
and | bitand => Ok(const_uint(a & b)),
or | bitor => Ok(const_uint(a | b)),