Home | History | Annotate | Download | only in runtime
      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