OLD | NEW |
1 // Copyright 2006-2009 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2009 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 7194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7205 // compiled function and the actual requested break point might be in one of | 7205 // compiled function and the actual requested break point might be in one of |
7206 // these functions. | 7206 // these functions. |
7207 bool done = false; | 7207 bool done = false; |
7208 // The current candidate for the source position: | 7208 // The current candidate for the source position: |
7209 int target_start_position = RelocInfo::kNoPosition; | 7209 int target_start_position = RelocInfo::kNoPosition; |
7210 Handle<SharedFunctionInfo> target; | 7210 Handle<SharedFunctionInfo> target; |
7211 // The current candidate for the last function in script: | 7211 // The current candidate for the last function in script: |
7212 Handle<SharedFunctionInfo> last; | 7212 Handle<SharedFunctionInfo> last; |
7213 while (!done) { | 7213 while (!done) { |
7214 HeapIterator iterator; | 7214 HeapIterator iterator; |
7215 while (iterator.has_next()) { | 7215 for (HeapObject* obj = iterator.next(); |
7216 HeapObject* obj = iterator.next(); | 7216 obj != NULL; obj = iterator.next()) { |
7217 ASSERT(obj != NULL); | |
7218 if (obj->IsSharedFunctionInfo()) { | 7217 if (obj->IsSharedFunctionInfo()) { |
7219 Handle<SharedFunctionInfo> shared(SharedFunctionInfo::cast(obj)); | 7218 Handle<SharedFunctionInfo> shared(SharedFunctionInfo::cast(obj)); |
7220 if (shared->script() == *script) { | 7219 if (shared->script() == *script) { |
7221 // If the SharedFunctionInfo found has the requested script data and | 7220 // If the SharedFunctionInfo found has the requested script data and |
7222 // contains the source position it is a candidate. | 7221 // contains the source position it is a candidate. |
7223 int start_position = shared->function_token_position(); | 7222 int start_position = shared->function_token_position(); |
7224 if (start_position == RelocInfo::kNoPosition) { | 7223 if (start_position == RelocInfo::kNoPosition) { |
7225 start_position = shared->start_position(); | 7224 start_position = shared->start_position(); |
7226 } | 7225 } |
7227 if (start_position <= position && | 7226 if (start_position <= position && |
(...skipping 435 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7663 Object* instance_filter, int max_references, | 7662 Object* instance_filter, int max_references, |
7664 FixedArray* instances, int instances_size, | 7663 FixedArray* instances, int instances_size, |
7665 JSFunction* arguments_function) { | 7664 JSFunction* arguments_function) { |
7666 NoHandleAllocation ha; | 7665 NoHandleAllocation ha; |
7667 AssertNoAllocation no_alloc; | 7666 AssertNoAllocation no_alloc; |
7668 | 7667 |
7669 // Iterate the heap. | 7668 // Iterate the heap. |
7670 int count = 0; | 7669 int count = 0; |
7671 JSObject* last = NULL; | 7670 JSObject* last = NULL; |
7672 HeapIterator iterator; | 7671 HeapIterator iterator; |
7673 while (iterator.has_next() && | 7672 HeapObject* heap_obj = NULL; |
| 7673 while (((heap_obj = iterator.next()) != NULL) && |
7674 (max_references == 0 || count < max_references)) { | 7674 (max_references == 0 || count < max_references)) { |
7675 // Only look at all JSObjects. | 7675 // Only look at all JSObjects. |
7676 HeapObject* heap_obj = iterator.next(); | |
7677 if (heap_obj->IsJSObject()) { | 7676 if (heap_obj->IsJSObject()) { |
7678 // Skip context extension objects and argument arrays as these are | 7677 // Skip context extension objects and argument arrays as these are |
7679 // checked in the context of functions using them. | 7678 // checked in the context of functions using them. |
7680 JSObject* obj = JSObject::cast(heap_obj); | 7679 JSObject* obj = JSObject::cast(heap_obj); |
7681 if (obj->IsJSContextExtensionObject() || | 7680 if (obj->IsJSContextExtensionObject() || |
7682 obj->map()->constructor() == arguments_function) { | 7681 obj->map()->constructor() == arguments_function) { |
7683 continue; | 7682 continue; |
7684 } | 7683 } |
7685 | 7684 |
7686 // Check if the JS object has a reference to the object looked for. | 7685 // Check if the JS object has a reference to the object looked for. |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7776 | 7775 |
7777 | 7776 |
7778 // Helper function used by Runtime_DebugConstructedBy below. | 7777 // Helper function used by Runtime_DebugConstructedBy below. |
7779 static int DebugConstructedBy(JSFunction* constructor, int max_references, | 7778 static int DebugConstructedBy(JSFunction* constructor, int max_references, |
7780 FixedArray* instances, int instances_size) { | 7779 FixedArray* instances, int instances_size) { |
7781 AssertNoAllocation no_alloc; | 7780 AssertNoAllocation no_alloc; |
7782 | 7781 |
7783 // Iterate the heap. | 7782 // Iterate the heap. |
7784 int count = 0; | 7783 int count = 0; |
7785 HeapIterator iterator; | 7784 HeapIterator iterator; |
7786 while (iterator.has_next() && | 7785 HeapObject* heap_obj = NULL; |
| 7786 while (((heap_obj = iterator.next()) != NULL) && |
7787 (max_references == 0 || count < max_references)) { | 7787 (max_references == 0 || count < max_references)) { |
7788 // Only look at all JSObjects. | 7788 // Only look at all JSObjects. |
7789 HeapObject* heap_obj = iterator.next(); | |
7790 if (heap_obj->IsJSObject()) { | 7789 if (heap_obj->IsJSObject()) { |
7791 JSObject* obj = JSObject::cast(heap_obj); | 7790 JSObject* obj = JSObject::cast(heap_obj); |
7792 if (obj->map()->constructor() == constructor) { | 7791 if (obj->map()->constructor() == constructor) { |
7793 // Valid reference found add to instance array if supplied an update | 7792 // Valid reference found add to instance array if supplied an update |
7794 // count. | 7793 // count. |
7795 if (instances != NULL && count < instances_size) { | 7794 if (instances != NULL && count < instances_size) { |
7796 instances->set(count, obj); | 7795 instances->set(count, obj); |
7797 } | 7796 } |
7798 count++; | 7797 count++; |
7799 } | 7798 } |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7927 // for the requested break point. For lazily compiled functions several heap | 7926 // for the requested break point. For lazily compiled functions several heap |
7928 // traversals might be required rendering this operation as a rather slow | 7927 // traversals might be required rendering this operation as a rather slow |
7929 // operation. However for setting break points which is normally done through | 7928 // operation. However for setting break points which is normally done through |
7930 // some kind of user interaction the performance is not crucial. | 7929 // some kind of user interaction the performance is not crucial. |
7931 static Handle<Object> Runtime_GetScriptFromScriptName( | 7930 static Handle<Object> Runtime_GetScriptFromScriptName( |
7932 Handle<String> script_name) { | 7931 Handle<String> script_name) { |
7933 // Scan the heap for Script objects to find the script with the requested | 7932 // Scan the heap for Script objects to find the script with the requested |
7934 // script data. | 7933 // script data. |
7935 Handle<Script> script; | 7934 Handle<Script> script; |
7936 HeapIterator iterator; | 7935 HeapIterator iterator; |
7937 while (script.is_null() && iterator.has_next()) { | 7936 HeapObject* obj = NULL; |
7938 HeapObject* obj = iterator.next(); | 7937 while (script.is_null() && ((obj = iterator.next()) != NULL)) { |
7939 // If a script is found check if it has the script data requested. | 7938 // If a script is found check if it has the script data requested. |
7940 if (obj->IsScript()) { | 7939 if (obj->IsScript()) { |
7941 if (Script::cast(obj)->name()->IsString()) { | 7940 if (Script::cast(obj)->name()->IsString()) { |
7942 if (String::cast(Script::cast(obj)->name())->Equals(*script_name)) { | 7941 if (String::cast(Script::cast(obj)->name())->Equals(*script_name)) { |
7943 script = Handle<Script>(Script::cast(obj)); | 7942 script = Handle<Script>(Script::cast(obj)); |
7944 } | 7943 } |
7945 } | 7944 } |
7946 } | 7945 } |
7947 } | 7946 } |
7948 | 7947 |
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8164 } else { | 8163 } else { |
8165 // Handle last resort GC and make sure to allow future allocations | 8164 // Handle last resort GC and make sure to allow future allocations |
8166 // to grow the heap without causing GCs (if possible). | 8165 // to grow the heap without causing GCs (if possible). |
8167 Counters::gc_last_resort_from_js.Increment(); | 8166 Counters::gc_last_resort_from_js.Increment(); |
8168 Heap::CollectAllGarbage(false); | 8167 Heap::CollectAllGarbage(false); |
8169 } | 8168 } |
8170 } | 8169 } |
8171 | 8170 |
8172 | 8171 |
8173 } } // namespace v8::internal | 8172 } } // namespace v8::internal |
OLD | NEW |