OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #include "src/accessors.h" | 7 #include "src/accessors.h" |
8 #include "src/api.h" | 8 #include "src/api.h" |
9 #include "src/arguments.h" | 9 #include "src/arguments.h" |
10 #include "src/codegen.h" | 10 #include "src/codegen.h" |
(...skipping 983 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
994 | 994 |
995 Handle<Object> accessors = lookup->GetAccessors(); | 995 Handle<Object> accessors = lookup->GetAccessors(); |
996 if (accessors->IsExecutableAccessorInfo()) { | 996 if (accessors->IsExecutableAccessorInfo()) { |
997 Handle<ExecutableAccessorInfo> info = | 997 Handle<ExecutableAccessorInfo> info = |
998 Handle<ExecutableAccessorInfo>::cast(accessors); | 998 Handle<ExecutableAccessorInfo>::cast(accessors); |
999 if (v8::ToCData<Address>(info->getter()) == 0) return slow_stub(); | 999 if (v8::ToCData<Address>(info->getter()) == 0) return slow_stub(); |
1000 if (!ExecutableAccessorInfo::IsCompatibleReceiverType(isolate(), info, | 1000 if (!ExecutableAccessorInfo::IsCompatibleReceiverType(isolate(), info, |
1001 type)) { | 1001 type)) { |
1002 return slow_stub(); | 1002 return slow_stub(); |
1003 } | 1003 } |
1004 if (holder->IsGlobalObject()) return slow_stub(); | 1004 if (!holder->HasFastProperties()) return slow_stub(); |
1005 return compiler.CompileLoadCallback(name, info); | 1005 return compiler.CompileLoadCallback(name, info); |
1006 } | 1006 } |
1007 if (accessors->IsAccessorPair()) { | 1007 if (accessors->IsAccessorPair()) { |
1008 Handle<Object> getter(Handle<AccessorPair>::cast(accessors)->getter(), | 1008 Handle<Object> getter(Handle<AccessorPair>::cast(accessors)->getter(), |
1009 isolate()); | 1009 isolate()); |
1010 if (!getter->IsJSFunction()) return slow_stub(); | 1010 if (!getter->IsJSFunction()) return slow_stub(); |
1011 if (holder->IsGlobalObject()) return slow_stub(); | |
1012 if (!holder->HasFastProperties()) return slow_stub(); | 1011 if (!holder->HasFastProperties()) return slow_stub(); |
1013 Handle<JSFunction> function = Handle<JSFunction>::cast(getter); | 1012 Handle<JSFunction> function = Handle<JSFunction>::cast(getter); |
1014 if (!object->IsJSObject() && !function->IsBuiltin() && | 1013 if (!object->IsJSObject() && !function->IsBuiltin() && |
1015 function->shared()->strict_mode() == SLOPPY) { | 1014 function->shared()->strict_mode() == SLOPPY) { |
1016 // Calling sloppy non-builtins with a value as the receiver | 1015 // Calling sloppy non-builtins with a value as the receiver |
1017 // requires boxing. | 1016 // requires boxing. |
1018 return slow_stub(); | 1017 return slow_stub(); |
1019 } | 1018 } |
1020 CallOptimization call_optimization(function); | 1019 CallOptimization call_optimization(function); |
1021 if (call_optimization.is_simple_api_call() && | 1020 if (call_optimization.is_simple_api_call() && |
(...skipping 2039 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3061 #undef ADDR | 3060 #undef ADDR |
3062 }; | 3061 }; |
3063 | 3062 |
3064 | 3063 |
3065 Address IC::AddressFromUtilityId(IC::UtilityId id) { | 3064 Address IC::AddressFromUtilityId(IC::UtilityId id) { |
3066 return IC_utilities[id]; | 3065 return IC_utilities[id]; |
3067 } | 3066 } |
3068 | 3067 |
3069 | 3068 |
3070 } } // namespace v8::internal | 3069 } } // namespace v8::internal |
OLD | NEW |