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 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 return static_cast<unsigned int>(value - lower_limit) <= 35 static_cast<unsigned int>(higher_limit - lower_limit); 36 } 37 38 inline bool IsAsciiIdentifier(uc32 c) { 39 return IsAlphaNumeric(c) || c == '$' || c == '_'; 40 } 41 42 inline bool IsAlphaNumeric(uc32 c) { 43 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 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 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_ 92