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 3062 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3073 case INTERCEPTOR: { | 3073 case INTERCEPTOR: { |
3074 LookupIterator it(object, name, handle(result.holder())); | 3074 LookupIterator it(object, name, handle(result.holder())); |
3075 PropertyAttributes attr = GetPropertyAttributes(&it); | 3075 PropertyAttributes attr = GetPropertyAttributes(&it); |
3076 *done = !!(attr & READ_ONLY); | 3076 *done = !!(attr & READ_ONLY); |
3077 break; | 3077 break; |
3078 } | 3078 } |
3079 case CALLBACKS: { | 3079 case CALLBACKS: { |
3080 *done = true; | 3080 *done = true; |
3081 if (!result.IsReadOnly()) { | 3081 if (!result.IsReadOnly()) { |
3082 Handle<Object> callback_object(result.GetCallbackObject(), isolate); | 3082 Handle<Object> callback_object(result.GetCallbackObject(), isolate); |
3083 // Only store via executable access info setters if the holder is the | |
3084 // receiver or on its hidden prototype chain. | |
3085 if (callback_object->IsExecutableAccessorInfo()) { | |
3086 Handle<JSObject> current = object; | |
3087 while (*current != result.holder()) { | |
3088 // There is a callbacks holder, so we are guaranteed that all | |
3089 // objects in between are JSObjects. | |
3090 Handle<JSObject> prototype( | |
3091 JSObject::cast(current->GetPrototype())); | |
3092 if (!current->IsJSGlobalProxy() && | |
3093 !prototype->map()->is_hidden_prototype()) { | |
3094 *done = result.IsReadOnly(); | |
mvstanton
2014/07/03 09:33:08
How about *done = false, because result.IsReadOnly
| |
3095 break; | |
3096 } | |
3097 current = prototype; | |
3098 } | |
3099 if (*current != result.holder()) break; | |
mvstanton
2014/07/03 09:33:08
comment to explain this break.
| |
3100 } | |
3083 return SetPropertyWithCallback(object, name, value, | 3101 return SetPropertyWithCallback(object, name, value, |
3084 handle(result.holder()), | 3102 handle(result.holder()), |
3085 callback_object, strict_mode); | 3103 callback_object, strict_mode); |
3086 } | 3104 } |
3087 break; | 3105 break; |
3088 } | 3106 } |
3089 case HANDLER: { | 3107 case HANDLER: { |
3090 Handle<JSProxy> proxy(result.proxy()); | 3108 Handle<JSProxy> proxy(result.proxy()); |
3091 return JSProxy::SetPropertyViaPrototypesWithHandler( | 3109 return JSProxy::SetPropertyViaPrototypesWithHandler( |
3092 proxy, object, name, value, attributes, strict_mode, done); | 3110 proxy, object, name, value, attributes, strict_mode, done); |
(...skipping 13876 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
16969 #define ERROR_MESSAGES_TEXTS(C, T) T, | 16987 #define ERROR_MESSAGES_TEXTS(C, T) T, |
16970 static const char* error_messages_[] = { | 16988 static const char* error_messages_[] = { |
16971 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) | 16989 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) |
16972 }; | 16990 }; |
16973 #undef ERROR_MESSAGES_TEXTS | 16991 #undef ERROR_MESSAGES_TEXTS |
16974 return error_messages_[reason]; | 16992 return error_messages_[reason]; |
16975 } | 16993 } |
16976 | 16994 |
16977 | 16995 |
16978 } } // namespace v8::internal | 16996 } } // namespace v8::internal |
OLD | NEW |