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: 19 UnicodeCache() {} 20 typedef unibrow::Utf8Decoder<512> Utf8Decoder; 21 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<unibrow::LineTerminator, 128> kIsLineTerminator; 36 unibrow::Predicate<WhiteSpace, 128> kIsWhiteSpace; 37 unibrow::Predicate<WhiteSpaceOrLineTerminator, 128> 38 kIsWhiteSpaceOrLineTerminator; 39 StaticResource<Utf8Decoder> utf8_decoder_; 40 41 DISALLOW_COPY_AND_ASSIGN(UnicodeCache); 42 }; 43 44 } // namespace internal 45 } // namespace v8 46 47 #endif // V8_UNICODE_CACHE_H_ 48