Parse a leading int/char literal pattern (optional `-`), else None so the caller falls through to identifier-led patterns. Char reuses ascii-byte form.
(&mut self)
| 2053 | match self.peek() { |
| 2054 | Some(Token::RBracket) | None => Err(self.error("expected array size")), |
| 2055 | _ => Ok(ArrayLen::Const(Box::new(self.parse_expression()?))), |
| 2056 | } |
| 2057 | } |
| 2058 | |
| 2059 | fn expect_ident(&mut self) -> Result<String, ParserError> { |
| 2060 | match self.peek() { |
| 2061 | Some(Token::Ident(name)) => { |
| 2062 | let out = (*name).to_owned(); |
| 2063 | self.advance(); |
| 2064 | Ok(out) |
| 2065 | } |
| 2066 | Some(tok) => Err(self.error_with_token("expected identifier", tok)), |
| 2067 | None => Err(self.error("unexpected end of input")), |
| 2068 | } |
| 2069 | } |
| 2070 | |
| 2071 | fn expect_integer(&mut self) -> Result<i64, ParserError> { |
| 2072 | match self.peek() { |
| 2073 | Some(Token::Integer(text)) => { |
| 2074 | let value = strip_separators(text) |
| 2075 | .parse::<i64>() |
| 2076 | .map_err(|_| self.error("invalid integer literal"))?; |
| 2077 | self.advance(); |
| 2078 | Ok(value) |
| 2079 | } |
no test coverage detected