Revision: 21038
Author: [email protected]
Date: Tue Apr 29 08:25:24 2014 UTC
Log: Make CreateInitialObjects more concise.
[email protected]
Review URL: https://codereview.chromium.org/255003002
http://code.google.com/p/v8/source/detail?r=21038
Modified:
/branches/bleeding_edge/src/factory.cc
/branches/bleeding_edge/src/factory.h
/branches/bleeding_edge/src/heap.cc
/branches/bleeding_edge/src/heap.h
=======================================
--- /branches/bleeding_edge/src/factory.cc Tue Apr 29 07:02:11 2014 UTC
+++ /branches/bleeding_edge/src/factory.cc Tue Apr 29 08:25:24 2014 UTC
@@ -1084,15 +1084,6 @@
isolate(),
isolate()->heap()->AllocateHeapNumber(value, pretenure), HeapNumber);
}
-
-
-Handle<JSObject> Factory::NewNeanderObject() {
- CALL_HEAP_FUNCTION(
- isolate(),
- isolate()->heap()->AllocateJSObjectFromMap(
- isolate()->heap()->neander_map()),
- JSObject);
-}
Handle<Object> Factory::NewTypeError(const char* message,
=======================================
--- /branches/bleeding_edge/src/factory.h Tue Apr 29 07:02:11 2014 UTC
+++ /branches/bleeding_edge/src/factory.h Tue Apr 29 08:25:24 2014 UTC
@@ -339,7 +339,9 @@
// These objects are used by the api to create env-independent data
// structures in the heap.
- Handle<JSObject> NewNeanderObject();
+ inline Handle<JSObject> NewNeanderObject() {
+ return NewJSObjectFromMap(neander_map());
+ }
Handle<JSObject> NewArgumentsObject(Handle<Object> callee, int length);
=======================================
--- /branches/bleeding_edge/src/heap.cc Tue Apr 29 06:42:26 2014 UTC
+++ /branches/bleeding_edge/src/heap.cc Tue Apr 29 08:25:24 2014 UTC
@@ -2395,11 +2395,6 @@
CreateFillerObjectAt(allocation->address(), size);
return allocation;
}
-
-
-MaybeObject* Heap::AllocatePolymorphicCodeCache() {
- return AllocateStruct(POLYMORPHIC_CODE_CACHE_TYPE);
-}
const Heap::StringTypeTable Heap::string_type_table[] = {
@@ -2721,32 +2716,24 @@
}
-bool Heap::CreateApiObjects() {
- Object* obj;
+void Heap::CreateApiObjects() {
+ HandleScope scope(isolate());
+ Factory* factory = isolate()->factory();
+ Handle<Map> new_neander_map =
+ factory->NewMap(JS_OBJECT_TYPE, JSObject::kHeaderSize);
- { MaybeObject* maybe_obj = AllocateMap(JS_OBJECT_TYPE,
JSObject::kHeaderSize);
- if (!maybe_obj->ToObject(&obj)) return false;
- }
// Don't use Smi-only elements optimizations for objects with the neander
// map. There are too many cases where element values are set directly
with a
// bottleneck to trap the Smi-only -> fast elements transition, and there
// appears to be no benefit for optimize this case.
- Map* new_neander_map = Map::cast(obj);
new_neander_map->set_elements_kind(TERMINAL_FAST_ELEMENTS_KIND);
- set_neander_map(new_neander_map);
+ set_neander_map(*new_neander_map);
- { MaybeObject* maybe_obj = AllocateJSObjectFromMap(neander_map());
- if (!maybe_obj->ToObject(&obj)) return false;
- }
- Object* elements;
- { MaybeObject* maybe_elements = AllocateFixedArray(2);
- if (!maybe_elements->ToObject(&elements)) return false;
- }
- FixedArray::cast(elements)->set(0, Smi::FromInt(0));
- JSObject::cast(obj)->set_elements(FixedArray::cast(elements));
- set_message_listeners(JSObject::cast(obj));
-
- return true;
+ Handle<JSObject> listeners = factory->NewNeanderObject();
+ Handle<FixedArray> elements = factory->NewFixedArray(2);
+ elements->set(0, Smi::FromInt(0));
+ listeners->set_elements(*elements);
+ set_message_listeners(*listeners);
}
@@ -2792,7 +2779,7 @@
}
-bool Heap::CreateInitialObjects() {
+void Heap::CreateInitialObjects() {
HandleScope scope(isolate());
Factory* factory = isolate()->factory();
@@ -2873,8 +2860,6 @@
factory->InternalizeUtf8String(constant_string_table[i].contents);
roots_[constant_string_table[i].index] = *str;
}
-
- Object* obj;
// Allocate the hidden string which is used to identify the hidden
properties
// in JSObjects. The hash code has a special value so that it will not
match
@@ -2882,11 +2867,8 @@
// loop above because it needs to be allocated manually with the special
// hash code in place. The hash code for the hidden_string is zero to
ensure
// that it will always be at the first entry in property descriptors.
- { MaybeObject* maybe_obj = AllocateOneByteInternalizedString(
+ hidden_string_ = *factory->NewOneByteInternalizedString(
OneByteVector("", 0), String::kEmptyStringHash);
- if (!maybe_obj->ToObject(&obj)) return false;
- }
- hidden_string_ = String::cast(obj);
// Create the code_stubs dictionary. The initial size is set to avoid
// expanding the dictionary during bootstrapping.
@@ -2896,10 +2878,8 @@
// is set to avoid expanding the dictionary during bootstrapping.
set_non_monomorphic_cache(*UnseededNumberDictionary::New(isolate(), 64));
- { MaybeObject* maybe_obj = AllocatePolymorphicCodeCache();
- if (!maybe_obj->ToObject(&obj)) return false;
- }
- set_polymorphic_code_cache(PolymorphicCodeCache::cast(obj));
+ set_polymorphic_code_cache(PolymorphicCodeCache::cast(
+ *factory->NewStruct(POLYMORPHIC_CODE_CACHE_TYPE)));
set_instanceof_cache_function(Smi::FromInt(0));
set_instanceof_cache_map(Smi::FromInt(0));
@@ -2908,125 +2888,60 @@
CreateFixedStubs();
// Allocate the dictionary of intrinsic function names.
- {
- Handle<NameDictionary> function_names =
- NameDictionary::New(isolate(), Runtime::kNumFunctions);
- Runtime::InitializeIntrinsicFunctionNames(isolate(), function_names);
- set_intrinsic_function_names(*function_names);
- }
+ Handle<NameDictionary> intrinsic_names =
+ NameDictionary::New(isolate(), Runtime::kNumFunctions);
+ Runtime::InitializeIntrinsicFunctionNames(isolate(), intrinsic_names);
+ set_intrinsic_function_names(*intrinsic_names);
- { MaybeObject* maybe_obj = AllocateInitialNumberStringCache();
- if (!maybe_obj->ToObject(&obj)) return false;
- }
- set_number_string_cache(FixedArray::cast(obj));
+ set_number_string_cache(*factory->NewFixedArray(
+ kInitialNumberStringCacheSize * 2, TENURED));
// Allocate cache for single character one byte strings.
- { MaybeObject* maybe_obj =
- AllocateFixedArray(String::kMaxOneByteCharCode + 1, TENURED);
- if (!maybe_obj->ToObject(&obj)) return false;
- }
- set_single_character_string_cache(FixedArray::cast(obj));
+ set_single_character_string_cache(*factory->NewFixedArray(
+ String::kMaxOneByteCharCode + 1, TENURED));
- // Allocate cache for string split.
- { MaybeObject* maybe_obj = AllocateFixedArray(
- RegExpResultsCache::kRegExpResultsCacheSize, TENURED);
- if (!maybe_obj->ToObject(&obj)) return false;
- }
- set_string_split_cache(FixedArray::cast(obj));
-
- { MaybeObject* maybe_obj = AllocateFixedArray(
- RegExpResultsCache::kRegExpResultsCacheSize, TENURED);
- if (!maybe_obj->ToObject(&obj)) return false;
- }
- set_regexp_multiple_cache(FixedArray::cast(obj));
+ // Allocate cache for string split and regexp-multiple.
+ set_string_split_cache(*factory->NewFixedArray(
+ RegExpResultsCache::kRegExpResultsCacheSize, TENURED));
+ set_regexp_multiple_cache(*factory->NewFixedArray(
+ RegExpResultsCache::kRegExpResultsCacheSize, TENURED));
// Allocate cache for external strings pointing to native source code.
- { MaybeObject* maybe_obj =
AllocateFixedArray(Natives::GetBuiltinsCount());
- if (!maybe_obj->ToObject(&obj)) return false;
- }
- set_natives_source_cache(FixedArray::cast(obj));
+ set_natives_source_cache(*factory->NewFixedArray(
+ Natives::GetBuiltinsCount()));
- { MaybeObject* maybe_obj = AllocateCell(undefined_value());
- if (!maybe_obj->ToObject(&obj)) return false;
- }
- set_undefined_cell(Cell::cast(obj));
+ set_undefined_cell(*factory->NewCell(factory->undefined_value()));
// The symbol registry is initialized lazily.
set_symbol_registry(undefined_value());
// Allocate object to hold object observation state.
- { MaybeObject* maybe_obj = AllocateMap(JS_OBJECT_TYPE,
JSObject::kHeaderSize);
- if (!maybe_obj->ToObject(&obj)) return false;
- }
- { MaybeObject* maybe_obj = AllocateJSObjectFromMap(Map::cast(obj));
- if (!maybe_obj->ToObject(&obj)) return false;
- }
- set_observation_state(JSObject::cast(obj));
+ set_observation_state(*factory->NewJSObjectFromMap(
+ factory->NewMap(JS_OBJECT_TYPE, JSObject::kHeaderSize)));
// Allocate object to hold object microtask state.
- { MaybeObject* maybe_obj = AllocateMap(JS_OBJECT_TYPE,
JSObject::kHeaderSize);
- if (!maybe_obj->ToObject(&obj)) return false;
- }
- { MaybeObject* maybe_obj = AllocateJSObjectFromMap(Map::cast(obj));
- if (!maybe_obj->ToObject(&obj)) return false;
- }
- set_microtask_state(JSObject::cast(obj));
+ set_microtask_state(*factory->NewJSObjectFromMap(
+ factory->NewMap(JS_OBJECT_TYPE, JSObject::kHeaderSize)));
- { MaybeObject* maybe_obj = AllocateSymbol();
- if (!maybe_obj->ToObject(&obj)) return false;
- }
- Symbol::cast(obj)->set_is_private(true);
- set_frozen_symbol(Symbol::cast(obj));
-
- { MaybeObject* maybe_obj = AllocateSymbol();
- if (!maybe_obj->ToObject(&obj)) return false;
- }
- Symbol::cast(obj)->set_is_private(true);
- set_nonexistent_symbol(Symbol::cast(obj));
-
- { MaybeObject* maybe_obj = AllocateSymbol();
- if (!maybe_obj->ToObject(&obj)) return false;
- }
- Symbol::cast(obj)->set_is_private(true);
- set_elements_transition_symbol(Symbol::cast(obj));
-
- { MaybeObject* maybe_obj = AllocateSymbol();
- if (!maybe_obj->ToObject(&obj)) return false;
- }
- Symbol::cast(obj)->set_is_private(true);
- set_uninitialized_symbol(Symbol::cast(obj));
-
- { MaybeObject* maybe_obj = AllocateSymbol();
- if (!maybe_obj->ToObject(&obj)) return false;
- }
- Symbol::cast(obj)->set_is_private(true);
- set_megamorphic_symbol(Symbol::cast(obj));
-
- {
- Handle<SeededNumberDictionary> dict =
- SeededNumberDictionary::New(isolate(), 0, TENURED);
- dict->set_requires_slow_elements();
- set_empty_slow_element_dictionary(*dict);
- }
+ set_frozen_symbol(*factory->NewPrivateSymbol());
+ set_nonexistent_symbol(*factory->NewPrivateSymbol());
+ set_elements_transition_symbol(*factory->NewPrivateSymbol());
+ set_uninitialized_symbol(*factory->NewPrivateSymbol());
+ set_megamorphic_symbol(*factory->NewPrivateSymbol());
+ set_observed_symbol(*factory->NewPrivateSymbol());
- { MaybeObject* maybe_obj = AllocateSymbol();
- if (!maybe_obj->ToObject(&obj)) return false;
- }
- Symbol::cast(obj)->set_is_private(true);
- set_observed_symbol(Symbol::cast(obj));
+ Handle<SeededNumberDictionary> slow_element_dictionary =
+ SeededNumberDictionary::New(isolate(), 0, TENURED);
+ slow_element_dictionary->set_requires_slow_elements();
+ set_empty_slow_element_dictionary(*slow_element_dictionary);
- { MaybeObject* maybe_obj = AllocateFixedArray(0, TENURED);
- if (!maybe_obj->ToObject(&obj)) return false;
- }
- set_materialized_objects(FixedArray::cast(obj));
+ set_materialized_objects(*factory->NewFixedArray(0, TENURED));
// Handling of script id generation is in Factory::NewScript.
set_last_script_id(Smi::FromInt(v8::UnboundScript::kNoScriptId));
- { MaybeObject* maybe_obj = AllocateAllocationSitesScratchpad();
- if (!maybe_obj->ToObject(&obj)) return false;
- }
- set_allocation_sites_scratchpad(FixedArray::cast(obj));
+ set_allocation_sites_scratchpad(*factory->NewFixedArray(
+ kAllocationSiteScratchpadSize, TENURED));
InitializeAllocationSitesScratchpad();
// Initialize keyed lookup cache.
@@ -3040,8 +2955,6 @@
// Initialize compilation cache.
isolate_->compilation_cache()->Clear();
-
- return true;
}
@@ -3175,13 +3088,6 @@
}
-MaybeObject* Heap::AllocateInitialNumberStringCache() {
- MaybeObject* maybe_obj =
- AllocateFixedArray(kInitialNumberStringCacheSize * 2, TENURED);
- return maybe_obj;
-}
-
-
int Heap::FullSizeNumberStringCacheLength() {
// Compute the size of the number string cache based on the max newspace
size.
// The number string cache has a minimum size based on twice the initial
cache
@@ -3202,13 +3108,6 @@
number_string_cache()->set_undefined(i);
}
}
-
-
-MaybeObject* Heap::AllocateAllocationSitesScratchpad() {
- MaybeObject* maybe_obj =
- AllocateFixedArray(kAllocationSiteScratchpadSize, TENURED);
- return maybe_obj;
-}
void Heap::FlushAllocationSitesScratchpad() {
@@ -5419,10 +5318,10 @@
bool Heap::CreateHeapObjects() {
// Create initial maps.
if (!CreateInitialMaps()) return false;
- if (!CreateApiObjects()) return false;
+ CreateApiObjects();
// Create initial objects
- if (!CreateInitialObjects()) return false;
+ CreateInitialObjects();
CHECK_EQ(0, gc_count_);
native_contexts_list_ = undefined_value();
=======================================
--- /branches/bleeding_edge/src/heap.h Tue Apr 29 06:42:26 2014 UTC
+++ /branches/bleeding_edge/src/heap.h Tue Apr 29 08:25:24 2014 UTC
@@ -739,9 +739,6 @@
bool double_align,
AllocationSpace space);
- // Allocates an empty PolymorphicCodeCache.
- MUST_USE_RESULT MaybeObject* AllocatePolymorphicCodeCache();
-
// Clear the Instanceof cache (used when a prototype changes).
inline void ClearInstanceofCache();
@@ -1281,7 +1278,7 @@
// Support for the API.
//
- bool CreateApiObjects();
+ void CreateApiObjects();
// Adjusts the amount of registered external memory.
// Returns the adjusted value.
@@ -1961,7 +1958,7 @@
AllocationSite* allocation_site);
bool CreateInitialMaps();
- bool CreateInitialObjects();
+ void CreateInitialObjects();
// These five Create*EntryStub functions are here and forced to not be
inlined
// because of a gcc-4.4 bug that assigns wrong vtable entries.
@@ -2045,16 +2042,11 @@
GCTracer* tracer_;
- // Allocates a small number to string cache.
- MUST_USE_RESULT MaybeObject* AllocateInitialNumberStringCache();
// Creates and installs the full-sized number string cache.
int FullSizeNumberStringCacheLength();
// Flush the number to string cache.
void FlushNumberStringCache();
- // Allocates a fixed-size allocation sites scratchpad.
- MUST_USE_RESULT MaybeObject* AllocateAllocationSitesScratchpad();
-
// Sets used allocation sites entries to undefined.
void FlushAllocationSitesScratchpad();
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.