| 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 |