| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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/allocation-site-scopes.h" | 8 #include "src/allocation-site-scopes.h" |
| 9 #include "src/api.h" | 9 #include "src/api.h" |
| 10 #include "src/arguments.h" | 10 #include "src/arguments.h" |
| (...skipping 3076 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3087 case INTERCEPTOR: { | 3087 case INTERCEPTOR: { |
| 3088 LookupIterator it(object, name, handle(result.holder())); | 3088 LookupIterator it(object, name, handle(result.holder())); |
| 3089 PropertyAttributes attr = GetPropertyAttributes(&it); | 3089 PropertyAttributes attr = GetPropertyAttributes(&it); |
| 3090 *done = !!(attr & READ_ONLY); | 3090 *done = !!(attr & READ_ONLY); |
| 3091 break; | 3091 break; |
| 3092 } | 3092 } |
| 3093 case CALLBACKS: { | 3093 case CALLBACKS: { |
| 3094 *done = true; | 3094 *done = true; |
| 3095 if (!result.IsReadOnly()) { | 3095 if (!result.IsReadOnly()) { |
| 3096 Handle<Object> callback_object(result.GetCallbackObject(), isolate); | 3096 Handle<Object> callback_object(result.GetCallbackObject(), isolate); |
| 3097 // Only store via executable access info setters if the holder is the | |
| 3098 // receiver or on its hidden prototype chain. | |
| 3099 if (callback_object->IsExecutableAccessorInfo()) { | |
| 3100 Handle<JSObject> current = object; | |
| 3101 while (*current != result.holder()) { | |
| 3102 // There is a callbacks holder, so we are guaranteed that all | |
| 3103 // objects in between are JSObjects. | |
| 3104 Handle<JSObject> prototype( | |
| 3105 JSObject::cast(current->GetPrototype())); | |
| 3106 if (!current->IsJSGlobalProxy() && | |
| 3107 !prototype->map()->is_hidden_prototype()) { | |
| 3108 *done = false; | |
| 3109 break; | |
| 3110 } | |
| 3111 current = prototype; | |
| 3112 } | |
| 3113 // Break out of the switch after breaking out of the loop above. | |
| 3114 if (*current != result.holder()) break; | |
| 3115 } | |
| 3116 return SetPropertyWithCallback(object, name, value, | 3097 return SetPropertyWithCallback(object, name, value, |
| 3117 handle(result.holder()), | 3098 handle(result.holder()), |
| 3118 callback_object, strict_mode); | 3099 callback_object, strict_mode); |
| 3119 } | 3100 } |
| 3120 break; | 3101 break; |
| 3121 } | 3102 } |
| 3122 case HANDLER: { | 3103 case HANDLER: { |
| 3123 Handle<JSProxy> proxy(result.proxy()); | 3104 Handle<JSProxy> proxy(result.proxy()); |
| 3124 return JSProxy::SetPropertyViaPrototypesWithHandler( | 3105 return JSProxy::SetPropertyViaPrototypesWithHandler( |
| 3125 proxy, object, name, value, attributes, strict_mode, done); | 3106 proxy, object, name, value, attributes, strict_mode, done); |
| (...skipping 13879 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 17005 #define ERROR_MESSAGES_TEXTS(C, T) T, | 16986 #define ERROR_MESSAGES_TEXTS(C, T) T, |
| 17006 static const char* error_messages_[] = { | 16987 static const char* error_messages_[] = { |
| 17007 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) | 16988 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) |
| 17008 }; | 16989 }; |
| 17009 #undef ERROR_MESSAGES_TEXTS | 16990 #undef ERROR_MESSAGES_TEXTS |
| 17010 return error_messages_[reason]; | 16991 return error_messages_[reason]; |
| 17011 } | 16992 } |
| 17012 | 16993 |
| 17013 | 16994 |
| 17014 } } // namespace v8::internal | 16995 } } // namespace v8::internal |
| OLD | NEW |