blob: 72fc758ec83abd40fae6383134b88b2134f795e5 [file] [log] [blame]
Emily Bernierd0a1eb72015-03-24 16:35:39 -04001// Copyright 2014 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
Ben Murdoch4a90d5f2016-03-22 12:00:34 +00005#include "src/runtime/runtime-utils.h"
Emily Bernierd0a1eb72015-03-24 16:35:39 -04006
7#include "src/arguments.h"
Ben Murdoch4a90d5f2016-03-22 12:00:34 +00008#include "src/char-predicates-inl.h"
9#include "src/isolate-inl.h"
Ben Murdoch097c5b22016-05-18 11:27:45 +010010#include "src/json-parser.h"
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000011#include "src/objects-inl.h"
Emily Bernierd0a1eb72015-03-24 16:35:39 -040012
13namespace v8 {
14namespace internal {
15
16RUNTIME_FUNCTION(Runtime_QuoteJSONString) {
17 HandleScope scope(isolate);
18 CONVERT_ARG_HANDLE_CHECKED(String, string, 0);
19 DCHECK(args.length() == 1);
20 Handle<Object> result;
21 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
Ben Murdochc5610432016-08-08 18:44:38 +010022 isolate, result, Runtime::BasicJsonStringifyString(isolate, string));
Emily Bernierd0a1eb72015-03-24 16:35:39 -040023 return *result;
24}
25
Emily Bernierd0a1eb72015-03-24 16:35:39 -040026RUNTIME_FUNCTION(Runtime_BasicJSONStringify) {
27 HandleScope scope(isolate);
28 DCHECK(args.length() == 1);
29 CONVERT_ARG_HANDLE_CHECKED(Object, object, 0);
Emily Bernierd0a1eb72015-03-24 16:35:39 -040030 Handle<Object> result;
Ben Murdochc5610432016-08-08 18:44:38 +010031 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
32 isolate, result, Runtime::BasicJsonStringify(isolate, object));
Emily Bernierd0a1eb72015-03-24 16:35:39 -040033 return *result;
34}
35
Emily Bernierd0a1eb72015-03-24 16:35:39 -040036RUNTIME_FUNCTION(Runtime_ParseJson) {
37 HandleScope scope(isolate);
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000038 DCHECK_EQ(1, args.length());
39 CONVERT_ARG_HANDLE_CHECKED(Object, object, 0);
40 Handle<String> source;
41 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, source,
42 Object::ToString(isolate, object));
Emily Bernierd0a1eb72015-03-24 16:35:39 -040043 source = String::Flatten(source);
44 // Optimized fast case where we only have Latin1 characters.
45 Handle<Object> result;
46 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result,
47 source->IsSeqOneByteString()
48 ? JsonParser<true>::Parse(source)
49 : JsonParser<false>::Parse(source));
50 return *result;
51}
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000052
53} // namespace internal
54} // namespace v8