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 705 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
716 SetProperty(result, Factory::callee_symbol(), | 716 SetProperty(result, Factory::callee_symbol(), |
717 Factory::undefined_value(), | 717 Factory::undefined_value(), |
718 DONT_ENUM); | 718 DONT_ENUM); |
719 SetProperty(result, Factory::length_symbol(), | 719 SetProperty(result, Factory::length_symbol(), |
720 Factory::undefined_value(), | 720 Factory::undefined_value(), |
721 DONT_ENUM); | 721 DONT_ENUM); |
722 | 722 |
723 #ifdef DEBUG | 723 #ifdef DEBUG |
724 LookupResult lookup; | 724 LookupResult lookup; |
725 result->LocalLookup(Heap::callee_symbol(), &lookup); | 725 result->LocalLookup(Heap::callee_symbol(), &lookup); |
726 ASSERT(lookup.IsValid() && (lookup.type() == FIELD)); | 726 ASSERT(lookup.IsProperty() && (lookup.type() == FIELD)); |
727 ASSERT(lookup.GetFieldIndex() == Heap::arguments_callee_index); | 727 ASSERT(lookup.GetFieldIndex() == Heap::arguments_callee_index); |
728 | 728 |
729 result->LocalLookup(Heap::length_symbol(), &lookup); | 729 result->LocalLookup(Heap::length_symbol(), &lookup); |
730 ASSERT(lookup.IsValid() && (lookup.type() == FIELD)); | 730 ASSERT(lookup.IsProperty() && (lookup.type() == FIELD)); |
731 ASSERT(lookup.GetFieldIndex() == Heap::arguments_length_index); | 731 ASSERT(lookup.GetFieldIndex() == Heap::arguments_length_index); |
732 | 732 |
733 ASSERT(result->map()->inobject_properties() > Heap::arguments_callee_index); | 733 ASSERT(result->map()->inobject_properties() > Heap::arguments_callee_index); |
734 ASSERT(result->map()->inobject_properties() > Heap::arguments_length_index); | 734 ASSERT(result->map()->inobject_properties() > Heap::arguments_length_index); |
735 | 735 |
736 // Check the state of the object. | 736 // Check the state of the object. |
737 ASSERT(result->HasFastProperties()); | 737 ASSERT(result->HasFastProperties()); |
738 ASSERT(result->HasFastElements()); | 738 ASSERT(result->HasFastElements()); |
739 #endif | 739 #endif |
740 } | 740 } |
(...skipping 604 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1345 Handle<String> key = Handle<String>(descs->GetKey(i)); | 1345 Handle<String> key = Handle<String>(descs->GetKey(i)); |
1346 Handle<JSFunction> fun = | 1346 Handle<JSFunction> fun = |
1347 Handle<JSFunction>(descs->GetConstantFunction(i)); | 1347 Handle<JSFunction>(descs->GetConstantFunction(i)); |
1348 SetProperty(to, key, fun, details.attributes()); | 1348 SetProperty(to, key, fun, details.attributes()); |
1349 break; | 1349 break; |
1350 } | 1350 } |
1351 case CALLBACKS: { | 1351 case CALLBACKS: { |
1352 LookupResult result; | 1352 LookupResult result; |
1353 to->LocalLookup(descs->GetKey(i), &result); | 1353 to->LocalLookup(descs->GetKey(i), &result); |
1354 // If the property is already there we skip it | 1354 // If the property is already there we skip it |
1355 if (result.IsValid()) continue; | 1355 if (result.IsProperty()) continue; |
1356 HandleScope inner; | 1356 HandleScope inner; |
1357 Handle<DescriptorArray> inst_descs = | 1357 Handle<DescriptorArray> inst_descs = |
1358 Handle<DescriptorArray>(to->map()->instance_descriptors()); | 1358 Handle<DescriptorArray>(to->map()->instance_descriptors()); |
1359 Handle<String> key = Handle<String>(descs->GetKey(i)); | 1359 Handle<String> key = Handle<String>(descs->GetKey(i)); |
1360 Handle<Object> entry = Handle<Object>(descs->GetCallbacksObject(i)); | 1360 Handle<Object> entry = Handle<Object>(descs->GetCallbacksObject(i)); |
1361 inst_descs = Factory::CopyAppendProxyDescriptor(inst_descs, | 1361 inst_descs = Factory::CopyAppendProxyDescriptor(inst_descs, |
1362 key, | 1362 key, |
1363 entry, | 1363 entry, |
1364 details.attributes()); | 1364 details.attributes()); |
1365 to->map()->set_instance_descriptors(*inst_descs); | 1365 to->map()->set_instance_descriptors(*inst_descs); |
(...skipping 16 matching lines...) Expand all Loading... |
1382 Handle<StringDictionary> properties = | 1382 Handle<StringDictionary> properties = |
1383 Handle<StringDictionary>(from->property_dictionary()); | 1383 Handle<StringDictionary>(from->property_dictionary()); |
1384 int capacity = properties->Capacity(); | 1384 int capacity = properties->Capacity(); |
1385 for (int i = 0; i < capacity; i++) { | 1385 for (int i = 0; i < capacity; i++) { |
1386 Object* raw_key(properties->KeyAt(i)); | 1386 Object* raw_key(properties->KeyAt(i)); |
1387 if (properties->IsKey(raw_key)) { | 1387 if (properties->IsKey(raw_key)) { |
1388 ASSERT(raw_key->IsString()); | 1388 ASSERT(raw_key->IsString()); |
1389 // If the property is already there we skip it. | 1389 // If the property is already there we skip it. |
1390 LookupResult result; | 1390 LookupResult result; |
1391 to->LocalLookup(String::cast(raw_key), &result); | 1391 to->LocalLookup(String::cast(raw_key), &result); |
1392 if (result.IsValid()) continue; | 1392 if (result.IsProperty()) continue; |
1393 // Set the property. | 1393 // Set the property. |
1394 Handle<String> key = Handle<String>(String::cast(raw_key)); | 1394 Handle<String> key = Handle<String>(String::cast(raw_key)); |
1395 Handle<Object> value = Handle<Object>(properties->ValueAt(i)); | 1395 Handle<Object> value = Handle<Object>(properties->ValueAt(i)); |
1396 if (value->IsJSGlobalPropertyCell()) { | 1396 if (value->IsJSGlobalPropertyCell()) { |
1397 value = Handle<Object>(JSGlobalPropertyCell::cast(*value)->value()); | 1397 value = Handle<Object>(JSGlobalPropertyCell::cast(*value)->value()); |
1398 } | 1398 } |
1399 PropertyDetails details = properties->DetailsAt(i); | 1399 PropertyDetails details = properties->DetailsAt(i); |
1400 SetProperty(to, key, value, details.attributes()); | 1400 SetProperty(to, key, value, details.attributes()); |
1401 } | 1401 } |
1402 } | 1402 } |
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1578 } | 1578 } |
1579 | 1579 |
1580 | 1580 |
1581 // Restore statics that are thread local. | 1581 // Restore statics that are thread local. |
1582 char* Genesis::RestoreState(char* from) { | 1582 char* Genesis::RestoreState(char* from) { |
1583 current_ = *reinterpret_cast<Genesis**>(from); | 1583 current_ = *reinterpret_cast<Genesis**>(from); |
1584 return from + sizeof(current_); | 1584 return from + sizeof(current_); |
1585 } | 1585 } |
1586 | 1586 |
1587 } } // namespace v8::internal | 1587 } } // namespace v8::internal |
OLD | NEW |