5#ifndef V8_JSON_JSON_PARSER_H_
6#define V8_JSON_JSON_PARSER_H_
100 : string(string), value(value) {}
121 template <WithOrWithoutSource with_source>
127 template <WithOrWithoutSource with_source>
154template <
typename Char>
162 return JsonParser(isolate, source).ParseRawJson();
176 if (IsCallable(*reviver)) {
190 template <
typename T>
197 index(static_cast<uint32_t>(index)),
242 std::optional<MessageTemplate> errorMessage = std::nullopt) {
252 std::optional<MessageTemplate> errorMessage = std::nullopt) {
254 errorMessage ?
Expect(token, errorMessage.value()) :
Expect(token);
259 if (
next_ != token)
return false;
270 static_assert(
N > 2);
271 size_t remaining =
static_cast<size_t>(
end_ -
cursor_);
279 for (
size_t i = 0;
i < std::min(
N - 2, remaining - 1);
i++) {
309 template <
typename SinkChar>
312 template <
typename SinkSeqString>
332 template <
bool should_track_json_source>
340 template <
bool should_track_json_source>
342 DirectHandle<Map> feedback);
367 std::optional<MessageTemplate> errorMessage = std::nullopt);
v8::internal::Factory * factory()
JsonParseInternalizer(Isolate *isolate, Handle< JSReceiver > reviver, Handle< String > source)
MaybeHandle< Object > InternalizeJsonProperty(DirectHandle< JSReceiver > holder, DirectHandle< String > key, Handle< Object > val_node, DirectHandle< Object > snapshot)
static MaybeHandle< Object > Internalize(Isolate *isolate, DirectHandle< Object > result, Handle< Object > reviver, Handle< String > source, MaybeHandle< Object > val_node)
Handle< JSReceiver > reviver_
bool RecurseAndApply(Handle< JSReceiver > holder, Handle< String > name, Handle< Object > val_node, Handle< Object > snapshot)
static const int kMaxContextCharacters
JsonString ScanJsonString(bool needs_internalization)
bool Check(JsonToken token)
MaybeHandle< Object > ParseJsonArray()
DirectHandle< JSFunction > object_constructor()
V8_INLINE JsonToken peek() const
Handle< String > MakeString(const JsonString &string, Handle< String > hint=Handle< String >())
void ExpectNext(JsonToken token, std::optional< MessageTemplate > errorMessage=std::nullopt)
SmallVector< Handle< Object > > element_stack_
static constexpr base::uc32 kEndOfString
MaybeHandle< Object > ParseJsonValue()
void Expect(JsonToken token, std::optional< MessageTemplate > errorMessage=std::nullopt)
MessageTemplate GetErrorMessageWithEllipses(DirectHandle< Object > &arg, DirectHandle< Object > &arg2, int pos)
static const int kInitialSpecialStringLength
void ReportUnexpectedToken(JsonToken token, std::optional< MessageTemplate > errorMessage=std::nullopt)
SmallVector< double > double_elements_
SmallVector< int > smi_elements_
MaybeHandle< Object > ParseJsonObject(Handle< Map > feedback)
JsonParser(Isolate *isolate, Handle< String > source)
void DecodeString(SinkChar *sink, uint32_t start, uint32_t length)
JsonString ScanJsonPropertyKey(JsonContinuation *cont)
static void UpdatePointersCallback(void *parser)
const Handle< String > original_source_
base::uc32 CurrentCharacter()
void ScanLiteral(const char(&s)[N])
Handle< JSObject > BuildJsonObject(const JsonContinuation &cont, DirectHandle< Map > feedback)
uint32_t position() const
V8_INLINE MaybeHandle< Object > ParseJsonValueRecursive(Handle< Map > feedback={})
void AdvanceToNonDecimal()
void CalculateFileLocation(DirectHandle< Object > &line, DirectHandle< Object > &column)
static V8_WARN_UNUSED_RESULT bool CheckRawJson(Isolate *isolate, Handle< String > source)
Handle< Object > ParseJsonNumber()
void Consume(JsonToken token)
base::uc32 ScanUnicodeCharacter()
static constexpr base::uc32 kInvalidUnicodeCharacter
base::uc32 NextCharacter()
MaybeHandle< Object > ParseJson(DirectHandle< Object > reviver)
void ReportUnexpectedCharacter(base::uc32 c)
static V8_WARN_UNUSED_RESULT MaybeHandle< Object > Parse(Isolate *isolate, Handle< String > source, Handle< Object > reviver)
Handle< JSFunction > object_constructor_
bool ParseJsonNumberAsDoubleOrSmi(double *result_double, int *result_smi)
static const bool kIsOneByte
Handle< Object > BuildJsonArray(size_t start)
SmallVector< JsonProperty > property_stack_
base::Vector< const Char > GetKeyChars(JsonString key)
typename CharTraits< Char >::ExternalString SeqExternalString
static const int kMinOriginalSourceLengthForContext
MaybeHandle< Object > parsed_val_node_
const uint64_t hash_seed_
MessageTemplate LookUpErrorMessageForJsonToken(JsonToken token, DirectHandle< Object > &arg, DirectHandle< Object > &arg2, int pos)
typename CharTraits< Char >::String SeqString
const bool needs_conversion_
bool needs_conversion() const
JsonString(uint32_t start, uint32_t length, bool needs_conversion, bool internalize, bool has_escape)
JsonString(uint32_t index)
static V8_EXPORT_PRIVATE v8::Platform * GetCurrentPlatform()
#define ASSIGN_RETURN_ON_EXCEPTION(isolate, dst, call)
ZoneVector< RpoNumber > & result
bool CompareCharsEqual(const lchar *lhs, const rchar *rhs, size_t chars)
Tagged< To > Cast(Tagged< From > value, const v8::SourceLocation &loc=INIT_SOURCE_LOCATION_IN_DEBUG)
#define DCHECK_LE(v1, v2)
#define DCHECK(condition)
#define DCHECK_EQ(v1, v2)
JsonContinuation(Isolate *isolate, Type type, size_t index)
JsonProperty(const JsonString &string, Handle< Object > value)
JsonProperty(const JsonString &string)
#define V8_LIKELY(condition)
#define V8_WARN_UNUSED_RESULT
#define V8_UNLIKELY(condition)