1 // Copyright 2015 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_UNICODE_CACHE_H_ 6 #define V8_UNICODE_CACHE_H_ 7 8 #include "src/base/macros.h" 9 #include "src/char-predicates.h" 10 #include "src/unicode.h" 11 #include "src/unicode-decoder.h" 12 13 namespace v8 { 14 namespace internal { 15 16 // Caching predicates used by scanners. 17 class UnicodeCache { 18 public: UnicodeCache()19 UnicodeCache() {} 20 typedef unibrow::Utf8Decoder<512> Utf8Decoder; 21 utf8_decoder()22 StaticResource<Utf8Decoder>* utf8_decoder() { return &utf8_decoder_; } 23 24 inline bool IsIdentifierStart(unibrow::uchar c); 25 inline bool IsIdentifierPart(unibrow::uchar c); 26 inline bool IsLineTerminator(unibrow::uchar c); 27 inline bool IsLineTerminatorSequence(unibrow::uchar c, unibrow::uchar next); 28 29 inline bool IsWhiteSpace(unibrow::uchar c); 30 inline bool IsWhiteSpaceOrLineTerminator(unibrow::uchar c); 31 32 private: 33 unibrow::Predicate<IdentifierStart, 128> kIsIdentifierStart; 34 unibrow::Predicate<IdentifierPart, 128> kIsIdentifierPart; 35 unibrow::Predicate<WhiteSpace, 128> kIsWhiteSpace; 36 unibrow::Predicate<WhiteSpaceOrLineTerminator, 128> 37 kIsWhiteSpaceOrLineTerminator; 38 StaticResource<Utf8Decoder> utf8_decoder_; 39 40 DISALLOW_COPY_AND_ASSIGN(UnicodeCache); 41 }; 42 43 } // namespace internal 44 } // namespace v8 45 46 #endif // V8_UNICODE_CACHE_H_ 47