(&mut self)
| 216 | } |
| 217 | |
| 218 | fn parse_dim(&mut self) -> Result<ArrayDimAst> { |
| 219 | let name = self.expect_ident()?; |
| 220 | let type_name = self.expect_ident()?; |
| 221 | let dtype = parse_dim_type(&type_name) |
| 222 | .ok_or_else(|| self.err(format!("unknown dim type `{type_name}`")))?; |
| 223 | // Domain bounds [lo..hi] are optional — omitting them defaults to the |
| 224 | // full representable range for the dim type. |
| 225 | let (lo, hi) = if self.match_token(&Tok::LBracket) { |
| 226 | let lo = self.parse_domain_bound(dtype)?; |
| 227 | self.expect(&Tok::DotDot)?; |
| 228 | let hi = self.parse_domain_bound(dtype)?; |
| 229 | self.expect(&Tok::RBracket)?; |
| 230 | (lo, hi) |
| 231 | } else { |
| 232 | let (lo, hi) = default_domain_bounds(dtype); |
| 233 | (lo, hi) |
| 234 | }; |
| 235 | Ok(ArrayDimAst { |
| 236 | name, |
| 237 | dtype, |
| 238 | lo, |
| 239 | hi, |
| 240 | }) |
| 241 | } |
| 242 | |
| 243 | fn parse_domain_bound(&mut self, dtype: ArrayDimType) -> Result<ArrayDomainBound> { |
| 244 | match dtype { |
no test coverage detected