| 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 287 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 298 Handle<Object> value(constant_properties->get(index+1)); | 298 Handle<Object> value(constant_properties->get(index+1)); |
| 299 if (value->IsFixedArray()) { | 299 if (value->IsFixedArray()) { |
| 300 // The value contains the constant_properties of a | 300 // The value contains the constant_properties of a |
| 301 // simple object literal. | 301 // simple object literal. |
| 302 Handle<FixedArray> array = Handle<FixedArray>::cast(value); | 302 Handle<FixedArray> array = Handle<FixedArray>::cast(value); |
| 303 value = CreateLiteralBoilerplate(literals, array); | 303 value = CreateLiteralBoilerplate(literals, array); |
| 304 if (value.is_null()) return value; | 304 if (value.is_null()) return value; |
| 305 } | 305 } |
| 306 Handle<Object> result; | 306 Handle<Object> result; |
| 307 uint32_t element_index = 0; | 307 uint32_t element_index = 0; |
| 308 if (key->IsSymbol()) { | 308 if (key->ToArrayIndex(&element_index)) { |
| 309 // If key is a symbol it is not an array element. | |
| 310 Handle<String> name(String::cast(*key)); | |
| 311 ASSERT(!name->AsArrayIndex(&element_index)); | |
| 312 result = SetProperty(boilerplate, name, value, NONE); | |
| 313 } else if (key->ToArrayIndex(&element_index)) { | |
| 314 // Array index (uint32). | 309 // Array index (uint32). |
| 315 result = SetElement(boilerplate, element_index, value); | 310 result = SetElement(boilerplate, element_index, value); |
| 311 } else if (key->IsSymbol()) { |
| 312 // The key is not an array index. |
| 313 Handle<String> name(String::cast(*key)); |
| 314 result = SetProperty(boilerplate, name, value, NONE); |
| 316 } else { | 315 } else { |
| 317 // Non-uint32 number. | 316 // Non-uint32 number. |
| 318 ASSERT(key->IsNumber()); | 317 ASSERT(key->IsNumber()); |
| 319 double num = key->Number(); | 318 double num = key->Number(); |
| 320 char arr[100]; | 319 char arr[100]; |
| 321 Vector<char> buffer(arr, ARRAY_SIZE(arr)); | 320 Vector<char> buffer(arr, ARRAY_SIZE(arr)); |
| 322 const char* str = DoubleToCString(num, buffer); | 321 const char* str = DoubleToCString(num, buffer); |
| 323 Handle<String> name = Factory::NewStringFromAscii(CStrVector(str)); | 322 Handle<String> name = Factory::NewStringFromAscii(CStrVector(str)); |
| 324 result = SetProperty(boilerplate, name, value, NONE); | 323 result = SetProperty(boilerplate, name, value, NONE); |
| 325 } | 324 } |
| (...skipping 10274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10600 } else { | 10599 } else { |
| 10601 // Handle last resort GC and make sure to allow future allocations | 10600 // Handle last resort GC and make sure to allow future allocations |
| 10602 // to grow the heap without causing GCs (if possible). | 10601 // to grow the heap without causing GCs (if possible). |
| 10603 Counters::gc_last_resort_from_js.Increment(); | 10602 Counters::gc_last_resort_from_js.Increment(); |
| 10604 Heap::CollectAllGarbage(false); | 10603 Heap::CollectAllGarbage(false); |
| 10605 } | 10604 } |
| 10606 } | 10605 } |
| 10607 | 10606 |
| 10608 | 10607 |
| 10609 } } // namespace v8::internal | 10608 } } // namespace v8::internal |
| OLD | NEW |