• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.
AsciiAlphaToLower(uc32 c)17  inline int AsciiAlphaToLower(uc32 c) {
18    return c | 0x20;
19  }
20  
21  
IsCarriageReturn(uc32 c)22  inline bool IsCarriageReturn(uc32 c) {
23    return c == 0x000D;
24  }
25  
26  
IsLineFeed(uc32 c)27  inline bool IsLineFeed(uc32 c) {
28    return c == 0x000A;
29  }
30  
31  
IsInRange(int value,int lower_limit,int higher_limit)32  inline bool IsInRange(int value, int lower_limit, int higher_limit) {
33    DCHECK(lower_limit <= higher_limit);
34    return static_cast<unsigned int>(value - lower_limit) <=
35        static_cast<unsigned int>(higher_limit - lower_limit);
36  }
37  
38  
IsDecimalDigit(uc32 c)39  inline bool IsDecimalDigit(uc32 c) {
40    // ECMA-262, 3rd, 7.8.3 (p 16)
41    return IsInRange(c, '0', '9');
42  }
43  
44  
IsHexDigit(uc32 c)45  inline bool IsHexDigit(uc32 c) {
46    // ECMA-262, 3rd, 7.6 (p 15)
47    return IsDecimalDigit(c) || IsInRange(AsciiAlphaToLower(c), 'a', 'f');
48  }
49  
50  
IsOctalDigit(uc32 c)51  inline bool IsOctalDigit(uc32 c) {
52    // ECMA-262, 6th, 7.8.3
53    return IsInRange(c, '0', '7');
54  }
55  
56  
IsBinaryDigit(uc32 c)57  inline bool IsBinaryDigit(uc32 c) {
58    // ECMA-262, 6th, 7.8.3
59    return c == '0' || c == '1';
60  }
61  
62  
IsRegExpWord(uc16 c)63  inline bool IsRegExpWord(uc16 c) {
64    return IsInRange(AsciiAlphaToLower(c), 'a', 'z')
65        || IsDecimalDigit(c)
66        || (c == '_');
67  }
68  
69  
IsRegExpNewline(uc16 c)70  inline bool IsRegExpNewline(uc16 c) {
71    switch (c) {
72      //   CR           LF           LS           PS
73      case 0x000A: case 0x000D: case 0x2028: case 0x2029:
74        return false;
75      default:
76        return true;
77    }
78  }
79  
80  
81  } }  // namespace v8::internal
82  
83  #endif  // V8_CHAR_PREDICATES_INL_H_
84