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 10namespace v8 { 11namespace 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. 17inline int AsciiAlphaToLower(uc32 c) { 18 return c | 0x20; 19} 20 21 22inline bool IsCarriageReturn(uc32 c) { 23 return c == 0x000D; 24} 25 26 27inline bool IsLineFeed(uc32 c) { 28 return c == 0x000A; 29} 30 31 32inline 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 39inline bool IsDecimalDigit(uc32 c) { 40 // ECMA-262, 3rd, 7.8.3 (p 16) 41 return IsInRange(c, '0', '9'); 42} 43 44 45inline bool IsHexDigit(uc32 c) { 46 // ECMA-262, 3rd, 7.6 (p 15) 47 return IsDecimalDigit(c) || IsInRange(AsciiAlphaToLower(c), 'a', 'f'); 48} 49 50 51inline bool IsOctalDigit(uc32 c) { 52 // ECMA-262, 6th, 7.8.3 53 return IsInRange(c, '0', '7'); 54} 55 56 57inline bool IsBinaryDigit(uc32 c) { 58 // ECMA-262, 6th, 7.8.3 59 return c == '0' || c == '1'; 60} 61 62 63inline bool IsRegExpWord(uc16 c) { 64 return IsInRange(AsciiAlphaToLower(c), 'a', 'z') 65 || IsDecimalDigit(c) 66 || (c == '_'); 67} 68 69 70inline 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