Commit bb01557a authored by dcarney@chromium.org's avatar dcarney@chromium.org

remove Isolate::Current from most files starting with 's' through 'v'

R=svenpanne@chromium.org
BUG=

Review URL: https://codereview.chromium.org/23549011

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@16507 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 4f5ef302
......@@ -798,7 +798,7 @@ void RelocInfo::Print(Isolate* isolate, FILE* out) {
target_object()->ShortPrint(out);
PrintF(out, ")");
} else if (rmode_ == EXTERNAL_REFERENCE) {
ExternalReferenceEncoder ref_encoder;
ExternalReferenceEncoder ref_encoder(isolate);
PrintF(out, " (%s) (%p)",
ref_encoder.NameOfAddress(*target_reference_address()),
*target_reference_address());
......
......@@ -2604,7 +2604,7 @@ Genesis::Genesis(Isolate* isolate,
// We can only de-serialize a context if the isolate was initialized from
// a snapshot. Otherwise we have to build the context from scratch.
if (isolate->initialized_from_snapshot()) {
native_context_ = Snapshot::NewContextFromSnapshot();
native_context_ = Snapshot::NewContextFromSnapshot(isolate);
} else {
native_context_ = Handle<Context>();
}
......
......@@ -117,7 +117,7 @@ static int DecodeIt(Isolate* isolate,
byte* end) {
SealHandleScope shs(isolate);
DisallowHeapAllocation no_alloc;
ExternalReferenceEncoder ref_encoder;
ExternalReferenceEncoder ref_encoder(isolate);
Heap* heap = HEAP;
v8::internal::EmbeddedVector<char, 128> decode_buffer;
......
......@@ -6115,12 +6115,12 @@ void Heap::Print() {
void Heap::ReportCodeStatistics(const char* title) {
PrintF(">>>>>> Code Stats (%s) >>>>>>\n", title);
PagedSpace::ResetCodeStatistics();
PagedSpace::ResetCodeStatistics(isolate());
// We do not look for code in new space, map space, or old space. If code
// somehow ends up in those spaces, we would miss it here.
code_space_->CollectCodeStatistics();
lo_space_->CollectCodeStatistics();
PagedSpace::ReportCodeStatistics();
PagedSpace::ReportCodeStatistics(isolate());
}
......@@ -6635,7 +6635,7 @@ void Heap::IterateStrongRoots(ObjectVisitor* v, VisitMode mode) {
// serialization this does nothing, since the partial snapshot cache is
// empty. However the next thing we do is create the partial snapshot,
// filling up the partial snapshot cache with objects it needs as we go.
SerializerDeserializer::Iterate(v);
SerializerDeserializer::Iterate(isolate_, v);
// We don't do a v->Synchronize call here, because in debug mode that will
// output a flag to the snapshot. However at this point the serializer and
// deserializer are deliberately a little unsynchronized (see above) so the
......
......@@ -567,11 +567,11 @@ Handle<String> Isolate::StackTraceString() {
if (stack_trace_nesting_level_ == 0) {
stack_trace_nesting_level_++;
HeapStringAllocator allocator;
StringStream::ClearMentionedObjectCache();
StringStream::ClearMentionedObjectCache(this);
StringStream accumulator(&allocator);
incomplete_message_ = &accumulator;
PrintStack(&accumulator);
Handle<String> stack_trace = accumulator.ToString();
Handle<String> stack_trace = accumulator.ToString(this);
incomplete_message_ = NULL;
stack_trace_nesting_level_ = 0;
return stack_trace;
......@@ -871,7 +871,7 @@ void Isolate::PrintStack(FILE* out) {
allocator = preallocated_message_space_;
}
StringStream::ClearMentionedObjectCache();
StringStream::ClearMentionedObjectCache(this);
StringStream accumulator(allocator);
incomplete_message_ = &accumulator;
PrintStack(&accumulator);
......@@ -915,7 +915,7 @@ void Isolate::PrintStack(StringStream* accumulator) {
}
// The MentionedObjectCache is not GC-proof at the moment.
DisallowHeapAllocation no_gc;
ASSERT(StringStream::IsMentionedObjectCacheClear());
ASSERT(StringStream::IsMentionedObjectCacheClear(this));
// Avoid printing anything if there are no frames.
if (c_entry_fp(thread_local_top()) == 0) return;
......@@ -928,7 +928,7 @@ void Isolate::PrintStack(StringStream* accumulator) {
"\n==== Details ================================================\n\n");
PrintFrames(this, accumulator, StackFrame::DETAILS);
accumulator->PrintMentionedObjectCache();
accumulator->PrintMentionedObjectCache(this);
accumulator->Add("=====================\n\n");
}
......@@ -2272,7 +2272,7 @@ bool Isolate::Init(Deserializer* des) {
// If we are deserializing, read the state into the now-empty heap.
if (!create_heap_objects) {
des->Deserialize();
des->Deserialize(this);
}
stub_cache_->Initialize();
......
......@@ -333,8 +333,9 @@ int main(int argc, char** argv) {
exit(1);
}
#endif
i::Serializer::Enable();
Isolate* isolate = Isolate::GetCurrent();
i::Isolate* internal_isolate = reinterpret_cast<i::Isolate*>(isolate);
i::Serializer::Enable(internal_isolate);
Persistent<Context> context;
{
HandleScope handle_scope(isolate);
......@@ -391,7 +392,7 @@ int main(int argc, char** argv) {
// Make sure all builtin scripts are cached.
{ HandleScope scope(isolate);
for (int i = 0; i < i::Natives::GetBuiltinsCount(); i++) {
i::Isolate::Current()->bootstrapper()->NativesSourceLookup(i);
internal_isolate->bootstrapper()->NativesSourceLookup(i);
}
}
// If we don't do this then we end up with a stray root pointing at the
......@@ -402,10 +403,11 @@ int main(int argc, char** argv) {
CppByteSink sink(argv[1]);
// This results in a somewhat smaller snapshot, probably because it gets rid
// of some things that are cached between garbage collections.
i::StartupSerializer ser(&sink);
i::StartupSerializer ser(internal_isolate, &sink);
ser.SerializeStrongReferences();
i::PartialSerializer partial_ser(&ser, sink.partial_sink());
i::PartialSerializer partial_ser(
internal_isolate, &ser, sink.partial_sink());
partial_ser.Serialize(&raw_context);
ser.SerializeWeakReferences();
......
......@@ -4195,7 +4195,7 @@ static MaybeObject* EnsureHasTransitionArray(Map* map) {
TransitionArray* transitions;
MaybeObject* maybe_transitions;
if (!map->HasTransitionArray()) {
maybe_transitions = TransitionArray::Allocate(0);
maybe_transitions = TransitionArray::Allocate(map->GetIsolate(), 0);
if (!maybe_transitions->To(&transitions)) return maybe_transitions;
transitions->set_back_pointer_storage(map->GetBackPointer());
} else if (!map->transitions()->IsFullTransitionArray()) {
......
......@@ -74,7 +74,7 @@ Handle<ScopeInfo> ScopeInfo::Create(Scope* scope, Zone* zone) {
+ parameter_count + stack_local_count + 2 * context_local_count
+ (has_function_name ? 2 : 0);
Factory* factory = Isolate::Current()->factory();
Factory* factory = zone->isolate()->factory();
Handle<ScopeInfo> scope_info = factory->NewScopeInfo(length);
// Encode the flags.
......
......@@ -129,7 +129,7 @@ Scope::Scope(Scope* inner_scope,
ScopeType scope_type,
Handle<ScopeInfo> scope_info,
Zone* zone)
: isolate_(Isolate::Current()),
: isolate_(zone->isolate()),
inner_scopes_(4, zone),
variables_(zone),
internals_(4, zone),
......@@ -152,7 +152,7 @@ Scope::Scope(Scope* inner_scope,
Scope::Scope(Scope* inner_scope, Handle<String> catch_variable_name, Zone* zone)
: isolate_(Isolate::Current()),
: isolate_(zone->isolate()),
inner_scopes_(1, zone),
variables_(zone),
internals_(0, zone),
......@@ -1092,7 +1092,7 @@ bool Scope::ResolveVariable(CompilationInfo* info,
// Assignment to const. Throw a syntax error.
MessageLocation location(
info->script(), proxy->position(), proxy->position());
Isolate* isolate = Isolate::Current();
Isolate* isolate = info->isolate();
Factory* factory = isolate->factory();
Handle<JSArray> array = factory->NewJSArray(0);
Handle<Object> result =
......@@ -1123,7 +1123,7 @@ bool Scope::ResolveVariable(CompilationInfo* info,
// TODO(rossberg): generate more helpful error message.
MessageLocation location(
info->script(), proxy->position(), proxy->position());
Isolate* isolate = Isolate::Current();
Isolate* isolate = info->isolate();
Factory* factory = isolate->factory();
Handle<JSArray> array = factory->NewJSArray(1);
USE(JSObject::SetElement(array, 0, var->name(), NONE, kStrictMode));
......
......@@ -596,9 +596,9 @@ void ExternalReferenceTable::PopulateTable(Isolate* isolate) {
}
ExternalReferenceEncoder::ExternalReferenceEncoder()
ExternalReferenceEncoder::ExternalReferenceEncoder(Isolate* isolate)
: encodings_(Match),
isolate_(Isolate::Current()) {
isolate_(isolate) {
ExternalReferenceTable* external_references =
ExternalReferenceTable::instance(isolate_);
for (int i = 0; i < external_references->size(); ++i) {
......@@ -638,9 +638,9 @@ void ExternalReferenceEncoder::Put(Address key, int index) {
}
ExternalReferenceDecoder::ExternalReferenceDecoder()
ExternalReferenceDecoder::ExternalReferenceDecoder(Isolate* isolate)
: encodings_(NewArray<Address*>(kTypeCodeCount)),
isolate_(Isolate::Current()) {
isolate_(isolate) {
ExternalReferenceTable* external_references =
ExternalReferenceTable::instance(isolate_);
for (int type = kFirstTypeCode; type < kTypeCodeCount; ++type) {
......@@ -780,13 +780,12 @@ class CodeAddressMap: public CodeEventLogger {
CodeAddressMap* Serializer::code_address_map_ = NULL;
void Serializer::Enable() {
void Serializer::Enable(Isolate* isolate) {
if (!serialization_enabled_) {
ASSERT(!too_late_to_enable_now_);
}
if (serialization_enabled_) return;
serialization_enabled_ = true;
i::Isolate* isolate = Isolate::Current();
isolate->InitializeLoggingAndCounters();
code_address_map_ = new CodeAddressMap(isolate);
}
......@@ -810,8 +809,8 @@ Deserializer::Deserializer(SnapshotByteSource* source)
}
void Deserializer::Deserialize() {
isolate_ = Isolate::Current();
void Deserializer::Deserialize(Isolate* isolate) {
isolate_ = isolate;
ASSERT(isolate_ != NULL);
isolate_->heap()->ReserveSpace(reservations_, &high_water_[0]);
// No active threads.
......@@ -819,7 +818,7 @@ void Deserializer::Deserialize() {
// No active handles.
ASSERT(isolate_->handle_scope_implementer()->blocks()->is_empty());
ASSERT_EQ(NULL, external_reference_decoder_);
external_reference_decoder_ = new ExternalReferenceDecoder();
external_reference_decoder_ = new ExternalReferenceDecoder(isolate);
isolate_->heap()->IterateStrongRoots(this, VISIT_ONLY_STRONG);
isolate_->heap()->RepairFreeListsAfterBoot();
isolate_->heap()->IterateWeakRoots(this, VISIT_ALL);
......@@ -850,14 +849,14 @@ void Deserializer::Deserialize() {
}
void Deserializer::DeserializePartial(Object** root) {
isolate_ = Isolate::Current();
void Deserializer::DeserializePartial(Isolate* isolate, Object** root) {
isolate_ = isolate;
for (int i = NEW_SPACE; i < kNumberOfSpaces; i++) {
ASSERT(reservations_[i] != kUninitializedReservation);
}
isolate_->heap()->ReserveSpace(reservations_, &high_water_[0]);
if (external_reference_decoder_ == NULL) {
external_reference_decoder_ = new ExternalReferenceDecoder();
external_reference_decoder_ = new ExternalReferenceDecoder(isolate);
}
// Keep track of the code space start and end pointers in case new
......@@ -1277,12 +1276,12 @@ void SnapshotByteSink::PutInt(uintptr_t integer, const char* description) {
}
Serializer::Serializer(SnapshotByteSink* sink)
: sink_(sink),
Serializer::Serializer(Isolate* isolate, SnapshotByteSink* sink)
: isolate_(isolate),
sink_(sink),
current_root_index_(0),
external_reference_encoder_(new ExternalReferenceEncoder),
external_reference_encoder_(new ExternalReferenceEncoder(isolate)),
root_index_wave_front_(0) {
isolate_ = Isolate::Current();
// The serializer is meant to be used only to generate initial heap images
// from a context in which there is only one isolate.
ASSERT(isolate_->IsDefaultIsolate());
......@@ -1298,9 +1297,9 @@ Serializer::~Serializer() {
void StartupSerializer::SerializeStrongReferences() {
Isolate* isolate = Isolate::Current();
Isolate* isolate = this->isolate();
// No active threads.
CHECK_EQ(NULL, Isolate::Current()->thread_manager()->FirstThreadStateInUse());
CHECK_EQ(NULL, isolate->thread_manager()->FirstThreadStateInUse());
// No active or weak handles.
CHECK(isolate->handle_scope_implementer()->blocks()->is_empty());
CHECK_EQ(0, isolate->global_handles()->NumberOfWeakHandles());
......@@ -1319,7 +1318,7 @@ void PartialSerializer::Serialize(Object** object) {
void Serializer::VisitPointers(Object** start, Object** end) {
Isolate* isolate = Isolate::Current();
Isolate* isolate = this->isolate();;
for (Object** current = start; current < end; current++) {
if (start == isolate->heap()->roots_array_start()) {
......@@ -1350,9 +1349,9 @@ void Serializer::VisitPointers(Object** start, Object** end) {
// that correspond to the elements of this cache array. On deserialization we
// therefore need to visit the cache array. This fills it up with pointers to
// deserialized objects.
void SerializerDeserializer::Iterate(ObjectVisitor* visitor) {
void SerializerDeserializer::Iterate(Isolate* isolate,
ObjectVisitor* visitor) {
if (Serializer::enabled()) return;
Isolate* isolate = Isolate::Current();
for (int i = 0; ; i++) {
if (isolate->serialize_partial_snapshot_cache_length() <= i) {
// Extend the array ready to get a value from the visitor when
......@@ -1371,7 +1370,7 @@ void SerializerDeserializer::Iterate(ObjectVisitor* visitor) {
int PartialSerializer::PartialSnapshotCacheIndex(HeapObject* heap_object) {
Isolate* isolate = Isolate::Current();
Isolate* isolate = this->isolate();
for (int i = 0;
i < isolate->serialize_partial_snapshot_cache_length();
......@@ -1394,7 +1393,7 @@ int PartialSerializer::PartialSnapshotCacheIndex(HeapObject* heap_object) {
int Serializer::RootIndex(HeapObject* heap_object, HowToCode from) {
Heap* heap = HEAP;
Heap* heap = isolate()->heap();
if (heap->InNewSpace(heap_object)) return kInvalidRootIndex;
for (int i = 0; i < root_index_wave_front_; i++) {
Object* root = heap->roots_array_start()[i];
......@@ -1484,8 +1483,7 @@ void StartupSerializer::SerializeWeakReferences() {
// will contain some references needed to decode the partial snapshot. We
// add one entry with 'undefined' which is the sentinel that the deserializer
// uses to know it is done deserializing the array.
Isolate* isolate = Isolate::Current();
Object* undefined = isolate->heap()->undefined_value();
Object* undefined = isolate()->heap()->undefined_value();
VisitPointer(&undefined);
HEAP->IterateWeakRoots(this, VISIT_ALL);
Pad();
......
......@@ -110,7 +110,7 @@ class ExternalReferenceTable {
class ExternalReferenceEncoder {
public:
ExternalReferenceEncoder();
explicit ExternalReferenceEncoder(Isolate* isolate);
uint32_t Encode(Address key) const;
......@@ -134,7 +134,7 @@ class ExternalReferenceEncoder {
class ExternalReferenceDecoder {
public:
ExternalReferenceDecoder();
explicit ExternalReferenceDecoder(Isolate* isolate);
~ExternalReferenceDecoder();
Address Decode(uint32_t key) const {
......@@ -208,7 +208,7 @@ class SnapshotByteSource {
// both.
class SerializerDeserializer: public ObjectVisitor {
public:
static void Iterate(ObjectVisitor* visitor);
static void Iterate(Isolate* isolate, ObjectVisitor* visitor);
static int nop() { return kNop; }
......@@ -325,10 +325,10 @@ class Deserializer: public SerializerDeserializer {
virtual ~Deserializer();
// Deserialize the snapshot into an empty heap.
void Deserialize();
void Deserialize(Isolate* isolate);
// Deserialize a single object and the objects reachable from it.
void DeserializePartial(Object** root);
void DeserializePartial(Isolate* isolate, Object** root);
void set_reservation(int space_number, int reservation) {
ASSERT(space_number >= 0);
......@@ -464,7 +464,7 @@ class CodeAddressMap;
// There can be only one serializer per V8 process.
class Serializer : public SerializerDeserializer {
public:
explicit Serializer(SnapshotByteSink* sink);
Serializer(Isolate* isolate, SnapshotByteSink* sink);
~Serializer();
void VisitPointers(Object** start, Object** end);
// You can call this after serialization to find out how much space was used
......@@ -474,7 +474,8 @@ class Serializer : public SerializerDeserializer {
return fullness_[space];
}
static void Enable();
Isolate* isolate() const { return isolate_; }
static void Enable(Isolate* isolate);
static void Disable();
// Call this when you have made use of the fact that there is no serialization
......@@ -593,9 +594,10 @@ class Serializer : public SerializerDeserializer {
class PartialSerializer : public Serializer {
public:
PartialSerializer(Serializer* startup_snapshot_serializer,
PartialSerializer(Isolate* isolate,
Serializer* startup_snapshot_serializer,
SnapshotByteSink* sink)
: Serializer(sink),
: Serializer(isolate, sink),
startup_serializer_(startup_snapshot_serializer) {
set_root_index_wave_front(Heap::kStrongRootListLength);
}
......@@ -629,12 +631,13 @@ class PartialSerializer : public Serializer {
class StartupSerializer : public Serializer {
public:
explicit StartupSerializer(SnapshotByteSink* sink) : Serializer(sink) {
StartupSerializer(Isolate* isolate, SnapshotByteSink* sink)
: Serializer(isolate, sink) {
// Clear the cache of objects used by the partial snapshot. After the
// strong roots have been serialized we can create a partial snapshot
// which will repopulate the cache with objects needed by that partial
// snapshot.
Isolate::Current()->set_serialize_partial_snapshot_cache_length(0);
isolate->set_serialize_partial_snapshot_cache_length(0);
}
// Serialize the current state of the heap. The order is:
// 1) Strong references.
......
......@@ -116,7 +116,7 @@ bool Snapshot::HaveASnapshotToStartFrom() {
}
Handle<Context> Snapshot::NewContextFromSnapshot() {
Handle<Context> Snapshot::NewContextFromSnapshot(Isolate* isolate) {
if (context_size_ == 0) {
return Handle<Context>();
}
......@@ -132,7 +132,7 @@ Handle<Context> Snapshot::NewContextFromSnapshot() {
deserializer.set_reservation(CELL_SPACE, context_cell_space_used_);
deserializer.set_reservation(PROPERTY_CELL_SPACE,
context_property_cell_space_used_);
deserializer.DeserializePartial(&root);
deserializer.DeserializePartial(isolate, &root);
CHECK(root->IsContext());
return Handle<Context>(Context::cast(root));
}
......
......@@ -43,7 +43,7 @@ class Snapshot {
static bool HaveASnapshotToStartFrom();
// Create a new context using the internal partial snapshot.
static Handle<Context> NewContextFromSnapshot();
static Handle<Context> NewContextFromSnapshot(Isolate* isolate);
// Returns whether or not the snapshot is enabled.
static bool IsEnabled() { return size_ != 0; }
......
......@@ -1777,8 +1777,7 @@ void SemiSpaceIterator::Initialize(Address start,
#ifdef DEBUG
// heap_histograms is shared, always clear it before using it.
static void ClearHistograms() {
Isolate* isolate = Isolate::Current();
static void ClearHistograms(Isolate* isolate) {
// We reset the name each time, though it hasn't changed.
#define DEF_TYPE_NAME(name) isolate->heap_histograms()[name].set_name(#name);
INSTANCE_TYPE_LIST(DEF_TYPE_NAME)
......@@ -1829,8 +1828,7 @@ static int CollectHistogramInfo(HeapObject* obj) {
}
static void ReportHistogram(bool print_spill) {
Isolate* isolate = Isolate::Current();
static void ReportHistogram(Isolate* isolate, bool print_spill) {
PrintF("\n Object Histogram:\n");
for (int i = 0; i <= LAST_TYPE; i++) {
if (isolate->heap_histograms()[i].number() > 0) {
......@@ -2685,8 +2683,7 @@ HeapObject* PagedSpace::SlowAllocateRaw(int size_in_bytes) {
#ifdef DEBUG
void PagedSpace::ReportCodeStatistics() {
Isolate* isolate = Isolate::Current();
void PagedSpace::ReportCodeStatistics(Isolate* isolate) {
CommentStatistic* comments_statistics =
isolate->paged_space_comments_statistics();
ReportCodeKindStatistics(isolate->code_kind_statistics());
......@@ -2703,8 +2700,7 @@ void PagedSpace::ReportCodeStatistics() {
}
void PagedSpace::ResetCodeStatistics() {
Isolate* isolate = Isolate::Current();
void PagedSpace::ResetCodeStatistics(Isolate* isolate) {
CommentStatistic* comments_statistics =
isolate->paged_space_comments_statistics();
ClearCodeKindStatistics(isolate->code_kind_statistics());
......@@ -2819,11 +2815,11 @@ void PagedSpace::ReportStatistics() {
Capacity(), Waste(), Available(), pct);
if (was_swept_conservatively_) return;
ClearHistograms();
ClearHistograms(heap()->isolate());
HeapObjectIterator obj_it(this);
for (HeapObject* obj = obj_it.Next(); obj != NULL; obj = obj_it.Next())
CollectHistogramInfo(obj);
ReportHistogram(true);
ReportHistogram(heap()->isolate(), true);
}
#endif
......@@ -3160,7 +3156,7 @@ void LargeObjectSpace::Print() {
void LargeObjectSpace::ReportStatistics() {
PrintF(" size: %" V8_PTR_PREFIX "d\n", size_);
int num_objects = 0;
ClearHistograms();
ClearHistograms(heap()->isolate());
LargeObjectIterator it(this);
for (HeapObject* obj = it.Next(); obj != NULL; obj = it.Next()) {
num_objects++;
......@@ -3169,7 +3165,7 @@ void LargeObjectSpace::ReportStatistics() {
PrintF(" number of objects %d, "
"size of objects %" V8_PTR_PREFIX "d\n", num_objects, objects_size_);
if (num_objects > 0) ReportHistogram(false);
if (num_objects > 0) ReportHistogram(heap()->isolate(), false);
}
......
......@@ -1753,8 +1753,8 @@ class PagedSpace : public Space {
// Report code object related statistics
void CollectCodeStatistics();
static void ReportCodeStatistics();
static void ResetCodeStatistics();
static void ReportCodeStatistics(Isolate* isolate);
static void ResetCodeStatistics(Isolate* isolate);
#endif
bool was_swept_conservatively() { return was_swept_conservatively_; }
......
......@@ -194,7 +194,8 @@ void StringStream::PrintObject(Object* o) {
return;
}
if (o->IsHeapObject()) {
DebugObjectCache* debug_object_cache = Isolate::Current()->
HeapObject* ho = HeapObject::cast(o);
DebugObjectCache* debug_object_cache = ho->GetIsolate()->
string_stream_debug_object_cache();
for (int i = 0; i < debug_object_cache->length(); i++) {
if ((*debug_object_cache)[i] == o) {
......@@ -289,14 +290,13 @@ void StringStream::OutputToFile(FILE* out) {
}
Handle<String> StringStream::ToString() {
Factory* factory = Isolate::Current()->factory();
return factory->NewStringFromUtf8(Vector<const char>(buffer_, length_));
Handle<String> StringStream::ToString(Isolate* isolate) {
return isolate->factory()->NewStringFromUtf8(
Vector<const char>(buffer_, length_));
}
void StringStream::ClearMentionedObjectCache() {
Isolate* isolate = Isolate::Current();
void StringStream::ClearMentionedObjectCache(Isolate* isolate) {
isolate->set_string_stream_current_security_token(NULL);
if (isolate->string_stream_debug_object_cache() == NULL) {
isolate->set_string_stream_debug_object_cache(
......@@ -307,9 +307,8 @@ void StringStream::ClearMentionedObjectCache() {
#ifdef DEBUG
bool StringStream::IsMentionedObjectCacheClear() {
return (
Isolate::Current()->string_stream_debug_object_cache()->length() == 0);
bool StringStream::IsMentionedObjectCacheClear(Isolate* isolate) {
return isolate->string_stream_debug_object_cache()->length() == 0;
}
#endif
......@@ -422,9 +421,9 @@ void StringStream::PrintByteArray(ByteArray* byte_array) {
}
void StringStream::PrintMentionedObjectCache() {
void StringStream::PrintMentionedObjectCache(Isolate* isolate) {
DebugObjectCache* debug_object_cache =
Isolate::Current()->string_stream_debug_object_cache();
isolate->string_stream_debug_object_cache();
Add("==== Key ============================================\n\n");
for (int i = 0; i < debug_object_cache->length(); i++) {
HeapObject* printee = (*debug_object_cache)[i];
......@@ -457,12 +456,12 @@ void StringStream::PrintMentionedObjectCache() {
void StringStream::PrintSecurityTokenIfChanged(Object* f) {
Isolate* isolate = Isolate::Current();
if (!f->IsHeapObject()) return;
HeapObject* obj = HeapObject::cast(f);
Isolate* isolate = obj->GetIsolate();
Heap* heap = isolate->heap();
if (!f->IsHeapObject() || !heap->Contains(HeapObject::cast(f))) {
return;
}
Map* map = HeapObject::cast(f)->map();
if (!heap->Contains(obj)) return;
Map* map = obj->map();
if (!map->IsHeapObject() ||
!heap->Contains(map) ||
!map->IsMap() ||
......
......@@ -148,7 +148,7 @@ class StringStream {
void OutputToFile(FILE* out);
void OutputToStdOut() { OutputToFile(stdout); }
void Log();
Handle<String> ToString();
Handle<String> ToString(Isolate* isolate);
SmartArrayPointer<const char> ToCString() const;
int length() const { return length_; }
......@@ -169,10 +169,10 @@ class StringStream {
}
// Mentioned object cache support.
void PrintMentionedObjectCache();
static void ClearMentionedObjectCache();
void PrintMentionedObjectCache(Isolate* isolate);
static void ClearMentionedObjectCache(Isolate* isolate);
#ifdef DEBUG
static bool IsMentionedObjectCacheClear();
static bool IsMentionedObjectCacheClear(Isolate* isolate);
#endif
......
......@@ -35,20 +35,20 @@ namespace v8 {
namespace internal {
static MaybeObject* AllocateRaw(int length) {
Heap* heap = Isolate::Current()->heap();
static MaybeObject* AllocateRaw(Isolate* isolate, int length) {
// Use FixedArray to not use TransitionArray::cast on incomplete object.
FixedArray* array;
MaybeObject* maybe_array = heap->AllocateFixedArray(length);
MaybeObject* maybe_array = isolate->heap()->AllocateFixedArray(length);
if (!maybe_array->To(&array)) return maybe_array;
return array;
}
MaybeObject* TransitionArray::Allocate(int number_of_transitions) {
MaybeObject* TransitionArray::Allocate(Isolate* isolate,
int number_of_transitions) {
FixedArray* array;
MaybeObject* maybe_array = AllocateRaw(ToKeyIndex(number_of_transitions));
MaybeObject* maybe_array =
AllocateRaw(isolate, ToKeyIndex(number_of_transitions));
if (!maybe_array->To(&array)) return maybe_array;
array->set(kPrototypeTransitionsIndex, Smi::FromInt(0));
return array;
......@@ -77,11 +77,11 @@ MaybeObject* TransitionArray::NewWith(SimpleTransitionFlag flag,
MaybeObject* maybe_result;
if (flag == SIMPLE_TRANSITION) {
maybe_result = AllocateRaw(kSimpleTransitionSize);
maybe_result = AllocateRaw(target->GetIsolate(), kSimpleTransitionSize);
if (!maybe_result->To(&result)) return maybe_result;
result->set(kSimpleTransitionTarget, target);
} else {
maybe_result = Allocate(1);
maybe_result = Allocate(target->GetIsolate(), 1);
if (!maybe_result->To(&result)) return maybe_result;
result->NoIncrementalWriteBarrierSet(0, key, target);
}
......@@ -94,7 +94,7 @@ MaybeObject* TransitionArray::ExtendToFullTransitionArray() {
ASSERT(!IsFullTransitionArray());
int nof = number_of_transitions();
TransitionArray* result;
MaybeObject* maybe_result = Allocate(nof);
MaybeObject* maybe_result = Allocate(GetIsolate(), nof);
if (!maybe_result->To(&result)) return maybe_result;
if (nof == 1) {
......@@ -116,7 +116,7 @@ MaybeObject* TransitionArray::CopyInsert(Name* name, Map* target) {
if (insertion_index == kNotFound) ++new_size;
MaybeObject* maybe_array;
maybe_array = TransitionArray::Allocate(new_size);
maybe_array = TransitionArray::Allocate(GetIsolate(), new_size);
if (!maybe_array->To(&result)) return maybe_array;
if (HasPrototypeTransitions()) {
......
......@@ -119,7 +119,8 @@ class TransitionArray: public FixedArray {
inline int Search(Name* name);
// Allocates a TransitionArray.
MUST_USE_RESULT static MaybeObject* Allocate(int number_of_transitions);
MUST_USE_RESULT static MaybeObject* Allocate(
Isolate* isolate, int number_of_transitions);
bool IsSimpleTransition() {
return length() == kSimpleTransitionSize &&
......
......@@ -144,12 +144,13 @@ Unlocker::~Unlocker() {
void Locker::StartPreemption(int every_n_ms) {
v8::internal::ContextSwitcher::StartPreemption(every_n_ms);
v8::internal::ContextSwitcher::StartPreemption(
i::Isolate::Current(), every_n_ms);
}
void Locker::StopPreemption() {
v8::internal::ContextSwitcher::StopPreemption();
v8::internal::ContextSwitcher::StopPreemption(i::Isolate::Current());
}
......@@ -437,8 +438,7 @@ ContextSwitcher::ContextSwitcher(Isolate* isolate, int every_n_ms)
// Set the scheduling interval of V8 threads. This function starts the
// ContextSwitcher thread if needed.
void ContextSwitcher::StartPreemption(int every_n_ms) {
Isolate* isolate = Isolate::Current();
void ContextSwitcher::StartPreemption(Isolate* isolate, int every_n_ms) {
ASSERT(Locker::IsLocked(reinterpret_cast<v8::Isolate*>(isolate)));
if (isolate->context_switcher() == NULL) {
// If the ContextSwitcher thread is not running at the moment start it now.
......@@ -454,8 +454,7 @@ void ContextSwitcher::StartPreemption(int every_n_ms) {
// Disable preemption of V8 threads. If multiple threads want to use V8 they
// must cooperatively schedule amongst them from this point on.
void ContextSwitcher::StopPreemption() {
Isolate* isolate = Isolate::Current();
void ContextSwitcher::StopPreemption(Isolate* isolate) {
ASSERT(Locker::IsLocked(reinterpret_cast<v8::Isolate*>(isolate)));
if (isolate->context_switcher() != NULL) {
// The ContextSwitcher thread is running. We need to stop it and release
......
......@@ -146,10 +146,10 @@ class ThreadManager {
class ContextSwitcher: public Thread {
public:
// Set the preemption interval for the ContextSwitcher thread.
static void StartPreemption(int every_n_ms);
static void StartPreemption(Isolate* isolate, int every_n_ms);
// Stop sending preemption requests to threads.
static void StopPreemption();
static void StopPreemption(Isolate* isolate);
// Preempted thread needs to call back to the ContextSwitcher to acknowledge
// the handling of a preemption request.
......
......@@ -464,7 +464,8 @@ THREADED_TEST(StackIteration) {
LocalContext env;
v8::HandleScope scope(env->GetIsolate());
v8::Handle<v8::ObjectTemplate> obj = ObjectTemplate::New();
i::StringStream::ClearMentionedObjectCache();
i::Isolate* isolate = reinterpret_cast<i::Isolate*>(env->GetIsolate());
i::StringStream::ClearMentionedObjectCache(isolate);
obj->SetAccessor(v8_str("xxx"), StackCheck);
env->Global()->Set(v8_str("obj"), obj->NewInstance());
Script::Compile(String::New(
......
......@@ -104,7 +104,7 @@ TEST(ExternalReferenceEncoder) {
isolate->stats_table()->SetCounterFunction(counter_function);
v8::V8::Initialize();
ExternalReferenceEncoder encoder;
ExternalReferenceEncoder encoder(isolate);
CHECK_EQ(make_code(BUILTIN, Builtins::kArrayCode),
Encode(encoder, Builtins::kArrayCode));
CHECK_EQ(make_code(v8::internal::RUNTIME_FUNCTION, Runtime::kAbort),
......@@ -141,7 +141,7 @@ TEST(ExternalReferenceDecoder) {
isolate->stats_table()->SetCounterFunction(counter_function);
v8::V8::Initialize();
ExternalReferenceDecoder decoder;
ExternalReferenceDecoder decoder(isolate);
CHECK_EQ(AddressOf(Builtins::kArrayCode),
decoder.Decode(make_code(BUILTIN, Builtins::kArrayCode)));
CHECK_EQ(AddressOf(Runtime::kAbort),
......@@ -228,9 +228,9 @@ void FileByteSink::WriteSpaceUsed(
}
static bool WriteToFile(const char* snapshot_file) {
static bool WriteToFile(Isolate* isolate, const char* snapshot_file) {
FileByteSink file(snapshot_file);
StartupSerializer ser(&file);
StartupSerializer ser(isolate, &file);
ser.Serialize();
file.WriteSpaceUsed(
......@@ -251,19 +251,20 @@ static void Serialize() {
// can be loaded from v8natives.js and their addresses can be processed. This
// will clear the pending fixups array, which would otherwise contain GC roots
// that would confuse the serialization/deserialization process.
v8::Isolate* isolate = v8::Isolate::GetCurrent();
{
v8::Isolate* isolate = v8::Isolate::GetCurrent();
v8::HandleScope scope(isolate);
v8::Context::New(isolate);
}
WriteToFile(FLAG_testing_serialization_file);
WriteToFile(reinterpret_cast<Isolate*>(isolate),
FLAG_testing_serialization_file);
}
// Test that the whole heap can be serialized.
TEST(Serialize) {
if (!Snapshot::HaveASnapshotToStartFrom()) {
Serializer::Enable();
Serializer::Enable(Isolate::Current());
v8::V8::Initialize();
Serialize();
}
......@@ -273,7 +274,7 @@ TEST(Serialize) {
// Test that heap serialization is non-destructive.
TEST(SerializeTwice) {
if (!Snapshot::HaveASnapshotToStartFrom()) {
Serializer::Enable();
Serializer::Enable(Isolate::Current());
v8::V8::Initialize();
Serialize();
Serialize();
......@@ -371,9 +372,9 @@ DEPENDENT_TEST(DeserializeFromSecondSerializationAndRunScript2,
TEST(PartialSerialization) {
if (!Snapshot::HaveASnapshotToStartFrom()) {
Serializer::Enable();
v8::V8::Initialize();
Isolate* isolate = Isolate::Current();
Serializer::Enable(isolate);
v8::V8::Initialize();
v8::Isolate* v8_isolate = reinterpret_cast<v8::Isolate*>(isolate);
Heap* heap = isolate->heap();
......@@ -415,11 +416,11 @@ TEST(PartialSerialization) {
env.Dispose();
FileByteSink startup_sink(startup_name.start());
StartupSerializer startup_serializer(&startup_sink);
StartupSerializer startup_serializer(isolate, &startup_sink);
startup_serializer.SerializeStrongReferences();
FileByteSink partial_sink(FLAG_testing_serialization_file);
PartialSerializer p_ser(&startup_serializer, &partial_sink);
PartialSerializer p_ser(isolate, &startup_serializer, &partial_sink);
p_ser.Serialize(&raw_foo);
startup_serializer.SerializeWeakReferences();
......@@ -494,16 +495,17 @@ DEPENDENT_TEST(PartialDeserialization, PartialSerialization) {
int snapshot_size = 0;
byte* snapshot = ReadBytes(file_name, &snapshot_size);
Isolate* isolate = Isolate::Current();
Object* root;
{
SnapshotByteSource source(snapshot, snapshot_size);
Deserializer deserializer(&source);
ReserveSpaceForSnapshot(&deserializer, file_name);
deserializer.DeserializePartial(&root);
deserializer.DeserializePartial(isolate, &root);
CHECK(root->IsString());
}
v8::HandleScope handle_scope(v8::Isolate::GetCurrent());
Handle<Object> root_handle(root, Isolate::Current());
HandleScope handle_scope(isolate);
Handle<Object> root_handle(root, isolate);
Object* root2;
......@@ -511,7 +513,7 @@ DEPENDENT_TEST(PartialDeserialization, PartialSerialization) {
SnapshotByteSource source(snapshot, snapshot_size);
Deserializer deserializer(&source);
ReserveSpaceForSnapshot(&deserializer, file_name);
deserializer.DeserializePartial(&root2);
deserializer.DeserializePartial(isolate, &root2);
CHECK(root2->IsString());
CHECK(*root_handle == root2);
}
......@@ -521,9 +523,9 @@ DEPENDENT_TEST(PartialDeserialization, PartialSerialization) {
TEST(ContextSerialization) {
if (!Snapshot::HaveASnapshotToStartFrom()) {
Serializer::Enable();
v8::V8::Initialize();
Isolate* isolate = Isolate::Current();
Serializer::Enable(isolate);
v8::Isolate* v8_isolate = reinterpret_cast<v8::Isolate*>(isolate);
Heap* heap = isolate->heap();
......@@ -561,11 +563,11 @@ TEST(ContextSerialization) {
env.Dispose();
FileByteSink startup_sink(startup_name.start());
StartupSerializer startup_serializer(&startup_sink);
StartupSerializer startup_serializer(isolate, &startup_sink);
startup_serializer.SerializeStrongReferences();
FileByteSink partial_sink(FLAG_testing_serialization_file);
PartialSerializer p_ser(&startup_serializer, &partial_sink);
PartialSerializer p_ser(isolate, &startup_serializer, &partial_sink);
p_ser.Serialize(&raw_context);
startup_serializer.SerializeWeakReferences();
......@@ -605,16 +607,17 @@ DEPENDENT_TEST(ContextDeserialization, ContextSerialization) {
int snapshot_size = 0;
byte* snapshot = ReadBytes(file_name, &snapshot_size);
Isolate* isolate = Isolate::Current();
Object* root;
{
SnapshotByteSource source(snapshot, snapshot_size);
Deserializer deserializer(&source);
ReserveSpaceForSnapshot(&deserializer, file_name);
deserializer.DeserializePartial(&root);
deserializer.DeserializePartial(isolate, &root);
CHECK(root->IsContext());
}
v8::HandleScope handle_scope(v8::Isolate::GetCurrent());
Handle<Object> root_handle(root, Isolate::Current());
HandleScope handle_scope(isolate);
Handle<Object> root_handle(root, isolate);
Object* root2;
......@@ -622,7 +625,7 @@ DEPENDENT_TEST(ContextDeserialization, ContextSerialization) {
SnapshotByteSource source(snapshot, snapshot_size);
Deserializer deserializer(&source);
ReserveSpaceForSnapshot(&deserializer, file_name);
deserializer.DeserializePartial(&root2);
deserializer.DeserializePartial(isolate, &root2);
CHECK(root2->IsContext());
CHECK(*root_handle != root2);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment