LCOV - code coverage report
Current view: top level - src - json-stringifier.h (source / functions) Hit Total Coverage
Test: app.info Lines: 9 9 100.0 %
Date: 2017-04-26 Functions: 1 1 100.0 %

          Line data    Source code
       1             : // Copyright 2012 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             : #ifndef V8_JSON_STRINGIFIER_H_
       6             : #define V8_JSON_STRINGIFIER_H_
       7             : 
       8             : #include "src/objects.h"
       9             : #include "src/string-builder.h"
      10             : 
      11             : namespace v8 {
      12             : namespace internal {
      13             : 
      14             : class JsonStringifier BASE_EMBEDDED {
      15             :  public:
      16             :   explicit JsonStringifier(Isolate* isolate);
      17             : 
      18     1735994 :   ~JsonStringifier() { DeleteArray(gap_); }
      19             : 
      20             :   MUST_USE_RESULT MaybeHandle<Object> Stringify(Handle<Object> object,
      21             :                                                 Handle<Object> replacer,
      22             :                                                 Handle<Object> gap);
      23             : 
      24             :  private:
      25             :   enum Result { UNCHANGED, SUCCESS, EXCEPTION };
      26             : 
      27             :   bool InitializeReplacer(Handle<Object> replacer);
      28             :   bool InitializeGap(Handle<Object> gap);
      29             : 
      30             :   MUST_USE_RESULT MaybeHandle<Object> ApplyToJsonFunction(
      31             :       Handle<Object> object,
      32             :       Handle<Object> key);
      33             :   MUST_USE_RESULT MaybeHandle<Object> ApplyReplacerFunction(
      34             :       Handle<Object> value, Handle<Object> key, Handle<Object> initial_holder);
      35             : 
      36             :   // Entry point to serialize the object.
      37     1735980 :   INLINE(Result SerializeObject(Handle<Object> obj)) {
      38     3471960 :     return Serialize_<false>(obj, false, factory()->empty_string());
      39             :   }
      40             : 
      41             :   // Serialize an array element.
      42             :   // The index may serve as argument for the toJSON function.
      43             :   INLINE(Result SerializeElement(Isolate* isolate,
      44             :                                  Handle<Object> object,
      45             :                                  int i)) {
      46             :     return Serialize_<false>(object,
      47             :                              false,
      48    33304738 :                              Handle<Object>(Smi::FromInt(i), isolate));
      49             :   }
      50             : 
      51             :   // Serialize a object property.
      52             :   // The key may or may not be serialized depending on the property.
      53             :   // The key may also serve as argument for the toJSON function.
      54             :   INLINE(Result SerializeProperty(Handle<Object> object,
      55             :                                   bool deferred_comma,
      56             :                                   Handle<String> deferred_key)) {
      57             :     DCHECK(!deferred_key.is_null());
      58     1145051 :     return Serialize_<true>(object, deferred_comma, deferred_key);
      59             :   }
      60             : 
      61             :   template <bool deferred_string_key>
      62             :   Result Serialize_(Handle<Object> object, bool comma, Handle<Object> key);
      63             : 
      64             :   INLINE(void SerializeDeferredKey(bool deferred_comma,
      65             :                                    Handle<Object> deferred_key));
      66             : 
      67             :   Result SerializeSmi(Smi* object);
      68             : 
      69             :   Result SerializeDouble(double number);
      70             :   INLINE(Result SerializeHeapNumber(Handle<HeapNumber> object)) {
      71        1317 :     return SerializeDouble(object->value());
      72             :   }
      73             : 
      74             :   Result SerializeJSValue(Handle<JSValue> object);
      75             : 
      76             :   INLINE(Result SerializeJSArray(Handle<JSArray> object));
      77             :   INLINE(Result SerializeJSObject(Handle<JSObject> object));
      78             : 
      79             :   Result SerializeJSProxy(Handle<JSProxy> object);
      80             :   Result SerializeJSReceiverSlow(Handle<JSReceiver> object);
      81             :   Result SerializeArrayLikeSlow(Handle<JSReceiver> object, uint32_t start,
      82             :                                 uint32_t length);
      83             : 
      84             :   void SerializeString(Handle<String> object);
      85             : 
      86             :   template <typename SrcChar, typename DestChar>
      87             :   INLINE(static void SerializeStringUnchecked_(
      88             :       Vector<const SrcChar> src,
      89             :       IncrementalStringBuilder::NoExtend<DestChar>* dest));
      90             : 
      91             :   template <typename SrcChar, typename DestChar>
      92             :   INLINE(void SerializeString_(Handle<String> string));
      93             : 
      94             :   template <typename Char>
      95             :   INLINE(static bool DoNotEscape(Char c));
      96             : 
      97             :   INLINE(void NewLine());
      98      550642 :   INLINE(void Indent() { indent_++; });
      99      533837 :   INLINE(void Unindent() { indent_--; });
     100             :   INLINE(void Separator(bool first));
     101             : 
     102             :   Handle<JSReceiver> CurrentHolder(Handle<Object> value,
     103             :                                    Handle<Object> inital_holder);
     104             : 
     105             :   Result StackPush(Handle<Object> object);
     106             :   void StackPop();
     107             : 
     108     1735980 :   Factory* factory() { return isolate_->factory(); }
     109             : 
     110             :   Isolate* isolate_;
     111             :   IncrementalStringBuilder builder_;
     112             :   Handle<String> tojson_string_;
     113             :   Handle<JSArray> stack_;
     114             :   Handle<FixedArray> property_list_;
     115             :   Handle<JSReceiver> replacer_function_;
     116             :   uc16* gap_;
     117             :   int indent_;
     118             : 
     119             :   static const int kJsonEscapeTableEntrySize = 8;
     120             :   static const char* const JsonEscapeTable;
     121             : };
     122             : 
     123             : }  // namespace internal
     124             : }  // namespace v8
     125             : 
     126             : #endif  // V8_JSON_STRINGIFIER_H_

Generated by: LCOV version 1.10