OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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 #include "src/bootstrapper.h" | 5 #include "src/bootstrapper.h" |
6 | 6 |
7 #include "src/accessors.h" | 7 #include "src/accessors.h" |
8 #include "src/code-stubs.h" | 8 #include "src/code-stubs.h" |
9 #include "src/extensions/externalize-string-extension.h" | 9 #include "src/extensions/externalize-string-extension.h" |
10 #include "src/extensions/free-buffer-extension.h" | 10 #include "src/extensions/free-buffer-extension.h" |
(...skipping 2427 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2438 break; | 2438 break; |
2439 } | 2439 } |
2440 case CONSTANT: { | 2440 case CONSTANT: { |
2441 HandleScope inner(isolate()); | 2441 HandleScope inner(isolate()); |
2442 Handle<Name> key = Handle<Name>(descs->GetKey(i)); | 2442 Handle<Name> key = Handle<Name>(descs->GetKey(i)); |
2443 Handle<Object> constant(descs->GetConstant(i), isolate()); | 2443 Handle<Object> constant(descs->GetConstant(i), isolate()); |
2444 JSObject::AddProperty(to, key, constant, details.attributes()); | 2444 JSObject::AddProperty(to, key, constant, details.attributes()); |
2445 break; | 2445 break; |
2446 } | 2446 } |
2447 case CALLBACKS: { | 2447 case CALLBACKS: { |
2448 LookupResult result(isolate()); | 2448 Handle<Name> key(descs->GetKey(i)); |
2449 Handle<Name> key(Name::cast(descs->GetKey(i)), isolate()); | 2449 LookupIterator it(to, key, LookupIterator::CHECK_PROPERTY); |
2450 to->LookupOwn(key, &result); | |
2451 // If the property is already there we skip it | 2450 // If the property is already there we skip it |
2452 if (result.IsFound()) continue; | 2451 if (it.IsFound() && it.HasProperty()) continue; |
2453 HandleScope inner(isolate()); | 2452 HandleScope inner(isolate()); |
2454 DCHECK(!to->HasFastProperties()); | 2453 DCHECK(!to->HasFastProperties()); |
2455 // Add to dictionary. | 2454 // Add to dictionary. |
2456 Handle<Object> callbacks(descs->GetCallbacksObject(i), isolate()); | 2455 Handle<Object> callbacks(descs->GetCallbacksObject(i), isolate()); |
2457 PropertyDetails d = PropertyDetails( | 2456 PropertyDetails d = PropertyDetails( |
2458 details.attributes(), CALLBACKS, i + 1); | 2457 details.attributes(), CALLBACKS, i + 1); |
2459 JSObject::SetNormalizedProperty(to, key, callbacks, d); | 2458 JSObject::SetNormalizedProperty(to, key, callbacks, d); |
2460 break; | 2459 break; |
2461 } | 2460 } |
2462 case NORMAL: | 2461 case NORMAL: |
2463 // Do not occur since the from object has fast properties. | 2462 // Do not occur since the from object has fast properties. |
2464 case HANDLER: | 2463 case HANDLER: |
2465 case INTERCEPTOR: | 2464 case INTERCEPTOR: |
2466 case NONEXISTENT: | 2465 case NONEXISTENT: |
2467 // No element in instance descriptors have proxy or interceptor type. | 2466 // No element in instance descriptors have proxy or interceptor type. |
2468 UNREACHABLE(); | 2467 UNREACHABLE(); |
2469 break; | 2468 break; |
2470 } | 2469 } |
2471 } | 2470 } |
2472 } else { | 2471 } else { |
2473 Handle<NameDictionary> properties = | 2472 Handle<NameDictionary> properties = |
2474 Handle<NameDictionary>(from->property_dictionary()); | 2473 Handle<NameDictionary>(from->property_dictionary()); |
2475 int capacity = properties->Capacity(); | 2474 int capacity = properties->Capacity(); |
2476 for (int i = 0; i < capacity; i++) { | 2475 for (int i = 0; i < capacity; i++) { |
2477 Object* raw_key(properties->KeyAt(i)); | 2476 Object* raw_key(properties->KeyAt(i)); |
2478 if (properties->IsKey(raw_key)) { | 2477 if (properties->IsKey(raw_key)) { |
2479 DCHECK(raw_key->IsName()); | 2478 DCHECK(raw_key->IsName()); |
2480 // If the property is already there we skip it. | 2479 // If the property is already there we skip it. |
2481 LookupResult result(isolate()); | |
2482 Handle<Name> key(Name::cast(raw_key)); | 2480 Handle<Name> key(Name::cast(raw_key)); |
2483 to->LookupOwn(key, &result); | 2481 LookupIterator it(to, key, LookupIterator::CHECK_PROPERTY); |
2484 if (result.IsFound()) continue; | 2482 if (it.IsFound() && it.HasProperty()) continue; |
2485 // Set the property. | 2483 // Set the property. |
2486 Handle<Object> value = Handle<Object>(properties->ValueAt(i), | 2484 Handle<Object> value = Handle<Object>(properties->ValueAt(i), |
2487 isolate()); | 2485 isolate()); |
2488 DCHECK(!value->IsCell()); | 2486 DCHECK(!value->IsCell()); |
2489 if (value->IsPropertyCell()) { | 2487 if (value->IsPropertyCell()) { |
2490 value = Handle<Object>(PropertyCell::cast(*value)->value(), | 2488 value = Handle<Object>(PropertyCell::cast(*value)->value(), |
2491 isolate()); | 2489 isolate()); |
2492 } | 2490 } |
2493 PropertyDetails details = properties->DetailsAt(i); | 2491 PropertyDetails details = properties->DetailsAt(i); |
2494 JSObject::AddProperty(to, key, value, details.attributes()); | 2492 JSObject::AddProperty(to, key, value, details.attributes()); |
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2691 return from + sizeof(NestingCounterType); | 2689 return from + sizeof(NestingCounterType); |
2692 } | 2690 } |
2693 | 2691 |
2694 | 2692 |
2695 // Called when the top-level V8 mutex is destroyed. | 2693 // Called when the top-level V8 mutex is destroyed. |
2696 void Bootstrapper::FreeThreadResources() { | 2694 void Bootstrapper::FreeThreadResources() { |
2697 DCHECK(!IsActive()); | 2695 DCHECK(!IsActive()); |
2698 } | 2696 } |
2699 | 2697 |
2700 } } // namespace v8::internal | 2698 } } // namespace v8::internal |
OLD | NEW |