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 inline bool IsHexDigit(uc32 c) { 52 // ECMA-262, 3rd, 7.6 (p 15) 53 return IsDecimalDigit(c) || IsInRange(AsciiAlphaToLower(c), 'a', 'f'); 54 } 55 56 inline bool IsOctalDigit(uc32 c) { 57 // ECMA-262, 6th, 7.8.3 58 return IsInRange(c, '0', '7'); 59 } 60 61 inline bool IsBinaryDigit(uc32 c) { 62 // ECMA-262, 6th, 7.8.3 63 return c == '0' || c == '1'; 64 } 65 66 inline bool IsRegExpWord(uc16 c) { 67 return IsInRange(AsciiAlphaToLower(c), 'a', 'z') 68 || IsDecimalDigit(c) 69 || (c == '_'); 70 } 71 72 73 inline bool IsRegExpNewline(uc16 c) { 74 switch (c) { 75 // CR LF LS PS 76 case 0x000A: case 0x000D: case 0x2028: case 0x2029: 77 return false; 78 default: 79 return true; 80 } 81 } 82 83 84 } // namespace internal 85 } // namespace v8 86 87 #endif // V8_CHAR_PREDICATES_INL_H_ 88