Index: tools/detect-builtins.js |
diff --git a/tools/detect-builtins.js b/tools/detect-builtins.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..2a476baa4b031c4f089553dacb0589417b3db40c |
--- /dev/null |
+++ b/tools/detect-builtins.js |
@@ -0,0 +1,51 @@ |
+// Copyright 2014 the V8 project authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+(function(global) { |
+ |
+ var GetProperties = function(this_name, object) { |
+ var result = {}; |
+ try { |
+ var names = Object.getOwnPropertyNames(object); |
+ } catch(e) { |
+ return; |
+ } |
+ for (var i = 0; i < names.length; ++i) { |
+ var name = names[i]; |
+ if (typeof object === "function") { |
+ if (name === "length" || |
+ name === "name" || |
+ name === "arguments" || |
+ name === "caller" || |
+ name === "prototype") { |
+ continue; |
+ } |
+ } |
+ // Avoid endless recursion. |
+ if (this_name === "prototype" && name === "constructor") continue; |
+ // Could get this from the parent, but having it locally is easier. |
+ var property = { "name": name }; |
+ try { |
+ var value = object[name]; |
+ } catch(e) { |
+ property.type = "getter"; |
+ result[name] = property; |
+ continue; |
+ } |
+ var type = typeof value; |
+ property.type = type; |
+ if (type === "function") { |
+ property.length = value.length; |
+ property.prototype = GetProperties("prototype", value.prototype); |
+ } |
+ property.properties = GetProperties(name, value); |
+ result[name] = property; |
+ } |
+ return result; |
+ }; |
+ |
+ var g = GetProperties("", global, ""); |
+ print(JSON.stringify(g, undefined, 2)); |
+ |
+})(this); // Must wrap in anonymous closure or it'll detect itself as builtin. |