Recognize a scalar or vector type.
(text: &str, prefix: &str, number: u32)
| 367 | |
| 368 | // Recognize a scalar or vector type. |
| 369 | fn value_type(text: &str, prefix: &str, number: u32) -> Option<Token<'a>> { |
| 370 | let is_vector = prefix.ends_with('x'); |
| 371 | let scalar = if is_vector { |
| 372 | &prefix[0..prefix.len() - 1] |
| 373 | } else { |
| 374 | text |
| 375 | }; |
| 376 | let base_type = match scalar { |
| 377 | "i8" => types::I8, |
| 378 | "i16" => types::I16, |
| 379 | "i32" => types::I32, |
| 380 | "i64" => types::I64, |
| 381 | "i128" => types::I128, |
| 382 | "f16" => types::F16, |
| 383 | "f32" => types::F32, |
| 384 | "f64" => types::F64, |
| 385 | "f128" => types::F128, |
| 386 | _ => return None, |
| 387 | }; |
| 388 | if is_vector { |
| 389 | if number <= u32::from(u16::MAX) { |
| 390 | base_type.by(number).map(Token::Type) |
| 391 | } else { |
| 392 | None |
| 393 | } |
| 394 | } else { |
| 395 | Some(Token::Type(base_type)) |
| 396 | } |
| 397 | } |
| 398 | |
| 399 | fn scan_name(&mut self) -> Result<LocatedToken<'a>, LocatedError> { |
| 400 | let loc = self.loc(); |