// Copyright 2014 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_STRINGS_UNICODE_DECODER_H_ #define V8_STRINGS_UNICODE_DECODER_H_ #include "src/base/vector.h" #include "src/strings/unicode.h" namespace v8 { namespace internal { // The return value may point to the first aligned word containing the first // non-one-byte character, rather than directly to the non-one-byte character. // If the return value is >= the passed length, the entire string was // one-byte. inline int NonAsciiStart(const uint8_t* chars, int length) { … } template <class Decoder> class Utf8DecoderBase { … }; class V8_EXPORT_PRIVATE Utf8Decoder final : public Utf8DecoderBase<Utf8Decoder> { … }; #if V8_ENABLE_WEBASSEMBLY // Like Utf8Decoder above, except that instead of replacing invalid sequences // with U+FFFD, we have a separate Encoding::kInvalid state, and we also accept // isolated surrogates. class Wtf8Decoder : public Utf8DecoderBase<Wtf8Decoder> { … }; // Like Utf8Decoder above, except that instead of replacing invalid sequences // with U+FFFD, we have a separate Encoding::kInvalid state. class StrictUtf8Decoder : public Utf8DecoderBase<StrictUtf8Decoder> { … }; #endif // V8_ENABLE_WEBASSEMBLY } // namespace internal } // namespace v8 #endif // V8_STRINGS_UNICODE_DECODER_H_