Home | History | Annotate | Download | only in tools
      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 (function(global) {
      6 
      7   var GetProperties = function(this_name, object) {
      8     var result = {};
      9     try {
     10       var names = Object.getOwnPropertyNames(object);
     11     } catch(e) {
     12       return;
     13     }
     14     for (var i = 0; i < names.length; ++i) {
     15       var name = names[i];
     16       if (typeof object === "function") {
     17         if (name === "length" ||
     18             name === "name" ||
     19             name === "arguments" ||
     20             name === "caller" ||
     21             name === "prototype") {
     22           continue;
     23         }
     24       }
     25       // Avoid endless recursion.
     26       if (this_name === "prototype" && name === "constructor") continue;
     27       // Could get this from the parent, but having it locally is easier.
     28       var property = { "name": name };
     29       try {
     30         var value = object[name];
     31       } catch(e) {
     32         property.type = "getter";
     33         result[name] = property;
     34         continue;
     35       }
     36       var type = typeof value;
     37       property.type = type;
     38       if (type === "function") {
     39         property.length = value.length;
     40         property.prototype = GetProperties("prototype", value.prototype);
     41       }
     42       property.properties = GetProperties(name, value);
     43       result[name] = property;
     44     }
     45     return result;
     46   };
     47 
     48   var g = GetProperties("", global, "");
     49   print(JSON.stringify(g, undefined, 2));
     50 
     51 })(this);  // Must wrap in anonymous closure or it'll detect itself as builtin.
     52