LCOV - code coverage report
Current view: top level - src - d8-js.cc (source / functions) Hit Total Coverage
Test: app.info Lines: 1 1 100.0 %
Date: 2019-04-17 Functions: 1 1 100.0 %

          Line data    Source code
       1             : // Copyright 2008 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/d8.h"
       6             : 
       7             : const char* v8::Shell::stringify_source_ = R"D8(
       8             : (function() {
       9             : "use strict";
      10             : 
      11             : // A more universal stringify that supports more types than JSON.
      12             : // Used by the d8 shell to output results.
      13             : var stringifyDepthLimit = 4;  // To avoid crashing on cyclic objects
      14             : 
      15             : // Hacky solution to circumvent forcing --allow-natives-syntax for d8
      16             : function isProxy(o) { return false };
      17             : function JSProxyGetTarget(proxy) { };
      18             : function JSProxyGetHandler(proxy) { };
      19             : 
      20             : try {
      21             :   isProxy = Function(['object'], 'return %IsJSProxy(object)');
      22             :   JSProxyGetTarget = Function(['proxy'],
      23             :     'return %JSProxyGetTarget(proxy)');
      24             :   JSProxyGetHandler = Function(['proxy'],
      25             :     'return %JSProxyGetHandler(proxy)');
      26             : } catch(e) {};
      27             : 
      28             : 
      29             : function Stringify(x, depth) {
      30             :   if (depth === undefined)
      31             :     depth = stringifyDepthLimit;
      32             :   else if (depth === 0)
      33             :     return "...";
      34             :   if (isProxy(x)) {
      35             :     return StringifyProxy(x, depth);
      36             :   }
      37             :   switch (typeof x) {
      38             :     case "undefined":
      39             :       return "undefined";
      40             :     case "boolean":
      41             :     case "number":
      42             :     case "function":
      43             :     case "symbol":
      44             :       return x.toString();
      45             :     case "string":
      46             :       return "\"" + x.toString() + "\"";
      47             :     case "bigint":
      48             :       return x.toString() + "n";
      49             :     case "object":
      50             :       if (x === null) return "null";
      51             :       if (x.constructor && x.constructor.name === "Array") {
      52             :         var elems = [];
      53             :         for (var i = 0; i < x.length; ++i) {
      54             :           elems.push(
      55             :             {}.hasOwnProperty.call(x, i) ? Stringify(x[i], depth - 1) : "");
      56             :         }
      57             :         return "[" + elems.join(", ") + "]";
      58             :       }
      59             :       try {
      60             :         var string = String(x);
      61             :         if (string && string !== "[object Object]") return string;
      62             :       } catch(e) {}
      63             :       var props = [];
      64             :       var names = Object.getOwnPropertyNames(x);
      65             :       names = names.concat(Object.getOwnPropertySymbols(x));
      66             :       for (var i in names) {
      67             :         var name = names[i];
      68             :         var desc = Object.getOwnPropertyDescriptor(x, name);
      69             :         if (desc === (void 0)) continue;
      70             :         if (typeof name === 'symbol') name = "[" + Stringify(name) + "]";
      71             :         if ("value" in desc) {
      72             :           props.push(name + ": " + Stringify(desc.value, depth - 1));
      73             :         }
      74             :         if (desc.get) {
      75             :           var getter = Stringify(desc.get);
      76             :           props.push("get " + name + getter.slice(getter.indexOf('(')));
      77             :         }
      78             :         if (desc.set) {
      79             :           var setter = Stringify(desc.set);
      80             :           props.push("set " + name + setter.slice(setter.indexOf('(')));
      81             :         }
      82             :       }
      83             :       return "{" + props.join(", ") + "}";
      84             :     default:
      85             :       return "[crazy non-standard value]";
      86             :   }
      87             : }
      88             : 
      89             : function StringifyProxy(proxy, depth) {
      90             :   var proxy_type = typeof proxy;
      91             :   var info_object = {
      92             :     target: JSProxyGetTarget(proxy),
      93             :     handler: JSProxyGetHandler(proxy)
      94             :   }
      95             :   return '[' + proxy_type + ' Proxy ' + Stringify(info_object, depth-1) + ']';
      96             : }
      97             : 
      98             : return Stringify;
      99             : })();
     100             : 
     101       60196 : )D8";

Generated by: LCOV version 1.10