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 2392 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2403 | 2403 |
2404 // Add the (name, code) pair to the new cache. | 2404 // Add the (name, code) pair to the new cache. |
2405 cache = FixedArray::cast(result); | 2405 cache = FixedArray::cast(result); |
2406 cache->set(length + 0, name); | 2406 cache->set(length + 0, name); |
2407 cache->set(length + 1, code); | 2407 cache->set(length + 1, code); |
2408 set_code_cache(cache); | 2408 set_code_cache(cache); |
2409 return this; | 2409 return this; |
2410 } | 2410 } |
2411 | 2411 |
2412 | 2412 |
2413 Object* Map::FindInCodeCache(String* name, Code::Flags flags) { | 2413 Object* Map::FindIndexInCodeCache(String* name, Code::Flags flags, int* index) { |
2414 FixedArray* cache = code_cache(); | 2414 FixedArray* cache = code_cache(); |
2415 int length = cache->length(); | 2415 int length = cache->length(); |
2416 for (int i = 0; i < length; i += 2) { | 2416 for (int i = 0; i < length; i += 2) { |
2417 Object* key = cache->get(i); | 2417 Object* key = cache->get(i); |
2418 if (key->IsUndefined()) { | 2418 if (key->IsUndefined()) { |
2419 return key; | 2419 continue; |
2420 } | 2420 } |
2421 if (name->Equals(String::cast(key))) { | 2421 if (name->Equals(String::cast(key))) { |
2422 Code* code = Code::cast(cache->get(i + 1)); | 2422 Code* code = Code::cast(cache->get(i + 1)); |
2423 if (code->flags() == flags) return code; | 2423 if (code->flags() == flags) { |
| 2424 *index = i + 1; |
| 2425 return code; |
| 2426 } |
2424 } | 2427 } |
2425 } | 2428 } |
| 2429 *index = -1; |
2426 return Heap::undefined_value(); | 2430 return Heap::undefined_value(); |
2427 } | 2431 } |
2428 | 2432 |
2429 | 2433 |
2430 int Map::IndexInCodeCache(Code* code) { | |
2431 FixedArray* array = code_cache(); | |
2432 int len = array->length(); | |
2433 for (int i = 0; i < len; i += 2) { | |
2434 if (array->get(i + 1) == code) return i + 1; | |
2435 } | |
2436 return -1; | |
2437 } | |
2438 | |
2439 | |
2440 void Map::RemoveFromCodeCache(int index) { | |
2441 FixedArray* array = code_cache(); | |
2442 ASSERT(array->length() >= index && array->get(index)->IsCode()); | |
2443 array->set_undefined(index - 1); // key | |
2444 array->set_undefined(index); // code | |
2445 } | |
2446 | |
2447 | |
2448 void FixedArray::FixedArrayIterateBody(ObjectVisitor* v) { | 2434 void FixedArray::FixedArrayIterateBody(ObjectVisitor* v) { |
2449 IteratePointers(v, kHeaderSize, kHeaderSize + length() * kPointerSize); | 2435 IteratePointers(v, kHeaderSize, kHeaderSize + length() * kPointerSize); |
2450 } | 2436 } |
2451 | 2437 |
2452 | 2438 |
2453 static bool HasKey(FixedArray* array, Object* key) { | 2439 static bool HasKey(FixedArray* array, Object* key) { |
2454 int len0 = array->length(); | 2440 int len0 = array->length(); |
2455 for (int i = 0; i < len0; i++) { | 2441 for (int i = 0; i < len0; i++) { |
2456 Object* element = array->get(i); | 2442 Object* element = array->get(i); |
2457 if (element->IsSmi() && key->IsSmi() && (element == key)) return true; | 2443 if (element->IsSmi() && key->IsSmi() && (element == key)) return true; |
(...skipping 3805 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6263 // No break point. | 6249 // No break point. |
6264 if (break_point_objects()->IsUndefined()) return 0; | 6250 if (break_point_objects()->IsUndefined()) return 0; |
6265 // Single beak point. | 6251 // Single beak point. |
6266 if (!break_point_objects()->IsFixedArray()) return 1; | 6252 if (!break_point_objects()->IsFixedArray()) return 1; |
6267 // Multiple break points. | 6253 // Multiple break points. |
6268 return FixedArray::cast(break_point_objects())->length(); | 6254 return FixedArray::cast(break_point_objects())->length(); |
6269 } | 6255 } |
6270 | 6256 |
6271 | 6257 |
6272 } } // namespace v8::internal | 6258 } } // namespace v8::internal |
OLD | NEW |