Reviewers: Lasse Reichstein,

Description:
Fix map space explosion from changing the arguments and caller properties on
native functions.

Adding these local properties on all native functions made us do a
ConvertDescriptorToField on the callback on each and every native
functions, resulting in us creating an extra map for each of these.

Please review this at http://codereview.chromium.org/7779046/

SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/

Affected files:
  M     src/accessors.cc
  M     src/v8natives.js


Index: src/accessors.cc
===================================================================
--- src/accessors.cc    (revision 9124)
+++ src/accessors.cc    (working copy)
@@ -599,6 +599,7 @@
   if (!found_it) return isolate->heap()->undefined_value();
   Handle<JSFunction> function(holder, isolate);

+  if (function->shared()->native()) return isolate->heap()->null_value();
   // Find the top invocation of the function by traversing frames.
   List<JSFunction*> functions(2);
   for (JavaScriptFrameIterator it(isolate); !it.done(); it.Advance()) {
@@ -732,6 +733,7 @@
   bool found_it = false;
   JSFunction* holder = FindInPrototypeChain<JSFunction>(object, &found_it);
   if (!found_it) return isolate->heap()->undefined_value();
+  if (holder->shared()->native()) return isolate->heap()->null_value();
   Handle<JSFunction> function(holder, isolate);

   FrameFunctionIterator it(isolate, no_alloc);
Index: src/v8natives.js
===================================================================
--- src/v8natives.js    (revision 9124)
+++ src/v8natives.js    (working copy)
@@ -55,15 +55,6 @@
     var f = functions[i + 1];
     %FunctionSetName(f, key);
     %FunctionRemovePrototype(f);
-    // We match firefox on this, but not Safari (which does not have the
-    // property at all).
-    %IgnoreAttributesAndSetProperty(f, "caller",
-                                    null,
-                                    DONT_ENUM | DONT_DELETE);
-    %IgnoreAttributesAndSetProperty(f, "arguments",
-                                    null,
-                                    DONT_ENUM | DONT_DELETE);
-
     %SetProperty(object, key, f, attributes);
     %SetNativeFlag(f);
   }


--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to