Parse a signed literal integer.
(&mut self)
| 6950 | |
| 6951 | /// Parse a signed literal integer. |
| 6952 | fn parse_literal_int(&mut self) -> Result<i64, ParserError> { |
| 6953 | let negative = self.consume_token(&Token::Op("-".into())); |
| 6954 | match self.next_token() { |
| 6955 | Some(Token::Number(s)) => { |
| 6956 | let n = s.parse::<i64>().map_err(|e| { |
| 6957 | self.error( |
| 6958 | self.peek_prev_pos(), |
| 6959 | format!("Could not parse '{}' as i64: {}", s, e), |
| 6960 | ) |
| 6961 | })?; |
| 6962 | if negative { |
| 6963 | n.checked_neg().ok_or_else(|| { |
| 6964 | self.error( |
| 6965 | self.peek_prev_pos(), |
| 6966 | format!("Could not parse '{}' as i64: overflows i64", s), |
| 6967 | ) |
| 6968 | }) |
| 6969 | } else { |
| 6970 | Ok(n) |
| 6971 | } |
| 6972 | } |
| 6973 | other => self.expected(self.peek_prev_pos(), "literal integer", other), |
| 6974 | } |
| 6975 | } |
| 6976 | |
| 6977 | /// Parse an unsigned literal integer. |
| 6978 | fn parse_literal_uint(&mut self) -> Result<u64, ParserError> { |
no test coverage detected