blob: ab5caa755732155d367903f1984cf168f4ab3ef3 [file] [log] [blame]
Ben Murdoch3ef787d2012-04-12 10:51:47 +01001// Copyright 2011 the V8 project authors. All rights reserved.
Ben Murdochb8a8cc12014-11-26 15:28:44 +00002// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
Steve Blocka7e24c12009-10-30 11:49:00 +00004
5#ifndef V8_CHAR_PREDICATES_INL_H_
6#define V8_CHAR_PREDICATES_INL_H_
7
Ben Murdochb8a8cc12014-11-26 15:28:44 +00008#include "src/char-predicates.h"
Steve Blocka7e24c12009-10-30 11:49:00 +00009
10namespace v8 {
11namespace internal {
12
13
Iain Merrick9ac36c92010-09-13 15:29:50 +010014// 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
Steve Blocka7e24c12009-10-30 11:49:00 +000022inline bool IsCarriageReturn(uc32 c) {
23 return c == 0x000D;
24}
25
26
27inline bool IsLineFeed(uc32 c) {
28 return c == 0x000A;
29}
30
31
Ben Murdoch3ef787d2012-04-12 10:51:47 +010032inline bool IsInRange(int value, int lower_limit, int higher_limit) {
Ben Murdochb8a8cc12014-11-26 15:28:44 +000033 DCHECK(lower_limit <= higher_limit);
Steve Blocka7e24c12009-10-30 11:49:00 +000034 return static_cast<unsigned int>(value - lower_limit) <=
35 static_cast<unsigned int>(higher_limit - lower_limit);
36}
37
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000038inline bool IsAsciiIdentifier(uc32 c) {
39 return IsAlphaNumeric(c) || c == '$' || c == '_';
40}
41
42inline bool IsAlphaNumeric(uc32 c) {
43 return IsInRange(AsciiAlphaToLower(c), 'a', 'z') || IsDecimalDigit(c);
44}
Steve Blocka7e24c12009-10-30 11:49:00 +000045
46inline bool IsDecimalDigit(uc32 c) {
47 // ECMA-262, 3rd, 7.8.3 (p 16)
48 return IsInRange(c, '0', '9');
49}
50
51
52inline bool IsHexDigit(uc32 c) {
53 // ECMA-262, 3rd, 7.6 (p 15)
Iain Merrick9ac36c92010-09-13 15:29:50 +010054 return IsDecimalDigit(c) || IsInRange(AsciiAlphaToLower(c), 'a', 'f');
Steve Blocka7e24c12009-10-30 11:49:00 +000055}
56
57
Ben Murdochb8a8cc12014-11-26 15:28:44 +000058inline bool IsOctalDigit(uc32 c) {
59 // ECMA-262, 6th, 7.8.3
60 return IsInRange(c, '0', '7');
61}
62
63
64inline bool IsBinaryDigit(uc32 c) {
65 // ECMA-262, 6th, 7.8.3
66 return c == '0' || c == '1';
67}
68
69
Steve Blocka7e24c12009-10-30 11:49:00 +000070inline bool IsRegExpWord(uc16 c) {
Iain Merrick9ac36c92010-09-13 15:29:50 +010071 return IsInRange(AsciiAlphaToLower(c), 'a', 'z')
Steve Blocka7e24c12009-10-30 11:49:00 +000072 || IsDecimalDigit(c)
73 || (c == '_');
74}
75
76
77inline 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
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000088} // namespace internal
89} // namespace v8
Steve Blocka7e24c12009-10-30 11:49:00 +000090
91#endif // V8_CHAR_PREDICATES_INL_H_