Remove some Isolate::current_zone() calls, as it gets the zone from mutator thread not the current thread

BUG=
R=zra@google.com

Review URL: https://codereview.chromium.org/1414493003 .
This commit is contained in:
Srdjan Mitrovic 2015-10-19 10:27:36 -07:00
parent 78c7cde132
commit 465cf10a7c
17 changed files with 113 additions and 103 deletions

View file

@ -21,7 +21,7 @@ DEFINE_NATIVE_ENTRY(Bool_fromEnvironment, 3) {
GET_NATIVE_ARGUMENT(Bool, default_value, arguments->NativeArgAt(2));
// Call the embedder to supply us with the environment.
const String& env_value =
String::Handle(Api::CallEnvironmentCallback(isolate, name));
String::Handle(Api::CallEnvironmentCallback(thread, name));
if (!env_value.IsNull()) {
if (Symbols::True().Equals(env_value)) {
return Bool::True().raw();

View file

@ -237,7 +237,7 @@ DEFINE_NATIVE_ENTRY(Integer_fromEnvironment, 3) {
GET_NATIVE_ARGUMENT(Integer, default_value, arguments->NativeArgAt(2));
// Call the embedder to supply us with the environment.
const String& env_value =
String::Handle(Api::CallEnvironmentCallback(isolate, name));
String::Handle(Api::CallEnvironmentCallback(thread, name));
if (!env_value.IsNull()) {
const Integer& result = Integer::Handle(ParseInteger(env_value));
if (!result.IsNull()) {

View file

@ -20,7 +20,7 @@ DEFINE_NATIVE_ENTRY(String_fromEnvironment, 3) {
GET_NATIVE_ARGUMENT(String, default_value, arguments->NativeArgAt(2));
// Call the embedder to supply us with the environment.
const String& env_value =
String::Handle(Api::CallEnvironmentCallback(isolate, name));
String::Handle(Api::CallEnvironmentCallback(thread, name));
if (!env_value.IsNull()) {
return Symbols::New(env_value);
}

View file

@ -41,8 +41,7 @@ BENCHMARK(CorelibCompileAll) {
bin::Builtin::SetNativeResolver(bin::Builtin::kIOLibrary);
Timer timer(true, "Compile all of Core lib benchmark");
timer.Start();
const Error& error = Error::Handle(benchmark->isolate()->current_zone(),
Library::CompileAll());
const Error& error = Error::Handle(Library::CompileAll());
if (!error.IsNull()) {
OS::PrintErr("Unexpected error in CorelibCompileAll benchmark:\n%s",
error.ToErrorCString());
@ -61,8 +60,7 @@ BENCHMARK(CorelibCompilerStats) {
stats->EnableBenchmark();
Timer timer(true, "Compiler stats compiling all of Core lib");
timer.Start();
const Error& error = Error::Handle(benchmark->isolate()->current_zone(),
Library::CompileAll());
const Error& error = Error::Handle(Library::CompileAll());
if (!error.IsNull()) {
OS::PrintErr("Unexpected error in CorelibCompileAll benchmark:\n%s",
error.ToErrorCString());

View file

@ -1452,7 +1452,7 @@ DEFINE_RUNTIME_ENTRY(OptimizeInvokedFunction, 1) {
// prevent recursive triggering of function optimization.
function.set_usage_counter(0);
if (FLAG_background_compilation) {
BackgroundCompiler::EnsureInit(isolate);
BackgroundCompiler::EnsureInit(thread);
ASSERT(isolate->background_compiler() != NULL);
isolate->background_compiler()->CompileOptimized(function);
// Continue in the same code.

View file

@ -1569,15 +1569,16 @@ void BackgroundCompiler::Stop(BackgroundCompiler* task) {
}
void BackgroundCompiler::EnsureInit(Isolate* isolate) {
void BackgroundCompiler::EnsureInit(Thread* thread) {
bool start_task = false;
Isolate* isolate = thread->isolate();
{
MutexLocker ml(isolate->mutex());
if (isolate->background_compiler() == NULL) {
BackgroundCompiler* task = new BackgroundCompiler(isolate);
isolate->set_background_compiler(task);
isolate->set_background_compilation_queue(GrowableObjectArray::Handle(
isolate->current_zone(), GrowableObjectArray::New()));
thread->zone(), GrowableObjectArray::New()));
start_task = true;
}
}

View file

@ -106,7 +106,7 @@ class Compiler : public AllStatic {
// isolate.
class BackgroundCompiler : public ThreadPool::Task {
public:
static void EnsureInit(Isolate* isolate);
static void EnsureInit(Thread* thread);
static void Stop(BackgroundCompiler* task);

View file

@ -4966,17 +4966,18 @@ DART_EXPORT void Dart_SetWeakHandleReturnValue(Dart_NativeArguments args,
// --- Environment ---
RawString* Api::CallEnvironmentCallback(Isolate* isolate, const String& name) {
RawString* Api::CallEnvironmentCallback(Thread* thread, const String& name) {
Isolate* isolate = thread->isolate();
Scope api_scope(isolate);
Dart_EnvironmentCallback callback = isolate->environment_callback();
String& result = String::Handle(isolate->current_zone());
String& result = String::Handle(thread->zone());
if (callback != NULL) {
Dart_Handle response = callback(Api::NewHandle(isolate, name.raw()));
if (::Dart_IsString(response)) {
result ^= Api::UnwrapHandle(response);
} else if (::Dart_IsError(response)) {
const Object& error =
Object::Handle(isolate->current_zone(), Api::UnwrapHandle(response));
const Object& error = Object::Handle(
thread->zone(), Api::UnwrapHandle(response));
Exceptions::ThrowArgumentError(
String::Handle(String::New(Error::Cast(error).ToErrorCString())));
} else if (!::Dart_IsNull(response)) {
@ -5052,7 +5053,7 @@ DART_EXPORT Dart_Handle Dart_SetLibraryTagHandler(
// NOTE: Need to pass 'result' as a parameter here in order to avoid
// warning: variable 'result' might be clobbered by 'longjmp' or 'vfork'
// which shows up because of the use of setjmp.
static void CompileSource(Isolate* isolate,
static void CompileSource(Thread* thread,
const Library& lib,
const Script& script,
Dart_Handle* result) {
@ -5061,13 +5062,13 @@ static void CompileSource(Isolate* isolate,
if (update_lib_status) {
lib.SetLoadInProgress();
}
ASSERT(isolate != NULL);
ASSERT(thread != NULL);
const Error& error =
Error::Handle(isolate->current_zone(), Compiler::Compile(lib, script));
Error::Handle(thread->zone(), Compiler::Compile(lib, script));
if (error.IsNull()) {
*result = Api::NewHandle(isolate, lib.raw());
*result = Api::NewHandle(thread->isolate(), lib.raw());
} else {
*result = Api::NewHandle(isolate, error.raw());
*result = Api::NewHandle(thread->isolate(), error.raw());
// Compilation errors are not Dart instances, so just mark the library
// as having failed to load without providing an error instance.
lib.SetLoadError(Object::null_instance());
@ -5116,7 +5117,7 @@ DART_EXPORT Dart_Handle Dart_LoadScript(Dart_Handle url,
Script::New(url_str, source_str, RawScript::kScriptTag));
script.SetLocationOffset(line_offset, column_offset);
Dart_Handle result;
CompileSource(I, library, script, &result);
CompileSource(T, library, script, &result);
return result;
}
@ -5361,7 +5362,7 @@ DART_EXPORT Dart_Handle Dart_LoadLibrary(Dart_Handle url,
Script::New(url_str, source_str, RawScript::kLibraryTag));
script.SetLocationOffset(line_offset, column_offset);
Dart_Handle result;
CompileSource(I, library, script, &result);
CompileSource(T, library, script, &result);
// Propagate the error out right now.
if (::Dart_IsError(result)) {
return result;
@ -5456,7 +5457,7 @@ DART_EXPORT Dart_Handle Dart_LoadSource(Dart_Handle library,
Script::New(url_str, source_str, RawScript::kSourceTag));
script.SetLocationOffset(line_offset, column_offset);
Dart_Handle result;
CompileSource(I, lib, script, &result);
CompileSource(T, lib, script, &result);
return result;
}
@ -5485,7 +5486,7 @@ DART_EXPORT Dart_Handle Dart_LibraryLoadPatch(Dart_Handle library,
const Script& script = Script::Handle(Z,
Script::New(url_str, source_str, RawScript::kPatchTag));
Dart_Handle result;
CompileSource(I, lib, script, &result);
CompileSource(T, lib, script, &result);
return result;
}

View file

@ -269,7 +269,7 @@ class Api : AllStatic {
static void SetWeakHandleReturnValue(NativeArguments* args,
Dart_WeakPersistentHandle retval);
static RawString* CallEnvironmentCallback(Isolate* isolate,
static RawString* CallEnvironmentCallback(Thread* thread,
const String& name);
private:

View file

@ -2402,10 +2402,10 @@ void Debugger::CollectLibraryFields(const GrowableObjectArray& field_list,
const String& prefix,
bool include_private_fields) {
DictionaryIterator it(lib);
Object& entry = Object::Handle(isolate_->current_zone());
Object& entry = Object::Handle(zone());
Field& field = Field::Handle(zone());
String& field_name = String::Handle(zone());
PassiveObject& field_value = PassiveObject::Handle(isolate_->current_zone());
PassiveObject& field_value = PassiveObject::Handle(zone());
while (it.HasNext()) {
entry = it.GetNext();
if (entry.IsField()) {

View file

@ -650,7 +650,10 @@ class Debugger {
void HandleSteppingRequest(DebuggerStackTrace* stack_trace);
Zone* zone() const { return isolate_->current_zone(); }
Zone* zone() const {
ASSERT(isolate_->MutatorThreadIsCurrentThread());
return isolate_->current_zone();
}
Isolate* isolate_;
Dart_Port isolate_id_; // A unique ID for the isolate in the debugger.

View file

@ -217,7 +217,7 @@ const char* IsolateMessageHandler::name() const {
// [ OOB dispatch, Isolate library dispatch, <message specific data> ]
RawError* IsolateMessageHandler::HandleLibMessage(const Array& message) {
if (message.Length() < 2) return Error::null();
Zone* zone = I->current_zone();
Zone* zone = T->zone();
const Object& type = Object::Handle(zone, message.At(1));
if (!type.IsSmi()) return Error::null();
const intptr_t msg_type = Smi::Cast(type).Value();
@ -640,10 +640,10 @@ MessageHandler::MessageStatus IsolateMessageHandler::ProcessUnhandledException(
}
// Generate the error and stacktrace strings for the error message.
String& exc_str = String::Handle(I->current_zone());
String& stacktrace_str = String::Handle(I->current_zone());
String& exc_str = String::Handle(T->zone());
String& stacktrace_str = String::Handle(T->zone());
if (result.IsUnhandledException()) {
Zone* zone = I->current_zone();
Zone* zone = T->zone();
const UnhandledException& uhe = UnhandledException::Cast(result);
const Instance& exception = Instance::Handle(zone, uhe.exception());
Object& tmp = Object::Handle(zone);
@ -1887,8 +1887,7 @@ void Isolate::PrintJSON(JSONStream* stream, bool ref) {
vm_tag_counters()->PrintToJSONObject(&tagCounters);
}
if (object_store()->sticky_error() != Object::null()) {
Error& error = Error::Handle(current_zone(),
object_store()->sticky_error());
Error& error = Error::Handle(object_store()->sticky_error());
ASSERT(!error.IsNull());
jsobj.AddProperty("error", error, false);
}

View file

@ -69,14 +69,13 @@ DART_EXPORT bool Dart_CloseNativePort(Dart_Port native_port_id) {
// --- Verification tools ---
static void CompileAll(Isolate* isolate, Dart_Handle* result) {
ASSERT(isolate != NULL);
const Error& error =
Error::Handle(isolate->current_zone(), Library::CompileAll());
static void CompileAll(Thread* thread, Dart_Handle* result) {
ASSERT(thread != NULL);
const Error& error = Error::Handle(thread->zone(), Library::CompileAll());
if (error.IsNull()) {
*result = Api::Success();
} else {
*result = Api::NewHandle(isolate, error.raw());
*result = Api::NewHandle(thread->isolate(), error.raw());
}
}
@ -88,7 +87,7 @@ DART_EXPORT Dart_Handle Dart_CompileAll() {
return result;
}
CHECK_CALLBACK_STATE(T);
CompileAll(I, &result);
CompileAll(T, &result);
return result;
}

View file

@ -17641,7 +17641,7 @@ bool Bigint::CheckAndCanonicalizeFields(const char** error_str) const {
ASSERT(!digits_.IsNull());
set_digits(digits_);
} else {
ASSERT(digits() == TypedData::EmptyUint32Array(Isolate::Current()));
ASSERT(digits() == TypedData::EmptyUint32Array(Thread::Current()));
}
return true;
}
@ -17663,7 +17663,7 @@ RawBigint* Bigint::New(Heap::Space space) {
result.SetNeg(false);
result.SetUsed(0);
result.set_digits(
TypedData::Handle(zone, TypedData::EmptyUint32Array(isolate)));
TypedData::Handle(zone, TypedData::EmptyUint32Array(thread)));
return result.raw();
}
@ -17697,7 +17697,7 @@ RawBigint* Bigint::New(bool neg, intptr_t used, const TypedData& digits,
} else {
neg = false;
result.set_digits(
TypedData::Handle(zone, TypedData::EmptyUint32Array(isolate)));
TypedData::Handle(zone, TypedData::EmptyUint32Array(thread)));
}
result.SetNeg(neg);
result.SetUsed(used);
@ -20920,14 +20920,16 @@ RawTypedData* TypedData::New(intptr_t class_id,
}
RawTypedData* TypedData::EmptyUint32Array(Isolate* isolate) {
RawTypedData* TypedData::EmptyUint32Array(Thread* thread) {
ASSERT(thread != NULL);
Isolate* isolate = thread->isolate();
ASSERT(isolate != NULL);
ASSERT(isolate->object_store() != NULL);
if (isolate->object_store()->empty_uint32_array() != TypedData::null()) {
// Already created.
return isolate->object_store()->empty_uint32_array();
}
const TypedData& array = TypedData::Handle(isolate->current_zone(),
const TypedData& array = TypedData::Handle(thread->zone(),
TypedData::New(kTypedDataUint32ArrayCid, 0, Heap::kOld));
isolate->object_store()->set_empty_uint32_array(array);
return array.raw();
@ -21590,10 +21592,11 @@ void UserTag::MakeActive() const {
RawUserTag* UserTag::New(const String& label, Heap::Space space) {
Isolate* isolate = Isolate::Current();
Thread* thread = Thread::Current();
Isolate* isolate = thread->isolate();
ASSERT(isolate->tag_table() != GrowableObjectArray::null());
// Canonicalize by name.
UserTag& result = UserTag::Handle(FindTagInIsolate(isolate, label));
UserTag& result = UserTag::Handle(FindTagInIsolate(thread, label));
if (!result.IsNull()) {
// Tag already exists, return existing instance.
return result.raw();
@ -21615,7 +21618,7 @@ RawUserTag* UserTag::New(const String& label, Heap::Space space) {
result ^= raw;
}
result.set_label(label);
AddTagToIsolate(isolate, result);
AddTagToIsolate(thread, result);
return result.raw();
}
@ -21638,12 +21641,14 @@ RawUserTag* UserTag::DefaultTag() {
}
RawUserTag* UserTag::FindTagInIsolate(Isolate* isolate, const String& label) {
RawUserTag* UserTag::FindTagInIsolate(Thread* thread, const String& label) {
Isolate* isolate = thread->isolate();
Zone* zone = thread->zone();
ASSERT(isolate->tag_table() != GrowableObjectArray::null());
const GrowableObjectArray& tag_table = GrowableObjectArray::Handle(
isolate->current_zone(), isolate->tag_table());
UserTag& other = UserTag::Handle(isolate->current_zone());
String& tag_label = String::Handle(isolate->current_zone());
zone, isolate->tag_table());
UserTag& other = UserTag::Handle(zone);
String& tag_label = String::Handle(zone);
for (intptr_t i = 0; i < tag_table.Length(); i++) {
other ^= tag_table.At(i);
ASSERT(!other.IsNull());
@ -21657,10 +21662,12 @@ RawUserTag* UserTag::FindTagInIsolate(Isolate* isolate, const String& label) {
}
void UserTag::AddTagToIsolate(Isolate* isolate, const UserTag& tag) {
void UserTag::AddTagToIsolate(Thread* thread, const UserTag& tag) {
Isolate* isolate = thread->isolate();
Zone* zone = thread->zone();
ASSERT(isolate->tag_table() != GrowableObjectArray::null());
const GrowableObjectArray& tag_table = GrowableObjectArray::Handle(
isolate->current_zone(), isolate->tag_table());
zone, isolate->tag_table());
ASSERT(!TagTableIsFull(isolate));
#if defined(DEBUG)
// Verify that no existing tag has the same tag id.

View file

@ -7208,7 +7208,7 @@ class TypedData : public Instance {
return RawObject::IsTypedDataClassId(cid);
}
static RawTypedData* EmptyUint32Array(Isolate* isolate);
static RawTypedData* EmptyUint32Array(Thread* thread);
protected:
void SetLength(intptr_t value) const {
@ -7978,8 +7978,8 @@ class UserTag : public Instance {
static RawUserTag* FindTagById(uword tag_id);
private:
static RawUserTag* FindTagInIsolate(Isolate* isolate, const String& label);
static void AddTagToIsolate(Isolate* isolate, const UserTag& tag);
static RawUserTag* FindTagInIsolate(Thread* thread, const String& label);
static void AddTagToIsolate(Thread* thread, const UserTag& tag);
void set_label(const String& tag_label) const {
StorePointer(&raw_ptr()->label_, tag_label.raw());

View file

@ -1101,7 +1101,7 @@ static bool ContainsNonInstance(const Object& obj) {
}
static RawObject* LookupObjectId(Isolate* isolate,
static RawObject* LookupObjectId(Thread* thread,
const char* arg,
ObjectIdRing::LookupResult* kind) {
*kind = ObjectIdRing::kValid;
@ -1113,7 +1113,7 @@ static RawObject* LookupObjectId(Isolate* isolate,
*kind = ObjectIdRing::kInvalid;
return Object::null();
}
const Integer& obj = Integer::Handle(isolate->current_zone(),
const Integer& obj = Integer::Handle(thread->zone(),
Smi::New(static_cast<intptr_t>(value)));
return obj.raw();
} else if (strcmp(arg, "bool-true") == 0) {
@ -1124,7 +1124,7 @@ static RawObject* LookupObjectId(Isolate* isolate,
return Object::null();
}
ObjectIdRing* ring = isolate->object_id_ring();
ObjectIdRing* ring = thread->isolate()->object_id_ring();
ASSERT(ring != NULL);
intptr_t id = -1;
if (!GetIntegerId(arg, &id)) {
@ -1185,19 +1185,21 @@ static RawObject* LookupHeapObjectLibraries(Isolate* isolate,
return Object::sentinel().raw();
}
static RawObject* LookupHeapObjectClasses(Isolate* isolate,
static RawObject* LookupHeapObjectClasses(Thread* thread,
char** parts, int num_parts) {
// Class ids look like: "classes/17"
if (num_parts < 2) {
return Object::sentinel().raw();
}
Isolate* isolate = thread->isolate();
Zone* zone = thread->zone();
ClassTable* table = isolate->class_table();
intptr_t id;
if (!GetIntegerId(parts[1], &id) ||
!table->IsValidIndex(id)) {
return Object::sentinel().raw();
}
Class& cls = Class::Handle(table->At(id));
Class& cls = Class::Handle(zone, table->At(id));
if (num_parts == 2) {
return cls.raw();
}
@ -1210,7 +1212,7 @@ static RawObject* LookupHeapObjectClasses(Isolate* isolate,
if (!GetIntegerId(parts[3], &id)) {
return Object::sentinel().raw();
}
Function& func = Function::Handle();
Function& func = Function::Handle(zone);
func ^= cls.ClosureFunctionFromIndex(id);
if (func.IsNull()) {
return Object::sentinel().raw();
@ -1226,7 +1228,7 @@ static RawObject* LookupHeapObjectClasses(Isolate* isolate,
if (!GetIntegerId(parts[3], &id)) {
return Object::sentinel().raw();
}
Field& field = Field::Handle(cls.FieldFromIndex(id));
Field& field = Field::Handle(zone, cls.FieldFromIndex(id));
if (field.IsNull()) {
return Object::sentinel().raw();
}
@ -1238,13 +1240,12 @@ static RawObject* LookupHeapObjectClasses(Isolate* isolate,
return Object::sentinel().raw();
}
const char* encoded_id = parts[3];
String& id = String::Handle(isolate->current_zone(),
String::New(encoded_id));
String& id = String::Handle(zone, String::New(encoded_id));
id = String::DecodeIRI(id);
if (id.IsNull()) {
return Object::sentinel().raw();
}
Function& func = Function::Handle(cls.LookupFunction(id));
Function& func = Function::Handle(zone, cls.LookupFunction(id));
if (func.IsNull()) {
return Object::sentinel().raw();
}
@ -1259,7 +1260,7 @@ static RawObject* LookupHeapObjectClasses(Isolate* isolate,
if (!GetIntegerId(parts[3], &id)) {
return Object::sentinel().raw();
}
Function& func = Function::Handle();
Function& func = Function::Handle(zone);
func ^= cls.ImplicitClosureFunctionFromIndex(id);
if (func.IsNull()) {
return Object::sentinel().raw();
@ -1275,7 +1276,7 @@ static RawObject* LookupHeapObjectClasses(Isolate* isolate,
if (!GetIntegerId(parts[3], &id)) {
return Object::sentinel().raw();
}
Function& func = Function::Handle();
Function& func = Function::Handle(zone);
func ^= cls.InvocationDispatcherFunctionFromIndex(id);
if (func.IsNull()) {
return Object::sentinel().raw();
@ -1291,7 +1292,7 @@ static RawObject* LookupHeapObjectClasses(Isolate* isolate,
if (!GetIntegerId(parts[3], &id)) {
return Object::sentinel().raw();
}
Type& type = Type::Handle();
Type& type = Type::Handle(zone);
type ^= cls.CanonicalTypeFromIndex(id);
if (type.IsNull()) {
return Object::sentinel().raw();
@ -1304,8 +1305,9 @@ static RawObject* LookupHeapObjectClasses(Isolate* isolate,
}
static RawObject* LookupHeapObjectTypeArguments(Isolate* isolate,
char** parts, int num_parts) {
static RawObject* LookupHeapObjectTypeArguments(Thread* thread,
char** parts, int num_parts) {
Isolate* isolate = thread->isolate();
// TypeArguments ids look like: "typearguments/17"
if (num_parts < 2) {
return Object::sentinel().raw();
@ -1315,7 +1317,8 @@ static RawObject* LookupHeapObjectTypeArguments(Isolate* isolate,
return Object::sentinel().raw();
}
ObjectStore* object_store = isolate->object_store();
const Array& table = Array::Handle(object_store->canonical_type_arguments());
const Array& table = Array::Handle(thread->zone(),
object_store->canonical_type_arguments());
ASSERT(table.Length() > 0);
const intptr_t table_size = table.Length() - 1;
if ((id < 0) || (id >= table_size) || (table.At(id) == Object::null())) {
@ -1399,7 +1402,8 @@ static RawObject* LookupHeapObjectMessage(Isolate* isolate,
static RawObject* LookupHeapObject(Isolate* isolate,
const char* id_original,
ObjectIdRing::LookupResult* result) {
char* id = Thread::Current()->zone()->MakeCopyOfString(id_original);
Thread* thread = Thread::Current();
char* id = thread->zone()->MakeCopyOfString(id_original);
// Parse the id by splitting at each '/'.
const int MAX_PARTS = 8;
@ -1429,9 +1433,9 @@ static RawObject* LookupHeapObject(Isolate* isolate,
if (strcmp(parts[0], "objects") == 0) {
// Object ids look like "objects/1123"
Object& obj = Object::Handle(isolate->current_zone());
Object& obj = Object::Handle(thread->zone());
ObjectIdRing::LookupResult lookup_result;
obj = LookupObjectId(isolate, parts[1], &lookup_result);
obj = LookupObjectId(thread, parts[1], &lookup_result);
if (lookup_result != ObjectIdRing::kValid) {
if (result != NULL) {
*result = lookup_result;
@ -1443,9 +1447,9 @@ static RawObject* LookupHeapObject(Isolate* isolate,
} else if (strcmp(parts[0], "libraries") == 0) {
return LookupHeapObjectLibraries(isolate, parts, num_parts);
} else if (strcmp(parts[0], "classes") == 0) {
return LookupHeapObjectClasses(isolate, parts, num_parts);
return LookupHeapObjectClasses(thread, parts, num_parts);
} else if (strcmp(parts[0], "typearguments") == 0) {
return LookupHeapObjectTypeArguments(isolate, parts, num_parts);
return LookupHeapObjectTypeArguments(thread, parts, num_parts);
} else if (strcmp(parts[0], "code") == 0) {
return LookupHeapObjectCode(isolate, parts, num_parts);
} else if (strcmp(parts[0], "messages") == 0) {
@ -1779,11 +1783,11 @@ static bool Evaluate(Isolate* isolate, JSONStream* js) {
PrintMissingParamError(js, "expression");
return true;
}
const String& expr_str =
String::Handle(isolate->current_zone(), String::New(expr));
Zone* zone = Thread::Current()->zone();
const String& expr_str = String::Handle(zone, String::New(expr));
ObjectIdRing::LookupResult lookup_result;
Object& obj = Object::Handle(LookupHeapObject(isolate, target_id,
&lookup_result));
Object& obj = Object::Handle(zone, LookupHeapObject(isolate, target_id,
&lookup_result));
if (obj.raw() == Object::sentinel().raw()) {
if (lookup_result == ObjectIdRing::kCollected) {
PrintSentinel(js, kCollectedSentinel);
@ -1796,29 +1800,27 @@ static bool Evaluate(Isolate* isolate, JSONStream* js) {
}
if (obj.IsLibrary()) {
const Library& lib = Library::Cast(obj);
const Object& result = Object::Handle(lib.Evaluate(expr_str,
Array::empty_array(),
Array::empty_array()));
const Object& result = Object::Handle(zone,
lib.Evaluate(expr_str, Array::empty_array(), Array::empty_array()));
result.PrintJSON(js, true);
return true;
}
if (obj.IsClass()) {
const Class& cls = Class::Cast(obj);
const Object& result = Object::Handle(cls.Evaluate(expr_str,
Array::empty_array(),
Array::empty_array()));
const Object& result = Object::Handle(zone,
cls.Evaluate(expr_str, Array::empty_array(), Array::empty_array()));
result.PrintJSON(js, true);
return true;
}
if ((obj.IsInstance() || obj.IsNull()) &&
!ContainsNonInstance(obj)) {
// We don't use Instance::Cast here because it doesn't allow null.
Instance& instance = Instance::Handle(isolate->current_zone());
Instance& instance = Instance::Handle(zone);
instance ^= obj.raw();
const Object& result =
Object::Handle(instance.Evaluate(expr_str,
Array::empty_array(),
Array::empty_array()));
Object::Handle(zone, instance.Evaluate(expr_str,
Array::empty_array(),
Array::empty_array()));
result.PrintJSON(js, true);
return true;
}
@ -1852,11 +1854,11 @@ static bool EvaluateInFrame(Isolate* isolate, JSONStream* js) {
}
ActivationFrame* frame = stack->FrameAt(framePos);
Zone* zone = Thread::Current()->zone();
const char* expr = js->LookupParam("expression");
const String& expr_str = String::Handle(isolate->current_zone(),
String::New(expr));
const String& expr_str = String::Handle(zone, String::New(expr));
const Object& result = Object::Handle(frame->Evaluate(expr_str));
const Object& result = Object::Handle(zone, frame->Evaluate(expr_str));
result.PrintJSON(js, true);
return true;
}

View file

@ -1729,15 +1729,15 @@ bool SnapshotWriter::HandleVMIsolateObject(RawObject* rawobj) {
// objects and their accompanying token streams.
class ScriptVisitor : public ObjectVisitor {
public:
explicit ScriptVisitor(Isolate* isolate) :
ObjectVisitor(isolate),
objHandle_(Object::Handle(isolate->current_zone())),
explicit ScriptVisitor(Thread* thread) :
ObjectVisitor(thread->isolate()),
objHandle_(Object::Handle(thread->zone())),
count_(0),
scripts_(NULL) {}
ScriptVisitor(Isolate* isolate, const Array* scripts) :
ObjectVisitor(isolate),
objHandle_(Object::Handle(isolate->current_zone())),
ScriptVisitor(Thread* thread, const Array* scripts) :
ObjectVisitor(thread->isolate()),
objHandle_(Object::Handle(thread->zone())),
count_(0),
scripts_(scripts) {}
@ -1797,11 +1797,11 @@ FullSnapshotWriter::FullSnapshotWriter(uint8_t** vm_isolate_snapshot_buffer,
// into an array so that we can write it out as part of the VM isolate
// snapshot. We first count the number of script objects, allocate an array
// and then fill it up with the script objects.
ScriptVisitor scripts_counter(isolate());
ScriptVisitor scripts_counter(thread());
heap()->IterateOldObjects(&scripts_counter);
intptr_t count = scripts_counter.count();
scripts_ = Array::New(count, Heap::kOld);
ScriptVisitor script_visitor(isolate(), &scripts_);
ScriptVisitor script_visitor(thread(), &scripts_);
heap()->IterateOldObjects(&script_visitor);
// Stash the symbol table away for writing and reading into the vm isolate,