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. Review URL: http://codereview.chromium.org/7779046 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@9152 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
d451878c91
commit
df9d8ee8be
@ -599,6 +599,7 @@ MaybeObject* Accessors::FunctionGetArguments(Object* object, void*) {
|
||||
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 @@ MaybeObject* Accessors::FunctionGetCaller(Object* object, void*) {
|
||||
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);
|
||||
|
@ -54,15 +54,6 @@ function InstallFunctions(object, attributes, functions) {
|
||||
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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user