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 3089 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3100 return value; | 3100 return value; |
3101 } | 3101 } |
3102 | 3102 |
3103 | 3103 |
3104 MaybeHandle<Object> Object::AddDataProperty(LookupIterator* it, | 3104 MaybeHandle<Object> Object::AddDataProperty(LookupIterator* it, |
3105 Handle<Object> value, | 3105 Handle<Object> value, |
3106 PropertyAttributes attributes, | 3106 PropertyAttributes attributes, |
3107 StrictMode strict_mode, | 3107 StrictMode strict_mode, |
3108 StoreFromKeyed store_mode) { | 3108 StoreFromKeyed store_mode) { |
3109 ASSERT(!it->GetReceiver()->IsJSProxy()); | 3109 ASSERT(!it->GetReceiver()->IsJSProxy()); |
3110 // Transitions to data properties of value wrappers are not observable. | 3110 if (!it->GetReceiver()->IsJSObject()) { |
3111 if (!it->GetReceiver()->IsJSObject()) return value; | 3111 // TODO(verwaest): Throw a TypeError with a more specific message. |
| 3112 return WriteToReadOnlyProperty(it, value, strict_mode); |
| 3113 } |
3112 Handle<JSObject> receiver = Handle<JSObject>::cast(it->GetReceiver()); | 3114 Handle<JSObject> receiver = Handle<JSObject>::cast(it->GetReceiver()); |
3113 | 3115 |
3114 // If the receiver is a JSGlobalProxy, store on the prototype (JSGlobalObject) | 3116 // If the receiver is a JSGlobalProxy, store on the prototype (JSGlobalObject) |
3115 // instead. If the prototype is Null, the proxy is detached. | 3117 // instead. If the prototype is Null, the proxy is detached. |
3116 if (receiver->IsJSGlobalProxy()) { | 3118 if (receiver->IsJSGlobalProxy()) { |
3117 // Trying to assign to a detached proxy. | 3119 // Trying to assign to a detached proxy. |
3118 PrototypeIterator iter(it->isolate(), receiver); | 3120 PrototypeIterator iter(it->isolate(), receiver); |
3119 if (iter.IsAtEnd()) return value; | 3121 if (iter.IsAtEnd()) return value; |
3120 receiver = | 3122 receiver = |
3121 Handle<JSGlobalObject>::cast(PrototypeIterator::GetCurrent(iter)); | 3123 Handle<JSGlobalObject>::cast(PrototypeIterator::GetCurrent(iter)); |
(...skipping 13816 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
16938 #define ERROR_MESSAGES_TEXTS(C, T) T, | 16940 #define ERROR_MESSAGES_TEXTS(C, T) T, |
16939 static const char* error_messages_[] = { | 16941 static const char* error_messages_[] = { |
16940 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) | 16942 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) |
16941 }; | 16943 }; |
16942 #undef ERROR_MESSAGES_TEXTS | 16944 #undef ERROR_MESSAGES_TEXTS |
16943 return error_messages_[reason]; | 16945 return error_messages_[reason]; |
16944 } | 16946 } |
16945 | 16947 |
16946 | 16948 |
16947 } } // namespace v8::internal | 16949 } } // namespace v8::internal |
OLD | NEW |