Line data Source code
1 : // Copyright 2011 the V8 project authors. All rights reserved.
2 : // Use of this source code is governed by a BSD-style license that can be
3 : // found in the LICENSE file.
4 :
5 : #ifndef V8_CHAR_PREDICATES_INL_H_
6 : #define V8_CHAR_PREDICATES_INL_H_
7 :
8 : #include "src/char-predicates.h"
9 :
10 : namespace v8 {
11 : namespace internal {
12 :
13 :
14 : // If c is in 'A'-'Z' or 'a'-'z', return its lower-case.
15 : // Else, return something outside of 'A'-'Z' and 'a'-'z'.
16 : // Note: it ignores LOCALE.
17 : inline int AsciiAlphaToLower(uc32 c) {
18 433234192 : return c | 0x20;
19 : }
20 :
21 :
22 : inline bool IsCarriageReturn(uc32 c) {
23 : return c == 0x000D;
24 : }
25 :
26 :
27 : inline bool IsLineFeed(uc32 c) {
28 : return c == 0x000A;
29 : }
30 :
31 :
32 : inline bool IsInRange(int value, int lower_limit, int higher_limit) {
33 : DCHECK(lower_limit <= higher_limit);
34 2198720441 : return static_cast<unsigned int>(value - lower_limit) <=
35 11491 : static_cast<unsigned int>(higher_limit - lower_limit);
36 : }
37 :
38 : inline bool IsAsciiIdentifier(uc32 c) {
39 386609756 : return IsAlphaNumeric(c) || c == '$' || c == '_';
40 : }
41 :
42 : inline bool IsAlphaNumeric(uc32 c) {
43 523289970 : return IsInRange(AsciiAlphaToLower(c), 'a', 'z') || IsDecimalDigit(c);
44 : }
45 :
46 : inline bool IsDecimalDigit(uc32 c) {
47 : // ECMA-262, 3rd, 7.8.3 (p 16)
48 : return IsInRange(c, '0', '9');
49 : }
50 :
51 :
52 : inline bool IsHexDigit(uc32 c) {
53 : // ECMA-262, 3rd, 7.6 (p 15)
54 1515803 : return IsDecimalDigit(c) || IsInRange(AsciiAlphaToLower(c), 'a', 'f');
55 : }
56 :
57 :
58 : inline bool IsOctalDigit(uc32 c) {
59 : // ECMA-262, 6th, 7.8.3
60 : return IsInRange(c, '0', '7');
61 : }
62 :
63 :
64 : inline bool IsBinaryDigit(uc32 c) {
65 : // ECMA-262, 6th, 7.8.3
66 250 : return c == '0' || c == '1';
67 : }
68 :
69 :
70 : inline bool IsRegExpWord(uc16 c) {
71 : return IsInRange(AsciiAlphaToLower(c), 'a', 'z')
72 : || IsDecimalDigit(c)
73 : || (c == '_');
74 : }
75 :
76 :
77 : inline bool IsRegExpNewline(uc16 c) {
78 : switch (c) {
79 : // CR LF LS PS
80 : case 0x000A: case 0x000D: case 0x2028: case 0x2029:
81 : return false;
82 : default:
83 : return true;
84 : }
85 : }
86 :
87 :
88 : } // namespace internal
89 : } // namespace v8
90 :
91 : #endif // V8_CHAR_PREDICATES_INL_H_
|