Chromium Code Reviews| 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 // Review notes: | 5 // Review notes: |
| 6 // | 6 // |
| 7 // - The use of macros in these inline functions may seem superfluous | 7 // - The use of macros in these inline functions may seem superfluous |
| 8 // but it is absolutely needed to make sure gcc generates optimal | 8 // but it is absolutely needed to make sure gcc generates optimal |
| 9 // code. gcc is not happy when attempting to inline too deep. | 9 // code. gcc is not happy when attempting to inline too deep. |
| 10 // | 10 // |
| (...skipping 1148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1159 Handle<JSReceiver> receiver, | 1159 Handle<JSReceiver> receiver, |
| 1160 uint32_t index, | 1160 uint32_t index, |
| 1161 Handle<Object> value, | 1161 Handle<Object> value, |
| 1162 StrictMode strict_mode) { | 1162 StrictMode strict_mode) { |
| 1163 Isolate* isolate = proxy->GetIsolate(); | 1163 Isolate* isolate = proxy->GetIsolate(); |
| 1164 Handle<String> name = isolate->factory()->Uint32ToString(index); | 1164 Handle<String> name = isolate->factory()->Uint32ToString(index); |
| 1165 return SetPropertyWithHandler(proxy, receiver, name, value, strict_mode); | 1165 return SetPropertyWithHandler(proxy, receiver, name, value, strict_mode); |
| 1166 } | 1166 } |
| 1167 | 1167 |
| 1168 | 1168 |
| 1169 bool JSProxy::HasElementWithHandler(Handle<JSProxy> proxy, uint32_t index) { | 1169 Maybe<bool> JSProxy::HasElementWithHandler(Handle<JSProxy> proxy, |
| 1170 uint32_t index) { | |
| 1170 Isolate* isolate = proxy->GetIsolate(); | 1171 Isolate* isolate = proxy->GetIsolate(); |
| 1171 Handle<String> name = isolate->factory()->Uint32ToString(index); | 1172 Handle<String> name = isolate->factory()->Uint32ToString(index); |
| 1172 return HasPropertyWithHandler(proxy, name); | 1173 return HasPropertyWithHandler(proxy, name); |
| 1173 } | 1174 } |
| 1174 | 1175 |
| 1175 | 1176 |
| 1176 #define FIELD_ADDR(p, offset) \ | 1177 #define FIELD_ADDR(p, offset) \ |
| 1177 (reinterpret_cast<byte*>(p) + offset - kHeapObjectTag) | 1178 (reinterpret_cast<byte*>(p) + offset - kHeapObjectTag) |
| 1178 | 1179 |
| 1179 #define FIELD_ADDR_CONST(p, offset) \ | 1180 #define FIELD_ADDR_CONST(p, offset) \ |
| (...skipping 5442 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 6622 ASSERT(canonical->HasHashCode()); | 6623 ASSERT(canonical->HasHashCode()); |
| 6623 return canonical; | 6624 return canonical; |
| 6624 } | 6625 } |
| 6625 | 6626 |
| 6626 | 6627 |
| 6627 Object* JSReceiver::GetConstructor() { | 6628 Object* JSReceiver::GetConstructor() { |
| 6628 return map()->constructor(); | 6629 return map()->constructor(); |
| 6629 } | 6630 } |
| 6630 | 6631 |
| 6631 | 6632 |
| 6632 bool JSReceiver::HasProperty(Handle<JSReceiver> object, | 6633 Maybe<bool> JSReceiver::HasProperty(Handle<JSReceiver> object, |
| 6633 Handle<Name> name) { | 6634 Handle<Name> name) { |
| 6634 if (object->IsJSProxy()) { | 6635 if (object->IsJSProxy()) { |
| 6635 Handle<JSProxy> proxy = Handle<JSProxy>::cast(object); | 6636 Handle<JSProxy> proxy = Handle<JSProxy>::cast(object); |
| 6636 return JSProxy::HasPropertyWithHandler(proxy, name); | 6637 return JSProxy::HasPropertyWithHandler(proxy, name); |
| 6637 } | 6638 } |
| 6638 return GetPropertyAttributes(object, name) != ABSENT; | 6639 Maybe<PropertyAttributes> result = GetPropertyAttributes(object, name); |
| 6640 if (!result.has_value) return Maybe<bool>(); | |
|
Igor Sheludko
2014/07/25 18:31:41
It would probably be nicer to create a macros for
| |
| 6641 return maybe(result.value != ABSENT); | |
| 6639 } | 6642 } |
| 6640 | 6643 |
| 6641 | 6644 |
| 6642 bool JSReceiver::HasOwnProperty(Handle<JSReceiver> object, Handle<Name> name) { | 6645 Maybe<bool> JSReceiver::HasOwnProperty(Handle<JSReceiver> object, |
| 6646 Handle<Name> name) { | |
| 6643 if (object->IsJSProxy()) { | 6647 if (object->IsJSProxy()) { |
| 6644 Handle<JSProxy> proxy = Handle<JSProxy>::cast(object); | 6648 Handle<JSProxy> proxy = Handle<JSProxy>::cast(object); |
| 6645 return JSProxy::HasPropertyWithHandler(proxy, name); | 6649 return JSProxy::HasPropertyWithHandler(proxy, name); |
| 6646 } | 6650 } |
| 6647 return GetOwnPropertyAttributes(object, name) != ABSENT; | 6651 Maybe<PropertyAttributes> result = GetOwnPropertyAttributes(object, name); |
| 6652 if (!result.has_value) return Maybe<bool>(); | |
| 6653 return maybe(result.value != ABSENT); | |
| 6648 } | 6654 } |
| 6649 | 6655 |
| 6650 | 6656 |
| 6651 PropertyAttributes JSReceiver::GetPropertyAttributes(Handle<JSReceiver> object, | 6657 Maybe<PropertyAttributes> JSReceiver::GetPropertyAttributes( |
| 6652 Handle<Name> key) { | 6658 Handle<JSReceiver> object, Handle<Name> key) { |
| 6653 uint32_t index; | 6659 uint32_t index; |
| 6654 if (object->IsJSObject() && key->AsArrayIndex(&index)) { | 6660 if (object->IsJSObject() && key->AsArrayIndex(&index)) { |
| 6655 return GetElementAttribute(object, index); | 6661 return GetElementAttribute(object, index); |
| 6656 } | 6662 } |
| 6657 LookupIterator it(object, key); | 6663 LookupIterator it(object, key); |
| 6658 return GetPropertyAttributes(&it); | 6664 return GetPropertyAttributes(&it); |
| 6659 } | 6665 } |
| 6660 | 6666 |
| 6661 | 6667 |
| 6662 PropertyAttributes JSReceiver::GetElementAttribute(Handle<JSReceiver> object, | 6668 Maybe<PropertyAttributes> JSReceiver::GetElementAttribute( |
| 6663 uint32_t index) { | 6669 Handle<JSReceiver> object, uint32_t index) { |
| 6664 if (object->IsJSProxy()) { | 6670 if (object->IsJSProxy()) { |
| 6665 return JSProxy::GetElementAttributeWithHandler( | 6671 return JSProxy::GetElementAttributeWithHandler( |
| 6666 Handle<JSProxy>::cast(object), object, index); | 6672 Handle<JSProxy>::cast(object), object, index); |
| 6667 } | 6673 } |
| 6668 return JSObject::GetElementAttributeWithReceiver( | 6674 return JSObject::GetElementAttributeWithReceiver( |
| 6669 Handle<JSObject>::cast(object), object, index, true); | 6675 Handle<JSObject>::cast(object), object, index, true); |
| 6670 } | 6676 } |
| 6671 | 6677 |
| 6672 | 6678 |
| 6673 bool JSGlobalObject::IsDetached() { | 6679 bool JSGlobalObject::IsDetached() { |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 6689 } | 6695 } |
| 6690 | 6696 |
| 6691 | 6697 |
| 6692 Object* JSReceiver::GetIdentityHash() { | 6698 Object* JSReceiver::GetIdentityHash() { |
| 6693 return IsJSProxy() | 6699 return IsJSProxy() |
| 6694 ? JSProxy::cast(this)->GetIdentityHash() | 6700 ? JSProxy::cast(this)->GetIdentityHash() |
| 6695 : JSObject::cast(this)->GetIdentityHash(); | 6701 : JSObject::cast(this)->GetIdentityHash(); |
| 6696 } | 6702 } |
| 6697 | 6703 |
| 6698 | 6704 |
| 6699 bool JSReceiver::HasElement(Handle<JSReceiver> object, uint32_t index) { | 6705 Maybe<bool> JSReceiver::HasElement(Handle<JSReceiver> object, uint32_t index) { |
| 6700 if (object->IsJSProxy()) { | 6706 if (object->IsJSProxy()) { |
| 6701 Handle<JSProxy> proxy = Handle<JSProxy>::cast(object); | 6707 Handle<JSProxy> proxy = Handle<JSProxy>::cast(object); |
| 6702 return JSProxy::HasElementWithHandler(proxy, index); | 6708 return JSProxy::HasElementWithHandler(proxy, index); |
| 6703 } | 6709 } |
| 6704 return JSObject::GetElementAttributeWithReceiver( | 6710 Maybe<PropertyAttributes> result = JSObject::GetElementAttributeWithReceiver( |
| 6705 Handle<JSObject>::cast(object), object, index, true) != ABSENT; | 6711 Handle<JSObject>::cast(object), object, index, true); |
| 6712 if (!result.has_value) return Maybe<bool>(); | |
| 6713 return maybe(result.value != ABSENT); | |
| 6706 } | 6714 } |
| 6707 | 6715 |
| 6708 | 6716 |
| 6709 bool JSReceiver::HasOwnElement(Handle<JSReceiver> object, uint32_t index) { | 6717 Maybe<bool> JSReceiver::HasOwnElement(Handle<JSReceiver> object, |
| 6718 uint32_t index) { | |
| 6710 if (object->IsJSProxy()) { | 6719 if (object->IsJSProxy()) { |
| 6711 Handle<JSProxy> proxy = Handle<JSProxy>::cast(object); | 6720 Handle<JSProxy> proxy = Handle<JSProxy>::cast(object); |
| 6712 return JSProxy::HasElementWithHandler(proxy, index); | 6721 return JSProxy::HasElementWithHandler(proxy, index); |
| 6713 } | 6722 } |
| 6714 return JSObject::GetElementAttributeWithReceiver( | 6723 Maybe<PropertyAttributes> result = JSObject::GetElementAttributeWithReceiver( |
| 6715 Handle<JSObject>::cast(object), object, index, false) != ABSENT; | 6724 Handle<JSObject>::cast(object), object, index, false); |
| 6725 if (!result.has_value) return Maybe<bool>(); | |
| 6726 return maybe(result.value != ABSENT); | |
| 6716 } | 6727 } |
| 6717 | 6728 |
| 6718 | 6729 |
| 6719 PropertyAttributes JSReceiver::GetOwnElementAttribute( | 6730 Maybe<PropertyAttributes> JSReceiver::GetOwnElementAttribute( |
| 6720 Handle<JSReceiver> object, uint32_t index) { | 6731 Handle<JSReceiver> object, uint32_t index) { |
| 6721 if (object->IsJSProxy()) { | 6732 if (object->IsJSProxy()) { |
| 6722 return JSProxy::GetElementAttributeWithHandler( | 6733 return JSProxy::GetElementAttributeWithHandler( |
| 6723 Handle<JSProxy>::cast(object), object, index); | 6734 Handle<JSProxy>::cast(object), object, index); |
| 6724 } | 6735 } |
| 6725 return JSObject::GetElementAttributeWithReceiver( | 6736 return JSObject::GetElementAttributeWithReceiver( |
| 6726 Handle<JSObject>::cast(object), object, index, false); | 6737 Handle<JSObject>::cast(object), object, index, false); |
| 6727 } | 6738 } |
| 6728 | 6739 |
| 6729 | 6740 |
| (...skipping 484 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 7214 #undef READ_SHORT_FIELD | 7225 #undef READ_SHORT_FIELD |
| 7215 #undef WRITE_SHORT_FIELD | 7226 #undef WRITE_SHORT_FIELD |
| 7216 #undef READ_BYTE_FIELD | 7227 #undef READ_BYTE_FIELD |
| 7217 #undef WRITE_BYTE_FIELD | 7228 #undef WRITE_BYTE_FIELD |
| 7218 #undef NOBARRIER_READ_BYTE_FIELD | 7229 #undef NOBARRIER_READ_BYTE_FIELD |
| 7219 #undef NOBARRIER_WRITE_BYTE_FIELD | 7230 #undef NOBARRIER_WRITE_BYTE_FIELD |
| 7220 | 7231 |
| 7221 } } // namespace v8::internal | 7232 } } // namespace v8::internal |
| 7222 | 7233 |
| 7223 #endif // V8_OBJECTS_INL_H_ | 7234 #endif // V8_OBJECTS_INL_H_ |
| OLD | NEW |