From: verwaest@chromium.org Date: Tue, 10 Dec 2013 13:11:08 +0000 (+0000) Subject: Fix patching the receiver (global object -> global proxy) after the interceptor. X-Git-Tag: upstream/4.7.83~11397 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7ee571bee6829cc2b7b57e5a76dfe0a1c1d4f609;p=platform%2Fupstream%2Fv8.git Fix patching the receiver (global object -> global proxy) after the interceptor. This is a temporary fix that will be replaced by loading the proxy from the target function. R=dcarney@chromium.org Review URL: https://chromiumcodereview.appspot.com/108913006 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@18286 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- diff --git a/src/arm/stub-cache-arm.cc b/src/arm/stub-cache-arm.cc index 9d1418b..5ee4803 100644 --- a/src/arm/stub-cache-arm.cc +++ b/src/arm/stub-cache-arm.cc @@ -1019,7 +1019,7 @@ class CallInterceptorCompiler BASE_EMBEDDED { // holder haven't changed and thus we can use cached constant function. if (*interceptor_holder != lookup->holder()) { stub_compiler_->CheckPrototypes( - IC::CurrentTypeOf(interceptor_holder, masm->isolate()), receiver, + IC::CurrentTypeOf(interceptor_holder, masm->isolate()), holder, handle(lookup->holder()), scratch1, scratch2, scratch3, name, depth2, miss); } else { @@ -1036,7 +1036,7 @@ class CallInterceptorCompiler BASE_EMBEDDED { masm, optimization, arguments_.immediate(), false); } else { Handle function = optimization.constant_function(); - stub_compiler_->GenerateJumpFunctionIgnoreReceiver(function); + stub_compiler_->GenerateJumpFunction(object, function); } // Deferred code for fast API call case---clean preallocated space. @@ -1094,7 +1094,7 @@ class CallInterceptorCompiler BASE_EMBEDDED { masm, receiver, holder, name_, holder_obj, IC::kLoadPropertyWithInterceptorOnly); __ pop(name_); // Restore the name. - __ pop(receiver); // Restore the holder. + __ pop(holder); // Restore the holder. } // If interceptor returns no-result sentinel, call the constant function. __ LoadRoot(scratch, Heap::kNoInterceptorResultSentinelRootIndex); diff --git a/src/ia32/stub-cache-ia32.cc b/src/ia32/stub-cache-ia32.cc index 88923c3..34045d7 100644 --- a/src/ia32/stub-cache-ia32.cc +++ b/src/ia32/stub-cache-ia32.cc @@ -739,7 +739,7 @@ class CallInterceptorCompiler BASE_EMBEDDED { // holder haven't changed and thus we can use cached constant function. if (*interceptor_holder != lookup->holder()) { stub_compiler_->CheckPrototypes( - IC::CurrentTypeOf(interceptor_holder, masm->isolate()), receiver, + IC::CurrentTypeOf(interceptor_holder, masm->isolate()), holder, handle(lookup->holder()), scratch1, scratch2, scratch3, name, depth2, miss); } else { @@ -755,7 +755,7 @@ class CallInterceptorCompiler BASE_EMBEDDED { GenerateFastApiCall(masm, optimization, arguments_.immediate()); } else { Handle fun = optimization.constant_function(); - stub_compiler_->GenerateJumpFunctionIgnoreReceiver(fun); + stub_compiler_->GenerateJumpFunction(object, fun); } // Deferred code for fast API call case---clean preallocated space. @@ -815,7 +815,7 @@ class CallInterceptorCompiler BASE_EMBEDDED { IC::kLoadPropertyWithInterceptorOnly); __ pop(name_); // Restore the name. - __ pop(receiver); // Restore the holder. + __ pop(holder); // Restore the holder. // Leave the internal frame. } diff --git a/src/x64/stub-cache-x64.cc b/src/x64/stub-cache-x64.cc index 9cfcf46..5a1bbd8 100644 --- a/src/x64/stub-cache-x64.cc +++ b/src/x64/stub-cache-x64.cc @@ -731,7 +731,7 @@ class CallInterceptorCompiler BASE_EMBEDDED { // holder haven't changed and thus we can use cached constant function. if (*interceptor_holder != lookup->holder()) { stub_compiler_->CheckPrototypes( - IC::CurrentTypeOf(interceptor_holder, masm->isolate()), receiver, + IC::CurrentTypeOf(interceptor_holder, masm->isolate()), holder, handle(lookup->holder()), scratch1, scratch2, scratch3, name, depth2, miss); } else { @@ -747,7 +747,7 @@ class CallInterceptorCompiler BASE_EMBEDDED { GenerateFastApiCall(masm, optimization, arguments_.immediate()); } else { Handle fun = optimization.constant_function(); - stub_compiler_->GenerateJumpFunctionIgnoreReceiver(fun); + stub_compiler_->GenerateJumpFunction(object, fun); } // Deferred code for fast API call case---clean preallocated space. @@ -807,7 +807,7 @@ class CallInterceptorCompiler BASE_EMBEDDED { IC::kLoadPropertyWithInterceptorOnly); __ pop(name_); // Restore the name. - __ pop(receiver); // Restore the holder. + __ pop(holder); // Restore the holder. // Leave the internal frame. }