| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 1786 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1797 | 1797 |
| 1798 // Allocate the empty array. | 1798 // Allocate the empty array. |
| 1799 { MaybeObject* maybe_obj = AllocateEmptyFixedArray(); | 1799 { MaybeObject* maybe_obj = AllocateEmptyFixedArray(); |
| 1800 if (!maybe_obj->ToObject(&obj)) return false; | 1800 if (!maybe_obj->ToObject(&obj)) return false; |
| 1801 } | 1801 } |
| 1802 set_empty_fixed_array(FixedArray::cast(obj)); | 1802 set_empty_fixed_array(FixedArray::cast(obj)); |
| 1803 | 1803 |
| 1804 { MaybeObject* maybe_obj = Allocate(oddball_map(), OLD_POINTER_SPACE); | 1804 { MaybeObject* maybe_obj = Allocate(oddball_map(), OLD_POINTER_SPACE); |
| 1805 if (!maybe_obj->ToObject(&obj)) return false; | 1805 if (!maybe_obj->ToObject(&obj)) return false; |
| 1806 } | 1806 } |
| 1807 set_null_value(obj); | 1807 set_null_value(Oddball::cast(obj)); |
| 1808 Oddball::cast(obj)->set_kind(Oddball::kNull); | 1808 Oddball::cast(obj)->set_kind(Oddball::kNull); |
| 1809 | 1809 |
| 1810 { MaybeObject* maybe_obj = Allocate(oddball_map(), OLD_POINTER_SPACE); |
| 1811 if (!maybe_obj->ToObject(&obj)) return false; |
| 1812 } |
| 1813 set_undefined_value(Oddball::cast(obj)); |
| 1814 Oddball::cast(obj)->set_kind(Oddball::kUndefined); |
| 1815 ASSERT(!InNewSpace(undefined_value())); |
| 1816 |
| 1810 // Allocate the empty descriptor array. | 1817 // Allocate the empty descriptor array. |
| 1811 { MaybeObject* maybe_obj = AllocateEmptyFixedArray(); | 1818 { MaybeObject* maybe_obj = AllocateEmptyFixedArray(); |
| 1812 if (!maybe_obj->ToObject(&obj)) return false; | 1819 if (!maybe_obj->ToObject(&obj)) return false; |
| 1813 } | 1820 } |
| 1814 set_empty_descriptor_array(DescriptorArray::cast(obj)); | 1821 set_empty_descriptor_array(DescriptorArray::cast(obj)); |
| 1815 | 1822 |
| 1816 // Fix the instance_descriptors for the existing maps. | 1823 // Fix the instance_descriptors for the existing maps. |
| 1817 meta_map()->init_instance_descriptors(); | 1824 meta_map()->init_instance_descriptors(); |
| 1818 meta_map()->set_code_cache(empty_fixed_array()); | 1825 meta_map()->set_code_cache(empty_fixed_array()); |
| 1819 meta_map()->set_prototype_transitions(empty_fixed_array()); | 1826 meta_map()->set_prototype_transitions(empty_fixed_array()); |
| (...skipping 351 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2171 } | 2178 } |
| 2172 | 2179 |
| 2173 | 2180 |
| 2174 bool Heap::CreateInitialObjects() { | 2181 bool Heap::CreateInitialObjects() { |
| 2175 Object* obj; | 2182 Object* obj; |
| 2176 | 2183 |
| 2177 // The -0 value must be set before NumberFromDouble works. | 2184 // The -0 value must be set before NumberFromDouble works. |
| 2178 { MaybeObject* maybe_obj = AllocateHeapNumber(-0.0, TENURED); | 2185 { MaybeObject* maybe_obj = AllocateHeapNumber(-0.0, TENURED); |
| 2179 if (!maybe_obj->ToObject(&obj)) return false; | 2186 if (!maybe_obj->ToObject(&obj)) return false; |
| 2180 } | 2187 } |
| 2181 set_minus_zero_value(obj); | 2188 set_minus_zero_value(HeapNumber::cast(obj)); |
| 2182 ASSERT(signbit(minus_zero_value()->Number()) != 0); | 2189 ASSERT(signbit(minus_zero_value()->Number()) != 0); |
| 2183 | 2190 |
| 2184 { MaybeObject* maybe_obj = AllocateHeapNumber(OS::nan_value(), TENURED); | 2191 { MaybeObject* maybe_obj = AllocateHeapNumber(OS::nan_value(), TENURED); |
| 2185 if (!maybe_obj->ToObject(&obj)) return false; | 2192 if (!maybe_obj->ToObject(&obj)) return false; |
| 2186 } | 2193 } |
| 2187 set_nan_value(obj); | 2194 set_nan_value(HeapNumber::cast(obj)); |
| 2188 | 2195 |
| 2189 { MaybeObject* maybe_obj = AllocateHeapNumber(V8_INFINITY, TENURED); | 2196 { MaybeObject* maybe_obj = AllocateHeapNumber(V8_INFINITY, TENURED); |
| 2190 if (!maybe_obj->ToObject(&obj)) return false; | 2197 if (!maybe_obj->ToObject(&obj)) return false; |
| 2191 } | 2198 } |
| 2192 set_infinity_value(obj); | 2199 set_infinity_value(HeapNumber::cast(obj)); |
| 2193 | |
| 2194 { MaybeObject* maybe_obj = Allocate(oddball_map(), OLD_POINTER_SPACE); | |
| 2195 if (!maybe_obj->ToObject(&obj)) return false; | |
| 2196 } | |
| 2197 set_undefined_value(obj); | |
| 2198 Oddball::cast(obj)->set_kind(Oddball::kUndefined); | |
| 2199 ASSERT(!InNewSpace(undefined_value())); | |
| 2200 | 2200 |
| 2201 // Allocate initial symbol table. | 2201 // Allocate initial symbol table. |
| 2202 { MaybeObject* maybe_obj = SymbolTable::Allocate(kInitialSymbolTableSize); | 2202 { MaybeObject* maybe_obj = SymbolTable::Allocate(kInitialSymbolTableSize); |
| 2203 if (!maybe_obj->ToObject(&obj)) return false; | 2203 if (!maybe_obj->ToObject(&obj)) return false; |
| 2204 } | 2204 } |
| 2205 // Don't use set_symbol_table() due to asserts. | 2205 // Don't use set_symbol_table() due to asserts. |
| 2206 roots_[kSymbolTableRootIndex] = obj; | 2206 roots_[kSymbolTableRootIndex] = obj; |
| 2207 | 2207 |
| 2208 // Assign the print strings for oddballs after creating symboltable. | 2208 // Finish initializing oddballs after creating symboltable. |
| 2209 Object* symbol; | |
| 2210 { MaybeObject* maybe_symbol = LookupAsciiSymbol("undefined"); | |
| 2211 if (!maybe_symbol->ToObject(&symbol)) return false; | |
| 2212 } | |
| 2213 Oddball::cast(undefined_value())->set_to_string(String::cast(symbol)); | |
| 2214 Oddball::cast(undefined_value())->set_to_number(nan_value()); | |
| 2215 | |
| 2216 // Allocate the null_value | |
| 2217 { MaybeObject* maybe_obj = | 2209 { MaybeObject* maybe_obj = |
| 2218 Oddball::cast(null_value())->Initialize("null", | 2210 undefined_value()->Initialize("undefined", |
| 2219 Smi::FromInt(0), | 2211 nan_value(), |
| 2220 Oddball::kNull); | 2212 Oddball::kUndefined); |
| 2221 if (!maybe_obj->ToObject(&obj)) return false; | 2213 if (!maybe_obj->ToObject(&obj)) return false; |
| 2222 } | 2214 } |
| 2223 | 2215 |
| 2216 // Initialize the null_value. |
| 2217 { MaybeObject* maybe_obj = |
| 2218 null_value()->Initialize("null", Smi::FromInt(0), Oddball::kNull); |
| 2219 if (!maybe_obj->ToObject(&obj)) return false; |
| 2220 } |
| 2221 |
| 2224 { MaybeObject* maybe_obj = CreateOddball("true", | 2222 { MaybeObject* maybe_obj = CreateOddball("true", |
| 2225 Smi::FromInt(1), | 2223 Smi::FromInt(1), |
| 2226 Oddball::kTrue); | 2224 Oddball::kTrue); |
| 2227 if (!maybe_obj->ToObject(&obj)) return false; | 2225 if (!maybe_obj->ToObject(&obj)) return false; |
| 2228 } | 2226 } |
| 2229 set_true_value(obj); | 2227 set_true_value(Oddball::cast(obj)); |
| 2230 | 2228 |
| 2231 { MaybeObject* maybe_obj = CreateOddball("false", | 2229 { MaybeObject* maybe_obj = CreateOddball("false", |
| 2232 Smi::FromInt(0), | 2230 Smi::FromInt(0), |
| 2233 Oddball::kFalse); | 2231 Oddball::kFalse); |
| 2234 if (!maybe_obj->ToObject(&obj)) return false; | 2232 if (!maybe_obj->ToObject(&obj)) return false; |
| 2235 } | 2233 } |
| 2236 set_false_value(obj); | 2234 set_false_value(Oddball::cast(obj)); |
| 2237 | 2235 |
| 2238 { MaybeObject* maybe_obj = CreateOddball("hole", | 2236 { MaybeObject* maybe_obj = CreateOddball("hole", |
| 2239 Smi::FromInt(-1), | 2237 Smi::FromInt(-1), |
| 2240 Oddball::kTheHole); | 2238 Oddball::kTheHole); |
| 2241 if (!maybe_obj->ToObject(&obj)) return false; | 2239 if (!maybe_obj->ToObject(&obj)) return false; |
| 2242 } | 2240 } |
| 2243 set_the_hole_value(obj); | 2241 set_the_hole_value(Oddball::cast(obj)); |
| 2244 | 2242 |
| 2245 { MaybeObject* maybe_obj = CreateOddball("arguments_marker", | 2243 { MaybeObject* maybe_obj = CreateOddball("arguments_marker", |
| 2246 Smi::FromInt(-2), | 2244 Smi::FromInt(-2), |
| 2247 Oddball::kArgumentMarker); | 2245 Oddball::kArgumentMarker); |
| 2248 if (!maybe_obj->ToObject(&obj)) return false; | 2246 if (!maybe_obj->ToObject(&obj)) return false; |
| 2249 } | 2247 } |
| 2250 set_arguments_marker(obj); | 2248 set_arguments_marker(Oddball::cast(obj)); |
| 2251 | 2249 |
| 2252 { MaybeObject* maybe_obj = CreateOddball("no_interceptor_result_sentinel", | 2250 { MaybeObject* maybe_obj = CreateOddball("no_interceptor_result_sentinel", |
| 2253 Smi::FromInt(-3), | 2251 Smi::FromInt(-3), |
| 2254 Oddball::kOther); | 2252 Oddball::kOther); |
| 2255 if (!maybe_obj->ToObject(&obj)) return false; | 2253 if (!maybe_obj->ToObject(&obj)) return false; |
| 2256 } | 2254 } |
| 2257 set_no_interceptor_result_sentinel(obj); | 2255 set_no_interceptor_result_sentinel(obj); |
| 2258 | 2256 |
| 2259 { MaybeObject* maybe_obj = CreateOddball("termination_exception", | 2257 { MaybeObject* maybe_obj = CreateOddball("termination_exception", |
| 2260 Smi::FromInt(-4), | 2258 Smi::FromInt(-4), |
| 2261 Oddball::kOther); | 2259 Oddball::kOther); |
| 2262 if (!maybe_obj->ToObject(&obj)) return false; | 2260 if (!maybe_obj->ToObject(&obj)) return false; |
| 2263 } | 2261 } |
| 2264 set_termination_exception(obj); | 2262 set_termination_exception(obj); |
| 2265 | 2263 |
| 2266 { MaybeObject* maybe_obj = CreateOddball("frame_alignment_marker", | 2264 { MaybeObject* maybe_obj = CreateOddball("frame_alignment_marker", |
| 2267 Smi::FromInt(-5), | 2265 Smi::FromInt(-5), |
| 2268 Oddball::kOther); | 2266 Oddball::kOther); |
| 2269 if (!maybe_obj->ToObject(&obj)) return false; | 2267 if (!maybe_obj->ToObject(&obj)) return false; |
| 2270 } | 2268 } |
| 2271 set_frame_alignment_marker(obj); | 2269 set_frame_alignment_marker(Oddball::cast(obj)); |
| 2272 STATIC_ASSERT(Oddball::kLeastHiddenOddballNumber == -5); | 2270 STATIC_ASSERT(Oddball::kLeastHiddenOddballNumber == -5); |
| 2273 | 2271 |
| 2274 // Allocate the empty string. | 2272 // Allocate the empty string. |
| 2275 { MaybeObject* maybe_obj = AllocateRawAsciiString(0, TENURED); | 2273 { MaybeObject* maybe_obj = AllocateRawAsciiString(0, TENURED); |
| 2276 if (!maybe_obj->ToObject(&obj)) return false; | 2274 if (!maybe_obj->ToObject(&obj)) return false; |
| 2277 } | 2275 } |
| 2278 set_empty_string(String::cast(obj)); | 2276 set_empty_string(String::cast(obj)); |
| 2279 | 2277 |
| 2280 for (unsigned i = 0; i < ARRAY_SIZE(constant_symbol_table); i++) { | 2278 for (unsigned i = 0; i < ARRAY_SIZE(constant_symbol_table); i++) { |
| 2281 { MaybeObject* maybe_obj = | 2279 { MaybeObject* maybe_obj = |
| (...skipping 4188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6470 isolate_->heap()->store_buffer()->Compact(); | 6468 isolate_->heap()->store_buffer()->Compact(); |
| 6471 isolate_->heap()->store_buffer()->Filter(MemoryChunk::ABOUT_TO_BE_FREED); | 6469 isolate_->heap()->store_buffer()->Filter(MemoryChunk::ABOUT_TO_BE_FREED); |
| 6472 for (chunk = chunks_queued_for_free_; chunk != NULL; chunk = next) { | 6470 for (chunk = chunks_queued_for_free_; chunk != NULL; chunk = next) { |
| 6473 next = chunk->next_chunk(); | 6471 next = chunk->next_chunk(); |
| 6474 isolate_->memory_allocator()->Free(chunk); | 6472 isolate_->memory_allocator()->Free(chunk); |
| 6475 } | 6473 } |
| 6476 chunks_queued_for_free_ = NULL; | 6474 chunks_queued_for_free_ = NULL; |
| 6477 } | 6475 } |
| 6478 | 6476 |
| 6479 } } // namespace v8::internal | 6477 } } // namespace v8::internal |
| OLD | NEW |