OLD | NEW |
1 // Copyright 2006-2008 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2008 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 4607 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4618 return value; | 4618 return value; |
4619 case CONSTANT_FUNCTION: | 4619 case CONSTANT_FUNCTION: |
4620 return result->GetConstantFunction(); | 4620 return result->GetConstantFunction(); |
4621 case CALLBACKS: { | 4621 case CALLBACKS: { |
4622 Object* structure = result->GetCallbackObject(); | 4622 Object* structure = result->GetCallbackObject(); |
4623 if (structure->IsProxy()) { | 4623 if (structure->IsProxy()) { |
4624 AccessorDescriptor* callback = | 4624 AccessorDescriptor* callback = |
4625 reinterpret_cast<AccessorDescriptor*>( | 4625 reinterpret_cast<AccessorDescriptor*>( |
4626 Proxy::cast(structure)->proxy()); | 4626 Proxy::cast(structure)->proxy()); |
4627 value = (callback->getter)(receiver, callback->data); | 4627 value = (callback->getter)(receiver, callback->data); |
4628 if (value->IsFailure()) { | 4628 if (value->IsException()) { |
4629 value = Top::pending_exception(); | 4629 value = Top::pending_exception(); |
4630 Top::clear_pending_exception(); | 4630 Top::clear_pending_exception(); |
4631 if (caught_exception != NULL) { | 4631 if (caught_exception != NULL) { |
4632 *caught_exception = true; | 4632 *caught_exception = true; |
4633 } | 4633 } |
4634 } | 4634 } |
4635 return value; | 4635 return value; |
4636 } else { | 4636 } else { |
4637 return Heap::undefined_value(); | 4637 return Heap::undefined_value(); |
4638 } | 4638 } |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4698 if (result.IsProperty()) { | 4698 if (result.IsProperty()) { |
4699 break; | 4699 break; |
4700 } | 4700 } |
4701 if (i < length - 1) { | 4701 if (i < length - 1) { |
4702 jsproto = Handle<JSObject>(JSObject::cast(jsproto->GetPrototype())); | 4702 jsproto = Handle<JSObject>(JSObject::cast(jsproto->GetPrototype())); |
4703 } | 4703 } |
4704 } | 4704 } |
4705 | 4705 |
4706 if (result.IsProperty()) { | 4706 if (result.IsProperty()) { |
4707 bool caught_exception = false; | 4707 bool caught_exception = false; |
4708 Handle<Object> value(DebugLookupResultValue(*obj, &result, | 4708 Object* value = DebugLookupResultValue(*obj, &result, |
4709 &caught_exception)); | 4709 &caught_exception); |
| 4710 if (value->IsFailure()) return value; |
| 4711 Handle<Object> value_handle(value); |
4710 // If the callback object is a fixed array then it contains JavaScript | 4712 // If the callback object is a fixed array then it contains JavaScript |
4711 // getter and/or setter. | 4713 // getter and/or setter. |
4712 bool hasJavaScriptAccessors = result.type() == CALLBACKS && | 4714 bool hasJavaScriptAccessors = result.type() == CALLBACKS && |
4713 result.GetCallbackObject()->IsFixedArray(); | 4715 result.GetCallbackObject()->IsFixedArray(); |
4714 Handle<FixedArray> details = | 4716 Handle<FixedArray> details = |
4715 Factory::NewFixedArray(hasJavaScriptAccessors ? 5 : 2); | 4717 Factory::NewFixedArray(hasJavaScriptAccessors ? 5 : 2); |
4716 details->set(0, *value); | 4718 details->set(0, *value_handle); |
4717 details->set(1, result.GetPropertyDetails().AsSmi()); | 4719 details->set(1, result.GetPropertyDetails().AsSmi()); |
4718 if (hasJavaScriptAccessors) { | 4720 if (hasJavaScriptAccessors) { |
4719 details->set(2, | 4721 details->set(2, |
4720 caught_exception ? Heap::true_value() : Heap::false_value()); | 4722 caught_exception ? Heap::true_value() : Heap::false_value()); |
4721 details->set(3, FixedArray::cast(result.GetCallbackObject())->get(0)); | 4723 details->set(3, FixedArray::cast(result.GetCallbackObject())->get(0)); |
4722 details->set(4, FixedArray::cast(result.GetCallbackObject())->get(1)); | 4724 details->set(4, FixedArray::cast(result.GetCallbackObject())->get(1)); |
4723 } | 4725 } |
4724 | 4726 |
4725 return *Factory::NewJSArrayWithElements(details); | 4727 return *Factory::NewJSArrayWithElements(details); |
4726 } | 4728 } |
(...skipping 1362 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6089 } else { | 6091 } else { |
6090 // Handle last resort GC and make sure to allow future allocations | 6092 // Handle last resort GC and make sure to allow future allocations |
6091 // to grow the heap without causing GCs (if possible). | 6093 // to grow the heap without causing GCs (if possible). |
6092 Counters::gc_last_resort_from_js.Increment(); | 6094 Counters::gc_last_resort_from_js.Increment(); |
6093 Heap::CollectAllGarbage(); | 6095 Heap::CollectAllGarbage(); |
6094 } | 6096 } |
6095 } | 6097 } |
6096 | 6098 |
6097 | 6099 |
6098 } } // namespace v8::internal | 6100 } } // namespace v8::internal |
OLD | NEW |