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