| // Copyright 2011 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef V8_CHAR_PREDICATES_H_ |
| #define V8_CHAR_PREDICATES_H_ |
| |
| #include "src/unicode.h" |
| |
| namespace v8 { |
| namespace internal { |
| |
| // Unicode character predicates as defined by ECMA-262, 3rd, |
| // used for lexical analysis. |
| |
| inline bool IsCarriageReturn(uc32 c); |
| inline bool IsLineFeed(uc32 c); |
| inline bool IsDecimalDigit(uc32 c); |
| inline bool IsHexDigit(uc32 c); |
| inline bool IsOctalDigit(uc32 c); |
| inline bool IsBinaryDigit(uc32 c); |
| inline bool IsRegExpWord(uc32 c); |
| inline bool IsRegExpNewline(uc32 c); |
| |
| struct IdentifierStart { |
| static inline bool Is(uc32 c) { |
| switch (c) { |
| case '$': case '_': case '\\': return true; |
| default: return unibrow::Letter::Is(c); |
| } |
| } |
| }; |
| |
| |
| struct IdentifierPart { |
| static inline bool Is(uc32 c) { |
| return IdentifierStart::Is(c) |
| || unibrow::Number::Is(c) |
| || c == 0x200C // U+200C is Zero-Width Non-Joiner. |
| || c == 0x200D // U+200D is Zero-Width Joiner. |
| || unibrow::CombiningMark::Is(c) |
| || unibrow::ConnectorPunctuation::Is(c); |
| } |
| }; |
| |
| |
| // WhiteSpace according to ECMA-262 5.1, 7.2. |
| struct WhiteSpace { |
| static inline bool Is(uc32 c) { |
| return c == 0x0009 || // <TAB> |
| c == 0x000B || // <VT> |
| c == 0x000C || // <FF> |
| c == 0xFEFF || // <BOM> |
| // \u0020 and \u00A0 are included in unibrow::WhiteSpace. |
| unibrow::WhiteSpace::Is(c); |
| } |
| }; |
| |
| |
| // WhiteSpace and LineTerminator according to ECMA-262 5.1, 7.2 and 7.3. |
| struct WhiteSpaceOrLineTerminator { |
| static inline bool Is(uc32 c) { |
| return WhiteSpace::Is(c) || unibrow::LineTerminator::Is(c); |
| } |
| }; |
| |
| } } // namespace v8::internal |
| |
| #endif // V8_CHAR_PREDICATES_H_ |