| import 'characters.dart' show $$, $0, $9, $A, $Z, $_, $a, $z; | |
| @pragma("vm:prefer-inline") | |
| bool isIdentifierChar(int next, bool allowDollar) { | |
| return ($a <= next && next <= $z) || | |
| ($A <= next && next <= $Z) || | |
| ($0 <= next && next <= $9) || | |
| next == $_ || | |
| (next == $$ && allowDollar); | |
| } | |
| /// Checks if the character [next] is an identifier character (allowing the | |
| /// dollar sign) using a table lookup, utilizing the fact that the input is from | |
| /// a Uint8List and therefore between 0 and 255. | |
| /// It is the callers responsibility to ensure that this is the case. | |
| // DartDocTest(() { | |
| // for (int i = 0; i < 256; i++) { | |
| // if (isIdentifierCharAllowDollarTableLookup(i) != | |
| // isIdentifierChar(i, true)) { | |
| // return false; | |
| // } | |
| // } | |
| // return true; | |
| // }(), true); | |
| @pragma("vm:prefer-inline") | |
| bool isIdentifierCharAllowDollarTableLookup(int next) { | |
| const List<bool> table = [ | |
| // format hack. | |
| false, false, false, false, false, false, false, false, | |
| false, false, false, false, false, false, false, false, | |
| false, false, false, false, false, false, false, false, | |
| false, false, false, false, false, false, false, false, | |
| false, false, false, false, true, false, false, false, | |
| false, false, false, false, false, false, false, false, | |
| true, true, true, true, true, true, true, true, | |
| true, true, false, false, false, false, false, false, | |
| false, true, true, true, true, true, true, true, | |
| true, true, true, true, true, true, true, true, | |
| true, true, true, true, true, true, true, true, | |
| true, true, true, false, false, false, false, true, | |
| false, true, true, true, true, true, true, true, | |
| true, true, true, true, true, true, true, true, | |
| true, true, true, true, true, true, true, true, | |
| true, true, true, false, false, false, false, false, | |
| false, false, false, false, false, false, false, false, | |
| false, false, false, false, false, false, false, false, | |
| false, false, false, false, false, false, false, false, | |
| false, false, false, false, false, false, false, false, | |
| false, false, false, false, false, false, false, false, | |
| false, false, false, false, false, false, false, false, | |
| false, false, false, false, false, false, false, false, | |
| false, false, false, false, false, false, false, false, | |
| false, false, false, false, false, false, false, false, | |
| false, false, false, false, false, false, false, false, | |
| false, false, false, false, false, false, false, false, | |
| false, false, false, false, false, false, false, false, | |
| false, false, false, false, false, false, false, false, | |
| false, false, false, false, false, false, false, false, | |
| false, false, false, false, false, false, false, false, | |
| false, false, false, false, false, false, false, false, | |
| // format hack. | |
| ]; | |
| return table[next]; | |
| } |