OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 1878 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1889 if (prototype->IsNull()) return isolate->heap()->false_value(); | 1889 if (prototype->IsNull()) return isolate->heap()->false_value(); |
1890 if (*O == *prototype) return isolate->heap()->true_value(); | 1890 if (*O == *prototype) return isolate->heap()->true_value(); |
1891 V = prototype; | 1891 V = prototype; |
1892 } | 1892 } |
1893 } | 1893 } |
1894 | 1894 |
1895 | 1895 |
1896 static bool CheckAccessException(Object* callback, | 1896 static bool CheckAccessException(Object* callback, |
1897 v8::AccessType access_type) { | 1897 v8::AccessType access_type) { |
1898 DisallowHeapAllocation no_gc; | 1898 DisallowHeapAllocation no_gc; |
| 1899 ASSERT(!callback->IsForeign()); |
1899 if (callback->IsAccessorInfo()) { | 1900 if (callback->IsAccessorInfo()) { |
1900 AccessorInfo* info = AccessorInfo::cast(callback); | 1901 AccessorInfo* info = AccessorInfo::cast(callback); |
1901 return | 1902 return |
1902 (access_type == v8::ACCESS_HAS && | 1903 (access_type == v8::ACCESS_HAS && |
1903 (info->all_can_read() || info->all_can_write())) || | 1904 (info->all_can_read() || info->all_can_write())) || |
1904 (access_type == v8::ACCESS_GET && info->all_can_read()) || | 1905 (access_type == v8::ACCESS_GET && info->all_can_read()) || |
1905 (access_type == v8::ACCESS_SET && info->all_can_write()); | 1906 (access_type == v8::ACCESS_SET && info->all_can_write()); |
1906 } | 1907 } |
1907 if (callback->IsAccessorPair()) { | 1908 if (callback->IsAccessorPair()) { |
1908 AccessorPair* info = AccessorPair::cast(callback); | 1909 AccessorPair* info = AccessorPair::cast(callback); |
(...skipping 3329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5238 LookupResult lookup(isolate); | 5239 LookupResult lookup(isolate); |
5239 js_object->LocalLookupRealNamedProperty(*name, &lookup); | 5240 js_object->LocalLookupRealNamedProperty(*name, &lookup); |
5240 | 5241 |
5241 // Special case for callback properties. | 5242 // Special case for callback properties. |
5242 if (lookup.IsPropertyCallbacks()) { | 5243 if (lookup.IsPropertyCallbacks()) { |
5243 Handle<Object> callback(lookup.GetCallbackObject(), isolate); | 5244 Handle<Object> callback(lookup.GetCallbackObject(), isolate); |
5244 // Avoid redefining callback as data property, just use the stored | 5245 // Avoid redefining callback as data property, just use the stored |
5245 // setter to update the value instead. | 5246 // setter to update the value instead. |
5246 // TODO(mstarzinger): So far this only works if property attributes don't | 5247 // TODO(mstarzinger): So far this only works if property attributes don't |
5247 // change, this should be fixed once we cleanup the underlying code. | 5248 // change, this should be fixed once we cleanup the underlying code. |
5248 if ((callback->IsForeign() || callback->IsAccessorInfo()) && | 5249 ASSERT(!callback->IsForeign()); |
| 5250 if (callback->IsAccessorInfo() && |
5249 lookup.GetAttributes() == attr) { | 5251 lookup.GetAttributes() == attr) { |
5250 Handle<Object> result_object; | 5252 Handle<Object> result_object; |
5251 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 5253 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
5252 isolate, result_object, | 5254 isolate, result_object, |
5253 JSObject::SetPropertyWithCallback(js_object, | 5255 JSObject::SetPropertyWithCallback(js_object, |
5254 callback, | 5256 callback, |
5255 name, | 5257 name, |
5256 obj_value, | 5258 obj_value, |
5257 handle(lookup.holder()), | 5259 handle(lookup.holder()), |
5258 STRICT)); | 5260 STRICT)); |
(...skipping 5546 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10805 break; | 10807 break; |
10806 case FIELD: | 10808 case FIELD: |
10807 value = JSObject::FastPropertyAt(handle(result->holder(), isolate), | 10809 value = JSObject::FastPropertyAt(handle(result->holder(), isolate), |
10808 result->representation(), | 10810 result->representation(), |
10809 result->GetFieldIndex().field_index()); | 10811 result->GetFieldIndex().field_index()); |
10810 break; | 10812 break; |
10811 case CONSTANT: | 10813 case CONSTANT: |
10812 return handle(result->GetConstant(), isolate); | 10814 return handle(result->GetConstant(), isolate); |
10813 case CALLBACKS: { | 10815 case CALLBACKS: { |
10814 Handle<Object> structure(result->GetCallbackObject(), isolate); | 10816 Handle<Object> structure(result->GetCallbackObject(), isolate); |
10815 if (structure->IsForeign() || structure->IsAccessorInfo()) { | 10817 ASSERT(!structure->IsForeign()); |
| 10818 if (structure->IsAccessorInfo()) { |
10816 MaybeHandle<Object> obj = JSObject::GetPropertyWithCallback( | 10819 MaybeHandle<Object> obj = JSObject::GetPropertyWithCallback( |
10817 handle(result->holder(), isolate), receiver, structure, name); | 10820 handle(result->holder(), isolate), receiver, structure, name); |
10818 if (!obj.ToHandle(&value)) { | 10821 if (!obj.ToHandle(&value)) { |
10819 value = handle(isolate->pending_exception(), isolate); | 10822 value = handle(isolate->pending_exception(), isolate); |
10820 isolate->clear_pending_exception(); | 10823 isolate->clear_pending_exception(); |
10821 if (has_caught != NULL) *has_caught = true; | 10824 if (has_caught != NULL) *has_caught = true; |
10822 return value; | 10825 return value; |
10823 } | 10826 } |
10824 } | 10827 } |
10825 break; | 10828 break; |
(...skipping 4318 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
15144 } | 15147 } |
15145 return NULL; | 15148 return NULL; |
15146 } | 15149 } |
15147 | 15150 |
15148 | 15151 |
15149 const Runtime::Function* Runtime::FunctionForId(Runtime::FunctionId id) { | 15152 const Runtime::Function* Runtime::FunctionForId(Runtime::FunctionId id) { |
15150 return &(kIntrinsicFunctions[static_cast<int>(id)]); | 15153 return &(kIntrinsicFunctions[static_cast<int>(id)]); |
15151 } | 15154 } |
15152 | 15155 |
15153 } } // namespace v8::internal | 15156 } } // namespace v8::internal |
OLD | NEW |