1 // 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 5 #include "src/runtime/runtime-utils.h" 6 7 #include "src/arguments.h" 8 #include "src/char-predicates-inl.h" 9 #include "src/isolate-inl.h" 10 #include "src/json-stringifier.h" 11 #include "src/objects-inl.h" 12 #include "src/parsing/json-parser.h" 13 14 namespace v8 { 15 namespace internal { 16 17 RUNTIME_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 28 RUNTIME_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 40 RUNTIME_FUNCTION(Runtime_ParseJson) { 41 HandleScope scope(isolate); 42 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)); 47 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 } 56 57 } // namespace internal 58 } // namespace v8 59