blob: 45f818305273da55f3368000c6edecaf3bc385fd [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"
Emily Bernierd0a1eb72015-03-24 16:35:39 -040010#include "src/json-stringifier.h"
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000011#include "src/objects-inl.h"
12#include "src/parsing/json-parser.h"
Emily Bernierd0a1eb72015-03-24 16:35:39 -040013
14namespace v8 {
15namespace internal {
16
17RUNTIME_FUNCTION(Runtime_QuoteJSONString) {
18 HandleScope scope(isolate);
19 CONVERT_ARG_HANDLE_CHECKED(String, string, 0);
20 DCHECK(args.length() == 1);
21 Handle<Object> result;
22 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
23 isolate, result, BasicJsonStringifier::StringifyString(isolate, string));
24 return *result;
25}
26
27
28RUNTIME_FUNCTION(Runtime_BasicJSONStringify) {
29 HandleScope scope(isolate);
30 DCHECK(args.length() == 1);
31 CONVERT_ARG_HANDLE_CHECKED(Object, object, 0);
32 BasicJsonStringifier stringifier(isolate);
33 Handle<Object> result;
34 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result,
35 stringifier.Stringify(object));
36 return *result;
37}
38
39
40RUNTIME_FUNCTION(Runtime_ParseJson) {
41 HandleScope scope(isolate);
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000042 DCHECK_EQ(1, args.length());
43 CONVERT_ARG_HANDLE_CHECKED(Object, object, 0);
44 Handle<String> source;
45 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, source,
46 Object::ToString(isolate, object));
Emily Bernierd0a1eb72015-03-24 16:35:39 -040047 source = String::Flatten(source);
48 // Optimized fast case where we only have Latin1 characters.
49 Handle<Object> result;
50 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result,
51 source->IsSeqOneByteString()
52 ? JsonParser<true>::Parse(source)
53 : JsonParser<false>::Parse(source));
54 return *result;
55}
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000056
57} // namespace internal
58} // namespace v8