Make ComputeReceiverForNonGlobal faster
by checking instance type rather than constructor. BUG=chromium:461734 LOG=n R=verwaest@chromium.org Review URL: https://codereview.chromium.org/953283004 Cr-Commit-Position: refs/heads/master@{#26856}
This commit is contained in:
parent
726eb0582b
commit
c8479785fc
@ -855,16 +855,14 @@ RUNTIME_FUNCTION(Runtime_DeleteLookupSlot) {
|
||||
|
||||
static Object* ComputeReceiverForNonGlobal(Isolate* isolate, JSObject* holder) {
|
||||
DCHECK(!holder->IsGlobalObject());
|
||||
Context* top = isolate->context();
|
||||
// Get the context extension function.
|
||||
JSFunction* context_extension_function =
|
||||
top->native_context()->context_extension_function();
|
||||
|
||||
// If the holder isn't a context extension object, we just return it
|
||||
// as the receiver. This allows arguments objects to be used as
|
||||
// receivers, but only if they are put in the context scope chain
|
||||
// explicitly via a with-statement.
|
||||
Object* constructor = holder->map()->GetConstructor();
|
||||
if (constructor != context_extension_function) return holder;
|
||||
if (holder->map()->instance_type() != JS_CONTEXT_EXTENSION_OBJECT_TYPE) {
|
||||
return holder;
|
||||
}
|
||||
// Fall back to using the global object as the implicit receiver if
|
||||
// the property turns out to be a local variable allocated in a
|
||||
// context extension object - introduced via eval.
|
||||
|
Loading…
Reference in New Issue
Block a user