Revision: 20775
Author: [email protected]
Date: Tue Apr 15 15:17:04 2014 UTC
Log: Revert "Handlifying clients of StringTable, step 1."
This reverts commit r20772.
[email protected]
Review URL: https://codereview.chromium.org/239273002
http://code.google.com/p/v8/source/detail?r=20775
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/objects.cc
/branches/bleeding_edge/src/objects.h
/branches/bleeding_edge/src/runtime.cc
=======================================
--- /branches/bleeding_edge/src/factory.cc Tue Apr 15 14:20:59 2014 UTC
+++ /branches/bleeding_edge/src/factory.cc Tue Apr 15 15:17:04 2014 UTC
@@ -35,16 +35,6 @@
result->set_value(*value);
return result;
}
-
-
-Handle<Oddball> Factory::NewOddball(Handle<Map> map,
- const char* to_string,
- Handle<Object> to_number,
- byte kind) {
- Handle<Oddball> oddball = New<Oddball>(map, OLD_POINTER_SPACE);
- Oddball::Initialize(isolate(), oddball, to_string, to_number, kind);
- return oddball;
-}
Handle<FixedArray> Factory::NewFixedArray(int size, PretenureFlag
pretenure) {
=======================================
--- /branches/bleeding_edge/src/factory.h Tue Apr 15 14:20:59 2014 UTC
+++ /branches/bleeding_edge/src/factory.h Tue Apr 15 15:17:04 2014 UTC
@@ -14,11 +14,6 @@
class Factory V8_FINAL {
public:
- Handle<Oddball> NewOddball(Handle<Map> map,
- const char* to_string,
- Handle<Object> to_number,
- byte kind);
-
// Allocates a fixed array initialized with undefined values.
Handle<FixedArray> NewFixedArray(
int size,
=======================================
--- /branches/bleeding_edge/src/heap.cc Tue Apr 15 14:20:59 2014 UTC
+++ /branches/bleeding_edge/src/heap.cc Tue Apr 15 15:17:04 2014 UTC
@@ -2757,6 +2757,18 @@
set_allocation_sites_list(site);
return site;
}
+
+
+MaybeObject* Heap::CreateOddball(Map* map,
+ const char* to_string,
+ Object* to_number,
+ byte kind) {
+ Object* result;
+ { MaybeObject* maybe_result = Allocate(map, OLD_POINTER_SPACE);
+ if (!maybe_result->ToObject(&result)) return maybe_result;
+ }
+ return Oddball::cast(result)->Initialize(this, to_string, to_number,
kind);
+}
bool Heap::CreateApiObjects() {
@@ -2831,82 +2843,115 @@
bool Heap::CreateInitialObjects() {
- HandleScope scope(isolate());
- Factory* factory = isolate()->factory();
+ Object* obj;
// The -0 value must be set before NumberFromDouble works.
- set_minus_zero_value(*factory->NewHeapNumber(-0.0, TENURED));
+ { MaybeObject* maybe_obj = AllocateHeapNumber(-0.0, TENURED);
+ if (!maybe_obj->ToObject(&obj)) return false;
+ }
+ set_minus_zero_value(HeapNumber::cast(obj));
ASSERT(std::signbit(minus_zero_value()->Number()) != 0);
- set_nan_value(*factory->NewHeapNumber(OS::nan_value(), TENURED));
- set_infinity_value(*factory->NewHeapNumber(V8_INFINITY, TENURED));
+ { MaybeObject* maybe_obj = AllocateHeapNumber(OS::nan_value(), TENURED);
+ if (!maybe_obj->ToObject(&obj)) return false;
+ }
+ set_nan_value(HeapNumber::cast(obj));
+
+ { MaybeObject* maybe_obj = AllocateHeapNumber(V8_INFINITY, TENURED);
+ if (!maybe_obj->ToObject(&obj)) return false;
+ }
+ set_infinity_value(HeapNumber::cast(obj));
// The hole has not been created yet, but we want to put something
// predictable in the gaps in the string table, so lets make that Smi
zero.
set_the_hole_value(reinterpret_cast<Oddball*>(Smi::FromInt(0)));
// Allocate initial string table.
- set_string_table(*StringTable::New(isolate(), kInitialStringTableSize));
+ { MaybeObject* maybe_obj =
+ StringTable::Allocate(this, kInitialStringTableSize);
+ if (!maybe_obj->ToObject(&obj)) return false;
+ }
+ // Don't use set_string_table() due to asserts.
+ roots_[kStringTableRootIndex] = obj;
// Finish initializing oddballs after creating the string table.
- Oddball::Initialize(isolate(),
- factory->undefined_value(),
- "undefined",
- factory->nan_value(),
- Oddball::kUndefined);
+ { MaybeObject* maybe_obj =
+ undefined_value()->Initialize(this,
+ "undefined",
+ nan_value(),
+ Oddball::kUndefined);
+ if (!maybe_obj->ToObject(&obj)) return false;
+ }
// Initialize the null_value.
- Oddball::Initialize(isolate(),
- factory->null_value(),
- "null",
- handle(Smi::FromInt(0), isolate()),
- Oddball::kNull);
+ { MaybeObject* maybe_obj = null_value()->Initialize(
+ this, "null", Smi::FromInt(0), Oddball::kNull);
+ if (!maybe_obj->ToObject(&obj)) return false;
+ }
- set_true_value(*factory->NewOddball(factory->boolean_map(),
- "true",
- handle(Smi::FromInt(1), isolate()),
- Oddball::kTrue));
+ { MaybeObject* maybe_obj = CreateOddball(boolean_map(),
+ "true",
+ Smi::FromInt(1),
+ Oddball::kTrue);
+ if (!maybe_obj->ToObject(&obj)) return false;
+ }
+ set_true_value(Oddball::cast(obj));
- set_false_value(*factory->NewOddball(factory->boolean_map(),
- "false",
- handle(Smi::FromInt(0), isolate()),
- Oddball::kFalse));
+ { MaybeObject* maybe_obj = CreateOddball(boolean_map(),
+ "false",
+ Smi::FromInt(0),
+ Oddball::kFalse);
+ if (!maybe_obj->ToObject(&obj)) return false;
+ }
+ set_false_value(Oddball::cast(obj));
- set_the_hole_value(*factory->NewOddball(factory->the_hole_map(),
- "hole",
- handle(Smi::FromInt(-1),
isolate()),
- Oddball::kTheHole));
+ { MaybeObject* maybe_obj = CreateOddball(the_hole_map(),
+ "hole",
+ Smi::FromInt(-1),
+ Oddball::kTheHole);
+ if (!maybe_obj->ToObject(&obj)) return false;
+ }
+ set_the_hole_value(Oddball::cast(obj));
- set_uninitialized_value(
- *factory->NewOddball(factory->uninitialized_map(),
- "uninitialized",
- handle(Smi::FromInt(-1), isolate()),
- Oddball::kUninitialized));
+ { MaybeObject* maybe_obj = CreateOddball(uninitialized_map(),
+ "uninitialized",
+ Smi::FromInt(-1),
+ Oddball::kUninitialized);
+ if (!maybe_obj->ToObject(&obj)) return false;
+ }
+ set_uninitialized_value(Oddball::cast(obj));
-
set_arguments_marker(*factory->NewOddball(factory->arguments_marker_map(),
- "arguments_marker",
- handle(Smi::FromInt(-4),
isolate()),
- Oddball::kArgumentMarker));
+ { MaybeObject* maybe_obj = CreateOddball(arguments_marker_map(),
+ "arguments_marker",
+ Smi::FromInt(-4),
+ Oddball::kArgumentMarker);
+ if (!maybe_obj->ToObject(&obj)) return false;
+ }
+ set_arguments_marker(Oddball::cast(obj));
- set_no_interceptor_result_sentinel(
- *factory->NewOddball(factory->no_interceptor_result_sentinel_map(),
- "no_interceptor_result_sentinel",
- handle(Smi::FromInt(-2), isolate()),
- Oddball::kOther));
+ { MaybeObject* maybe_obj =
CreateOddball(no_interceptor_result_sentinel_map(),
+ "no_interceptor_result_sentinel",
+ Smi::FromInt(-2),
+ Oddball::kOther);
+ if (!maybe_obj->ToObject(&obj)) return false;
+ }
+ set_no_interceptor_result_sentinel(Oddball::cast(obj));
- set_termination_exception(
- *factory->NewOddball(factory->termination_exception_map(),
- "termination_exception",
- handle(Smi::FromInt(-3), isolate()),
- Oddball::kOther));
+ { MaybeObject* maybe_obj = CreateOddball(termination_exception_map(),
+ "termination_exception",
+ Smi::FromInt(-3),
+ Oddball::kOther);
+ if (!maybe_obj->ToObject(&obj)) return false;
+ }
+ set_termination_exception(Oddball::cast(obj));
for (unsigned i = 0; i < ARRAY_SIZE(constant_string_table); i++) {
- Handle<String> str =
- factory->InternalizeUtf8String(constant_string_table[i].contents);
- roots_[constant_string_table[i].index] = *str;
+ { MaybeObject* maybe_obj =
+ InternalizeUtf8String(constant_string_table[i].contents);
+ if (!maybe_obj->ToObject(&obj)) return false;
+ }
+ roots_[constant_string_table[i].index] = String::cast(obj);
}
-
- 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
@@ -2947,12 +2992,11 @@
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);
+ { MaybeObject* maybe_obj =
+ NameDictionary::Allocate(this, Runtime::kNumFunctions);
+ if (!maybe_obj->ToObject(&obj)) return false;
}
+ set_intrinsic_function_names(NameDictionary::cast(obj));
{ MaybeObject* maybe_obj = AllocateInitialNumberStringCache();
if (!maybe_obj->ToObject(&obj)) return false;
@@ -3151,58 +3195,60 @@
}
-void RegExpResultsCache::Enter(Isolate* isolate,
- Handle<String> key_string,
- Handle<Object> key_pattern,
- Handle<FixedArray> value_array,
+void RegExpResultsCache::Enter(Heap* heap,
+ String* key_string,
+ Object* key_pattern,
+ FixedArray* value_array,
ResultsCacheType type) {
- Factory* factory = isolate->factory();
- Handle<FixedArray> cache;
+ FixedArray* cache;
if (!key_string->IsInternalizedString()) return;
if (type == STRING_SPLIT_SUBSTRINGS) {
ASSERT(key_pattern->IsString());
if (!key_pattern->IsInternalizedString()) return;
- cache = factory->string_split_cache();
+ cache = heap->string_split_cache();
} else {
ASSERT(type == REGEXP_MULTIPLE_INDICES);
ASSERT(key_pattern->IsFixedArray());
- cache = factory->regexp_multiple_cache();
+ cache = heap->regexp_multiple_cache();
}
uint32_t hash = key_string->Hash();
uint32_t index = ((hash & (kRegExpResultsCacheSize - 1)) &
~(kArrayEntriesPerCacheEntry - 1));
if (cache->get(index + kStringOffset) == Smi::FromInt(0)) {
- cache->set(index + kStringOffset, *key_string);
- cache->set(index + kPatternOffset, *key_pattern);
- cache->set(index + kArrayOffset, *value_array);
+ cache->set(index + kStringOffset, key_string);
+ cache->set(index + kPatternOffset, key_pattern);
+ cache->set(index + kArrayOffset, value_array);
} else {
uint32_t index2 =
((index + kArrayEntriesPerCacheEntry) & (kRegExpResultsCacheSize -
1));
if (cache->get(index2 + kStringOffset) == Smi::FromInt(0)) {
- cache->set(index2 + kStringOffset, *key_string);
- cache->set(index2 + kPatternOffset, *key_pattern);
- cache->set(index2 + kArrayOffset, *value_array);
+ cache->set(index2 + kStringOffset, key_string);
+ cache->set(index2 + kPatternOffset, key_pattern);
+ cache->set(index2 + kArrayOffset, value_array);
} else {
cache->set(index2 + kStringOffset, Smi::FromInt(0));
cache->set(index2 + kPatternOffset, Smi::FromInt(0));
cache->set(index2 + kArrayOffset, Smi::FromInt(0));
- cache->set(index + kStringOffset, *key_string);
- cache->set(index + kPatternOffset, *key_pattern);
- cache->set(index + kArrayOffset, *value_array);
+ cache->set(index + kStringOffset, key_string);
+ cache->set(index + kPatternOffset, key_pattern);
+ cache->set(index + kArrayOffset, value_array);
}
}
// If the array is a reasonably short list of substrings, convert it
into a
// list of internalized strings.
if (type == STRING_SPLIT_SUBSTRINGS && value_array->length() < 100) {
for (int i = 0; i < value_array->length(); i++) {
- Handle<String> str(String::cast(value_array->get(i)), isolate);
- Handle<String> internalized_str = factory->InternalizeString(str);
- value_array->set(i, *internalized_str);
+ String* str = String::cast(value_array->get(i));
+ Object* internalized_str;
+ MaybeObject* maybe_string = heap->InternalizeString(str);
+ if (maybe_string->ToObject(&internalized_str)) {
+ value_array->set(i, internalized_str);
+ }
}
}
// Convert backing store to a copy-on-write array.
- value_array->set_map_no_write_barrier(*factory->fixed_cow_array_map());
+ value_array->set_map_no_write_barrier(heap->fixed_cow_array_map());
}
@@ -5926,12 +5972,16 @@
// Create initial objects
if (!CreateInitialObjects()) return false;
- CHECK_EQ(0, gc_count_);
native_contexts_list_ = undefined_value();
array_buffers_list_ = undefined_value();
allocation_sites_list_ = undefined_value();
weak_object_to_code_table_ = undefined_value();
+
+ HandleScope scope(isolate());
+ Runtime::InitializeIntrinsicFunctionNames(
+ isolate(), handle(intrinsic_function_names(), isolate()));
+
return true;
}
=======================================
--- /branches/bleeding_edge/src/heap.h Tue Apr 15 14:20:59 2014 UTC
+++ /branches/bleeding_edge/src/heap.h Tue Apr 15 15:17:04 2014 UTC
@@ -2094,6 +2094,11 @@
void CreateFixedStubs();
+ MUST_USE_RESULT MaybeObject* CreateOddball(Map* map,
+ const char* to_string,
+ Object* to_number,
+ byte kind);
+
// Allocate empty fixed array.
MUST_USE_RESULT MaybeObject* AllocateEmptyFixedArray();
@@ -2870,10 +2875,10 @@
ResultsCacheType type);
// Attempt to add value_array to the cache specified by type. On
success,
// value_array is turned into a COW-array.
- static void Enter(Isolate* isolate,
- Handle<String> key_string,
- Handle<Object> key_pattern,
- Handle<FixedArray> value_array,
+ static void Enter(Heap* heap,
+ String* key_string,
+ Object* key_pattern,
+ FixedArray* value_array,
ResultsCacheType type);
static void Clear(FixedArray* cache);
static const int kRegExpResultsCacheSize = 0x100;
=======================================
--- /branches/bleeding_edge/src/objects.cc Tue Apr 15 14:20:59 2014 UTC
+++ /branches/bleeding_edge/src/objects.cc Tue Apr 15 15:17:04 2014 UTC
@@ -10096,16 +10096,20 @@
}
-void Oddball::Initialize(Isolate* isolate,
- Handle<Oddball> oddball,
- const char* to_string,
- Handle<Object> to_number,
- byte kind) {
- Handle<String> internalized_to_string =
- isolate->factory()->InternalizeUtf8String(CStrVector(to_string));
- oddball->set_to_string(*internalized_to_string);
- oddball->set_to_number(*to_number);
- oddball->set_kind(kind);
+MaybeObject* Oddball::Initialize(Heap* heap,
+ const char* to_string,
+ Object* to_number,
+ byte kind) {
+ String* internalized_to_string;
+ { MaybeObject* maybe_string =
+ heap->InternalizeUtf8String(
+ CStrVector(to_string));
+ if (!maybe_string->To(&internalized_to_string)) return maybe_string;
+ }
+ set_to_string(internalized_to_string);
+ set_to_number(to_number);
+ set_kind(kind);
+ return this;
}
@@ -14421,10 +14425,6 @@
int,
JSObject::DeleteMode);
-template Handle<NameDictionary>
-HashTable<NameDictionary, NameDictionaryShape, Name*>::
- New(Isolate*, int, MinimumCapacity, PretenureFlag);
-
template Handle<NameDictionary>
HashTable<NameDictionary, NameDictionaryShape, Name*>::
Shrink(Handle<NameDictionary>, Name* n);
=======================================
--- /branches/bleeding_edge/src/objects.h Tue Apr 15 14:20:59 2014 UTC
+++ /branches/bleeding_edge/src/objects.h Tue Apr 15 15:17:04 2014 UTC
@@ -9723,11 +9723,10 @@
DECLARE_VERIFIER(Oddball)
// Initialize the fields.
- static void Initialize(Isolate* isolate,
- Handle<Oddball> oddball,
- const char* to_string,
- Handle<Object> to_number,
- byte kind);
+ MUST_USE_RESULT MaybeObject* Initialize(Heap* heap,
+ const char* to_string,
+ Object* to_number,
+ byte kind);
// Layout description.
static const int kToStringOffset = HeapObject::kHeaderSize;
=======================================
--- /branches/bleeding_edge/src/runtime.cc Tue Apr 15 14:20:59 2014 UTC
+++ /branches/bleeding_edge/src/runtime.cc Tue Apr 15 15:17:04 2014 UTC
@@ -4730,10 +4730,10 @@
fixed_array->set(fixed_array->length() - 1,
Smi::FromInt(builder.length()));
// Cache the result and turn the FixedArray into a COW array.
- RegExpResultsCache::Enter(isolate,
- subject,
- handle(regexp->data(), isolate),
- fixed_array,
+ RegExpResultsCache::Enter(isolate->heap(),
+ *subject,
+ regexp->data(),
+ *fixed_array,
RegExpResultsCache::REGEXP_MULTIPLE_INDICES);
}
return *builder.ToJSArray(result_array);
@@ -6750,10 +6750,10 @@
if (limit == 0xffffffffu) {
if (result->HasFastObjectElements()) {
- RegExpResultsCache::Enter(isolate,
- subject,
- pattern,
- elements,
+ RegExpResultsCache::Enter(isolate->heap(),
+ *subject,
+ *pattern,
+ *elements,
RegExpResultsCache::STRING_SPLIT_SUBSTRINGS);
}
}
--
--
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.