Routes by (length, first byte) to skip most memcmps. */
(s: &[u8])
| 58 | |
| 59 | /* Routes by (length, first byte) to skip most memcmps. */ |
| 60 | pub fn keyword(s: &[u8]) -> Option<TokenType> { |
| 61 | match (s.len(), s[0]) { |
| 62 | (1, b'_') => Some(TokenType::Underscore), |
| 63 | |
| 64 | (2, b'a') => if s[1] == b's' { Some(TokenType::As) } else { None }, |
| 65 | (2, b'i') => match s[1] { |
| 66 | b'f' => Some(TokenType::If), |
| 67 | b'n' => Some(TokenType::In), |
| 68 | b's' => Some(TokenType::Is), |
| 69 | _ => None, |
| 70 | }, |
| 71 | (2, b'o') => if s[1] == b'r' { Some(TokenType::Or) } else { None }, |
| 72 | |
| 73 | (3, b'a') => if s[1] == b'n' && s[2] == b'd' { Some(TokenType::And) } else { None }, |
| 74 | (3, b'd') => if s[1] == b'e' { |
| 75 | match s[2] { b'f' => Some(TokenType::Def), b'l' => Some(TokenType::Del), _ => None } |
| 76 | } else { None }, |
| 77 | (3, b'f') => if s[1] == b'o' && s[2] == b'r' { Some(TokenType::For) } else { None }, |
| 78 | (3, b'n') => if s[1] == b'o' && s[2] == b't' { Some(TokenType::Not) } else { None }, |
| 79 | (3, b't') => if s[1] == b'r' && s[2] == b'y' { Some(TokenType::Try) } else { None }, |
| 80 | |
| 81 | (4, b'c') => if s == b"case" { Some(TokenType::Case) } else { None }, |
| 82 | (4, b'e') => match s[2] { |
| 83 | b'i' => if s == b"elif" { Some(TokenType::Elif) } else { None }, |
| 84 | b's' => if s == b"else" { Some(TokenType::Else) } else { None }, |
| 85 | _ => None, |
| 86 | }, |
| 87 | (4, b'f') => if s == b"from" { Some(TokenType::From) } else { None }, |
| 88 | (4, b'N') => if s == b"None" { Some(TokenType::None) } else { None }, |
| 89 | (4, b'p') => if s == b"pass" { Some(TokenType::Pass) } else { None }, |
| 90 | (4, b'T') => if s == b"True" { Some(TokenType::True) } else { None }, |
| 91 | (4, b't') => if s == b"type" { Some(TokenType::Type) } else { None }, |
| 92 | (4, b'w') => if s == b"with" { Some(TokenType::With) } else { None }, |
| 93 | |
| 94 | (5, b'a') => match s[1] { |
| 95 | b's' => if s == b"async" { Some(TokenType::Async) } else { None }, |
| 96 | b'w' => if s == b"await" { Some(TokenType::Await) } else { None }, |
| 97 | _ => None, |
| 98 | }, |
| 99 | (5, b'b') => if s == b"break" { Some(TokenType::Break) } else { None }, |
| 100 | (5, b'c') => if s == b"class" { Some(TokenType::Class) } else { None }, |
| 101 | (5, b'F') => if s == b"False" { Some(TokenType::False) } else { None }, |
| 102 | (5, b'm') => if s == b"match" { Some(TokenType::Match) } else { None }, |
| 103 | (5, b'r') => if s == b"raise" { Some(TokenType::Raise) } else { None }, |
| 104 | (5, b'w') => if s == b"while" { Some(TokenType::While) } else { None }, |
| 105 | (5, b'y') => if s == b"yield" { Some(TokenType::Yield) } else { None }, |
| 106 | |
| 107 | (6, b'a') => if s == b"assert" { Some(TokenType::Assert) } else { None }, |
| 108 | (6, b'e') => if s == b"except" { Some(TokenType::Except) } else { None }, |
| 109 | (6, b'g') => if s == b"global" { Some(TokenType::Global) } else { None }, |
| 110 | (6, b'i') => if s == b"import" { Some(TokenType::Import) } else { None }, |
| 111 | (6, b'l') => if s == b"lambda" { Some(TokenType::Lambda) } else { None }, |
| 112 | (6, b'r') => if s == b"return" { Some(TokenType::Return) } else { None }, |
| 113 | |
| 114 | (7, b'f') => if s == b"finally" { Some(TokenType::Finally) } else { None }, |
| 115 | |
| 116 | (8, b'c') => if s == b"continue" { Some(TokenType::Continue) } else { None }, |
| 117 | (8, b'n') => if s == b"nonlocal" { Some(TokenType::Nonlocal) } else { None }, |