Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: runtime/vm/snapshot.cc

Issue 1310463005: - Ensure that HandleScope is initialized with a thread. (Remove (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Address review comments Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « runtime/vm/snapshot.h ('k') | runtime/vm/snapshot_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/snapshot.h" 5 #include "vm/snapshot.h"
6 6
7 #include "platform/assert.h" 7 #include "platform/assert.h"
8 #include "vm/bootstrap.h" 8 #include "vm/bootstrap.h"
9 #include "vm/class_finalizer.h" 9 #include "vm/class_finalizer.h"
10 #include "vm/dart.h" 10 #include "vm/dart.h"
11 #include "vm/dart_entry.h" 11 #include "vm/dart_entry.h"
12 #include "vm/exceptions.h" 12 #include "vm/exceptions.h"
13 #include "vm/heap.h" 13 #include "vm/heap.h"
14 #include "vm/lockers.h" 14 #include "vm/lockers.h"
15 #include "vm/longjump.h" 15 #include "vm/longjump.h"
16 #include "vm/object.h" 16 #include "vm/object.h"
17 #include "vm/object_store.h" 17 #include "vm/object_store.h"
18 #include "vm/snapshot_ids.h" 18 #include "vm/snapshot_ids.h"
19 #include "vm/symbols.h" 19 #include "vm/symbols.h"
20 #include "vm/verified_memory.h" 20 #include "vm/verified_memory.h"
21 #include "vm/version.h" 21 #include "vm/version.h"
22 22
23 // We currently only expect the Dart mutator to read snapshots. 23 // We currently only expect the Dart mutator to read snapshots.
24 #define ASSERT_NO_SAFEPOINT_SCOPE() \ 24 #define ASSERT_NO_SAFEPOINT_SCOPE() \
25 isolate()->AssertCurrentThreadIsMutator(); \ 25 isolate()->AssertCurrentThreadIsMutator(); \
26 ASSERT(Thread::Current()->no_safepoint_scope_depth() != 0) 26 ASSERT(thread()->no_safepoint_scope_depth() != 0)
27 27
28 namespace dart { 28 namespace dart {
29 29
30 static const int kNumVmIsolateSnapshotReferences = 32 * KB; 30 static const int kNumVmIsolateSnapshotReferences = 32 * KB;
31 static const int kNumInitialReferencesInFullSnapshot = 160 * KB; 31 static const int kNumInitialReferencesInFullSnapshot = 160 * KB;
32 static const int kNumInitialReferences = 64; 32 static const int kNumInitialReferences = 64;
33 33
34 34
35 static bool IsSingletonClassId(intptr_t class_id) { 35 static bool IsSingletonClassId(intptr_t class_id) {
36 // Check if this is a singleton object class which is shared by all isolates. 36 // Check if this is a singleton object class which is shared by all isolates.
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 intptr_t BaseReader::ReadSmiValue() { 166 intptr_t BaseReader::ReadSmiValue() {
167 return Smi::Value(ReadAsSmi()); 167 return Smi::Value(ReadAsSmi());
168 } 168 }
169 169
170 170
171 SnapshotReader::SnapshotReader( 171 SnapshotReader::SnapshotReader(
172 const uint8_t* buffer, 172 const uint8_t* buffer,
173 intptr_t size, 173 intptr_t size,
174 Snapshot::Kind kind, 174 Snapshot::Kind kind,
175 ZoneGrowableArray<BackRefNode>* backward_refs, 175 ZoneGrowableArray<BackRefNode>* backward_refs,
176 Isolate* isolate, 176 Thread* thread)
177 Zone* zone)
178 : BaseReader(buffer, size), 177 : BaseReader(buffer, size),
179 kind_(kind), 178 kind_(kind),
180 snapshot_code_(false), 179 snapshot_code_(false),
181 isolate_(isolate), 180 thread_(thread),
182 zone_(zone), 181 zone_(thread->zone()),
183 heap_(isolate->heap()), 182 heap_(isolate()->heap()),
184 old_space_(isolate->heap()->old_space()), 183 old_space_(thread_->isolate()->heap()->old_space()),
185 cls_(Class::Handle(isolate)), 184 cls_(Class::Handle(zone_)),
186 obj_(Object::Handle(isolate)), 185 obj_(Object::Handle(zone_)),
187 pobj_(PassiveObject::Handle(isolate)), 186 pobj_(PassiveObject::Handle(zone_)),
188 array_(Array::Handle(isolate)), 187 array_(Array::Handle(zone_)),
189 field_(Field::Handle(isolate)), 188 field_(Field::Handle(zone_)),
190 str_(String::Handle(isolate)), 189 str_(String::Handle(zone_)),
191 library_(Library::Handle(isolate)), 190 library_(Library::Handle(zone_)),
192 type_(AbstractType::Handle(isolate)), 191 type_(AbstractType::Handle(zone_)),
193 type_arguments_(TypeArguments::Handle(isolate)), 192 type_arguments_(TypeArguments::Handle(zone_)),
194 tokens_(Array::Handle(isolate)), 193 tokens_(Array::Handle(zone_)),
195 stream_(TokenStream::Handle(isolate)), 194 stream_(TokenStream::Handle(zone_)),
196 data_(ExternalTypedData::Handle(isolate)), 195 data_(ExternalTypedData::Handle(zone_)),
197 typed_data_(TypedData::Handle(isolate)), 196 typed_data_(TypedData::Handle(zone_)),
198 error_(UnhandledException::Handle(isolate)), 197 error_(UnhandledException::Handle(zone_)),
199 max_vm_isolate_object_id_( 198 max_vm_isolate_object_id_(
200 (kind == Snapshot::kFull) ? 199 (kind == Snapshot::kFull) ?
201 Object::vm_isolate_snapshot_object_table().Length() : 0), 200 Object::vm_isolate_snapshot_object_table().Length() : 0),
202 backward_references_(backward_refs) { 201 backward_references_(backward_refs) {
203 } 202 }
204 203
205 204
206 RawObject* SnapshotReader::ReadObject() { 205 RawObject* SnapshotReader::ReadObject() {
207 // Setup for long jump in case there is an exception while reading. 206 // Setup for long jump in case there is an exception while reading.
208 LongJumpScope jump; 207 LongJumpScope jump;
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
297 } 296 }
298 297
299 298
300 intptr_t SnapshotReader::NextAvailableObjectId() const { 299 intptr_t SnapshotReader::NextAvailableObjectId() const {
301 return backward_references_->length() + 300 return backward_references_->length() +
302 kMaxPredefinedObjectIds + max_vm_isolate_object_id_; 301 kMaxPredefinedObjectIds + max_vm_isolate_object_id_;
303 } 302 }
304 303
305 304
306 void SnapshotReader::SetReadException(const char* msg) { 305 void SnapshotReader::SetReadException(const char* msg) {
307 Thread* thread = Thread::Current(); 306 const String& error_str = String::Handle(zone(), String::New(msg));
308 Zone* zone = thread->zone(); 307 const Array& args = Array::Handle(zone(), Array::New(1));
309 const String& error_str = String::Handle(zone, String::New(msg));
310 const Array& args = Array::Handle(zone, Array::New(1));
311 args.SetAt(0, error_str); 308 args.SetAt(0, error_str);
312 Object& result = Object::Handle(zone); 309 Object& result = Object::Handle(zone());
313 const Library& library = Library::Handle(zone, Library::CoreLibrary()); 310 const Library& library = Library::Handle(zone(), Library::CoreLibrary());
314 result = DartLibraryCalls::InstanceCreate(library, 311 result = DartLibraryCalls::InstanceCreate(library,
315 Symbols::ArgumentError(), 312 Symbols::ArgumentError(),
316 Symbols::Dot(), 313 Symbols::Dot(),
317 args); 314 args);
318 const Stacktrace& stacktrace = Stacktrace::Handle(zone); 315 const Stacktrace& stacktrace = Stacktrace::Handle(zone());
319 const UnhandledException& error = UnhandledException::Handle( 316 const UnhandledException& error = UnhandledException::Handle(
320 zone, UnhandledException::New(Instance::Cast(result), stacktrace)); 317 zone(), UnhandledException::New(Instance::Cast(result), stacktrace));
321 thread->long_jump_base()->Jump(1, error); 318 thread()->long_jump_base()->Jump(1, error);
322 } 319 }
323 320
324 321
325 RawObject* SnapshotReader::VmIsolateSnapshotObject(intptr_t index) const { 322 RawObject* SnapshotReader::VmIsolateSnapshotObject(intptr_t index) const {
326 return Object::vm_isolate_snapshot_object_table().At(index); 323 return Object::vm_isolate_snapshot_object_table().At(index);
327 } 324 }
328 325
329 326
330 bool SnapshotReader::is_vm_isolate() const { 327 bool SnapshotReader::is_vm_isolate() const {
331 return isolate_ == Dart::vm_isolate(); 328 return isolate() == Dart::vm_isolate();
332 } 329 }
333 330
334 331
335 RawObject* SnapshotReader::ReadObjectImpl(bool as_reference, 332 RawObject* SnapshotReader::ReadObjectImpl(bool as_reference,
336 intptr_t patch_object_id, 333 intptr_t patch_object_id,
337 intptr_t patch_offset) { 334 intptr_t patch_offset) {
338 int64_t header_value = Read<int64_t>(); 335 int64_t header_value = Read<int64_t>();
339 if ((header_value & kSmiTagMask) == kSmiTag) { 336 if ((header_value & kSmiTagMask) == kSmiTag) {
340 return NewInteger(header_value); 337 return NewInteger(header_value);
341 } 338 }
(...skipping 750 matching lines...) Expand 10 before | Expand all | Expand 10 after
1092 uword address = 1089 uword address =
1093 old_space()->TryAllocateSmiInitializedLocked(size, 1090 old_space()->TryAllocateSmiInitializedLocked(size,
1094 PageSpace::kForceGrowth); 1091 PageSpace::kForceGrowth);
1095 if (address == 0) { 1092 if (address == 0) {
1096 // Use the preallocated out of memory exception to avoid calling 1093 // Use the preallocated out of memory exception to avoid calling
1097 // into dart code or allocating any code. 1094 // into dart code or allocating any code.
1098 // We do a longjmp at this point to unwind out of the entire 1095 // We do a longjmp at this point to unwind out of the entire
1099 // read part and return the error object back. 1096 // read part and return the error object back.
1100 const UnhandledException& error = UnhandledException::Handle( 1097 const UnhandledException& error = UnhandledException::Handle(
1101 object_store()->preallocated_unhandled_exception()); 1098 object_store()->preallocated_unhandled_exception());
1102 Thread::Current()->long_jump_base()->Jump(1, error); 1099 thread()->long_jump_base()->Jump(1, error);
1103 } 1100 }
1104 VerifiedMemory::Accept(address, size); 1101 VerifiedMemory::Accept(address, size);
1105 1102
1106 RawObject* raw_obj = reinterpret_cast<RawObject*>(address + kHeapObjectTag); 1103 RawObject* raw_obj = reinterpret_cast<RawObject*>(address + kHeapObjectTag);
1107 uword tags = 0; 1104 uword tags = 0;
1108 ASSERT(class_id != kIllegalCid); 1105 ASSERT(class_id != kIllegalCid);
1109 tags = RawObject::ClassIdTag::update(class_id, tags); 1106 tags = RawObject::ClassIdTag::update(class_id, tags);
1110 tags = RawObject::SizeTag::update(size, tags); 1107 tags = RawObject::SizeTag::update(size, tags);
1111 tags = RawObject::VMHeapObjectTag::update(is_vm_isolate(), tags); 1108 tags = RawObject::VMHeapObjectTag::update(is_vm_isolate(), tags);
1112 raw_obj->ptr()->tags_ = tags; 1109 raw_obj->ptr()->tags_ = tags;
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
1269 *PassiveObjectHandle() = ReadObjectImpl(as_reference, 1266 *PassiveObjectHandle() = ReadObjectImpl(as_reference,
1270 object_id, 1267 object_id,
1271 (i + offset)); 1268 (i + offset));
1272 result.SetAt(i, *PassiveObjectHandle()); 1269 result.SetAt(i, *PassiveObjectHandle());
1273 } 1270 }
1274 } 1271 }
1275 1272
1276 1273
1277 VmIsolateSnapshotReader::VmIsolateSnapshotReader(const uint8_t* buffer, 1274 VmIsolateSnapshotReader::VmIsolateSnapshotReader(const uint8_t* buffer,
1278 intptr_t size, 1275 intptr_t size,
1279 Zone* zone) 1276 Thread* thread)
1280 : SnapshotReader(buffer, 1277 : SnapshotReader(buffer,
1281 size, 1278 size,
1282 Snapshot::kFull, 1279 Snapshot::kFull,
1283 new ZoneGrowableArray<BackRefNode>( 1280 new ZoneGrowableArray<BackRefNode>(
1284 kNumVmIsolateSnapshotReferences), 1281 kNumVmIsolateSnapshotReferences),
1285 Dart::vm_isolate(), 1282 thread) {
1286 zone) {
1287 } 1283 }
1288 1284
1289 1285
1290 VmIsolateSnapshotReader::~VmIsolateSnapshotReader() { 1286 VmIsolateSnapshotReader::~VmIsolateSnapshotReader() {
1291 intptr_t len = GetBackwardReferenceTable()->length(); 1287 intptr_t len = GetBackwardReferenceTable()->length();
1292 Object::InitVmIsolateSnapshotObjectTable(len); 1288 Object::InitVmIsolateSnapshotObjectTable(len);
1293 ZoneGrowableArray<BackRefNode>* backrefs = GetBackwardReferenceTable(); 1289 ZoneGrowableArray<BackRefNode>* backrefs = GetBackwardReferenceTable();
1294 for (intptr_t i = 0; i < len; i++) { 1290 for (intptr_t i = 0; i < len; i++) {
1295 Object::vm_isolate_snapshot_object_table().SetAt( 1291 Object::vm_isolate_snapshot_object_table().SetAt(
1296 i, *(backrefs->At(i).reference())); 1292 i, *(backrefs->At(i).reference()));
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
1334 isolate->ValidateClassTable(); 1330 isolate->ValidateClassTable();
1335 #endif 1331 #endif
1336 1332
1337 return ApiError::null(); 1333 return ApiError::null();
1338 } 1334 }
1339 } 1335 }
1340 1336
1341 1337
1342 IsolateSnapshotReader::IsolateSnapshotReader(const uint8_t* buffer, 1338 IsolateSnapshotReader::IsolateSnapshotReader(const uint8_t* buffer,
1343 intptr_t size, 1339 intptr_t size,
1344 Isolate* isolate, 1340 Thread* thread)
1345 Zone* zone)
1346 : SnapshotReader(buffer, 1341 : SnapshotReader(buffer,
1347 size, 1342 size,
1348 Snapshot::kFull, 1343 Snapshot::kFull,
1349 new ZoneGrowableArray<BackRefNode>( 1344 new ZoneGrowableArray<BackRefNode>(
1350 kNumInitialReferencesInFullSnapshot), 1345 kNumInitialReferencesInFullSnapshot),
1351 isolate, 1346 thread) {
1352 zone) {
1353 } 1347 }
1354 1348
1355 1349
1356 IsolateSnapshotReader::~IsolateSnapshotReader() { 1350 IsolateSnapshotReader::~IsolateSnapshotReader() {
1357 ResetBackwardReferenceTable(); 1351 ResetBackwardReferenceTable();
1358 } 1352 }
1359 1353
1360 1354
1361 ScriptSnapshotReader::ScriptSnapshotReader(const uint8_t* buffer, 1355 ScriptSnapshotReader::ScriptSnapshotReader(const uint8_t* buffer,
1362 intptr_t size, 1356 intptr_t size,
1363 Isolate* isolate, 1357 Thread* thread)
1364 Zone* zone)
1365 : SnapshotReader(buffer, 1358 : SnapshotReader(buffer,
1366 size, 1359 size,
1367 Snapshot::kScript, 1360 Snapshot::kScript,
1368 new ZoneGrowableArray<BackRefNode>(kNumInitialReferences), 1361 new ZoneGrowableArray<BackRefNode>(kNumInitialReferences),
1369 isolate, 1362 thread) {
1370 zone) {
1371 } 1363 }
1372 1364
1373 1365
1374 ScriptSnapshotReader::~ScriptSnapshotReader() { 1366 ScriptSnapshotReader::~ScriptSnapshotReader() {
1375 ResetBackwardReferenceTable(); 1367 ResetBackwardReferenceTable();
1376 } 1368 }
1377 1369
1378 1370
1379 MessageSnapshotReader::MessageSnapshotReader(const uint8_t* buffer, 1371 MessageSnapshotReader::MessageSnapshotReader(const uint8_t* buffer,
1380 intptr_t size, 1372 intptr_t size,
1381 Isolate* isolate, 1373 Thread* thread)
1382 Zone* zone)
1383 : SnapshotReader(buffer, 1374 : SnapshotReader(buffer,
1384 size, 1375 size,
1385 Snapshot::kMessage, 1376 Snapshot::kMessage,
1386 new ZoneGrowableArray<BackRefNode>(kNumInitialReferences), 1377 new ZoneGrowableArray<BackRefNode>(kNumInitialReferences),
1387 isolate, 1378 thread) {
1388 zone) {
1389 } 1379 }
1390 1380
1391 1381
1392 MessageSnapshotReader::~MessageSnapshotReader() { 1382 MessageSnapshotReader::~MessageSnapshotReader() {
1393 ResetBackwardReferenceTable(); 1383 ResetBackwardReferenceTable();
1394 } 1384 }
1395 1385
1396 1386
1397 SnapshotWriter::SnapshotWriter(Snapshot::Kind kind, 1387 SnapshotWriter::SnapshotWriter(Snapshot::Kind kind,
1398 uint8_t** buffer, 1388 uint8_t** buffer,
1399 ReAlloc alloc, 1389 ReAlloc alloc,
1400 intptr_t initial_size, 1390 intptr_t initial_size,
1401 ForwardList* forward_list, 1391 ForwardList* forward_list,
1402 bool can_send_any_object, 1392 bool can_send_any_object,
1403 bool snapshot_code) 1393 bool snapshot_code)
1404 : BaseWriter(buffer, alloc, initial_size), 1394 : BaseWriter(buffer, alloc, initial_size),
1405 kind_(kind), 1395 kind_(kind),
1406 isolate_(Isolate::Current()), 1396 thread_(Thread::Current()),
1407 object_store_(isolate_->object_store()), 1397 object_store_(thread_->isolate()->object_store()),
1408 class_table_(isolate_->class_table()), 1398 class_table_(thread_->isolate()->class_table()),
1409 forward_list_(forward_list), 1399 forward_list_(forward_list),
1410 exception_type_(Exceptions::kNone), 1400 exception_type_(Exceptions::kNone),
1411 exception_msg_(NULL), 1401 exception_msg_(NULL),
1412 unmarked_objects_(false), 1402 unmarked_objects_(false),
1413 can_send_any_object_(can_send_any_object), 1403 can_send_any_object_(can_send_any_object),
1414 snapshot_code_(snapshot_code) { 1404 snapshot_code_(snapshot_code) {
1415 ASSERT(forward_list_ != NULL); 1405 ASSERT(forward_list_ != NULL);
1416 } 1406 }
1417 1407
1418 1408
(...skipping 792 matching lines...) Expand 10 before | Expand all | Expand 10 after
2211 // isolate message. 2201 // isolate message.
2212 RawFunction* func = Closure::GetFunction(obj); 2202 RawFunction* func = Closure::GetFunction(obj);
2213 // We only allow closure of top level methods or static functions in a 2203 // We only allow closure of top level methods or static functions in a
2214 // class to be sent in isolate messages. 2204 // class to be sent in isolate messages.
2215 if (can_send_any_object() && 2205 if (can_send_any_object() &&
2216 Function::IsImplicitStaticClosureFunction(func)) { 2206 Function::IsImplicitStaticClosureFunction(func)) {
2217 return func; 2207 return func;
2218 } 2208 }
2219 // Not a closure of a top level method or static function, throw an 2209 // Not a closure of a top level method or static function, throw an
2220 // exception as we do not allow these objects to be serialized. 2210 // exception as we do not allow these objects to be serialized.
2221 HANDLESCOPE(isolate()); 2211 HANDLESCOPE(thread());
2222 2212
2223 const Class& clazz = Class::Handle(isolate(), cls); 2213 const Class& clazz = Class::Handle(isolate(), cls);
2224 const Function& errorFunc = Function::Handle(isolate(), func); 2214 const Function& errorFunc = Function::Handle(isolate(), func);
2225 ASSERT(!errorFunc.IsNull()); 2215 ASSERT(!errorFunc.IsNull());
2226 2216
2227 // All other closures are errors. 2217 // All other closures are errors.
2228 const char* format = "Illegal argument in isolate message" 2218 const char* format = "Illegal argument in isolate message"
2229 " : (object is a closure - %s %s)"; 2219 " : (object is a closure - %s %s)";
2230 UnmarkAll(); // Unmark objects now as we are about to print stuff. 2220 UnmarkAll(); // Unmark objects now as we are about to print stuff.
2231 intptr_t len = OS::SNPrint(NULL, 0, format, 2221 intptr_t len = OS::SNPrint(NULL, 0, format,
2232 clazz.ToCString(), errorFunc.ToCString()) + 1; 2222 clazz.ToCString(), errorFunc.ToCString()) + 1;
2233 char* chars = Thread::Current()->zone()->Alloc<char>(len); 2223 char* chars = thread()->zone()->Alloc<char>(len);
2234 OS::SNPrint(chars, len, format, clazz.ToCString(), errorFunc.ToCString()); 2224 OS::SNPrint(chars, len, format, clazz.ToCString(), errorFunc.ToCString());
2235 SetWriteException(Exceptions::kArgument, chars); 2225 SetWriteException(Exceptions::kArgument, chars);
2236 } 2226 }
2237 return Function::null(); 2227 return Function::null();
2238 } 2228 }
2239 2229
2240 2230
2241 RawClass* SnapshotWriter::GetFunctionOwner(RawFunction* func) { 2231 RawClass* SnapshotWriter::GetFunctionOwner(RawFunction* func) {
2242 RawObject* owner = func->ptr()->owner_; 2232 RawObject* owner = func->ptr()->owner_;
2243 uword tags = GetObjectTags(owner); 2233 uword tags = GetObjectTags(owner);
2244 intptr_t class_id = RawObject::ClassIdTag::decode(tags); 2234 intptr_t class_id = RawObject::ClassIdTag::decode(tags);
2245 if (class_id == kClassCid) { 2235 if (class_id == kClassCid) {
2246 return reinterpret_cast<RawClass*>(owner); 2236 return reinterpret_cast<RawClass*>(owner);
2247 } 2237 }
2248 ASSERT(class_id == kPatchClassCid); 2238 ASSERT(class_id == kPatchClassCid);
2249 return reinterpret_cast<RawPatchClass*>(owner)->ptr()->patched_class_; 2239 return reinterpret_cast<RawPatchClass*>(owner)->ptr()->patched_class_;
2250 } 2240 }
2251 2241
2252 2242
2253 void SnapshotWriter::CheckForNativeFields(RawClass* cls) { 2243 void SnapshotWriter::CheckForNativeFields(RawClass* cls) {
2254 if (cls->ptr()->num_native_fields_ != 0) { 2244 if (cls->ptr()->num_native_fields_ != 0) {
2255 // We do not allow objects with native fields in an isolate message. 2245 // We do not allow objects with native fields in an isolate message.
2256 HANDLESCOPE(isolate()); 2246 HANDLESCOPE(thread());
2257 const char* format = "Illegal argument in isolate message" 2247 const char* format = "Illegal argument in isolate message"
2258 " : (object extends NativeWrapper - %s)"; 2248 " : (object extends NativeWrapper - %s)";
2259 UnmarkAll(); // Unmark objects now as we are about to print stuff. 2249 UnmarkAll(); // Unmark objects now as we are about to print stuff.
2260 const Class& clazz = Class::Handle(isolate(), cls); 2250 const Class& clazz = Class::Handle(isolate(), cls);
2261 intptr_t len = OS::SNPrint(NULL, 0, format, clazz.ToCString()) + 1; 2251 intptr_t len = OS::SNPrint(NULL, 0, format, clazz.ToCString()) + 1;
2262 char* chars = Thread::Current()->zone()->Alloc<char>(len); 2252 char* chars = thread()->zone()->Alloc<char>(len);
2263 OS::SNPrint(chars, len, format, clazz.ToCString()); 2253 OS::SNPrint(chars, len, format, clazz.ToCString());
2264 SetWriteException(Exceptions::kArgument, chars); 2254 SetWriteException(Exceptions::kArgument, chars);
2265 } 2255 }
2266 } 2256 }
2267 2257
2268 2258
2269 void SnapshotWriter::SetWriteException(Exceptions::ExceptionType type, 2259 void SnapshotWriter::SetWriteException(Exceptions::ExceptionType type,
2270 const char* msg) { 2260 const char* msg) {
2271 set_exception_type(type); 2261 set_exception_type(type);
2272 set_exception_msg(msg); 2262 set_exception_msg(msg);
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
2492 NoSafepointScope no_safepoint; 2482 NoSafepointScope no_safepoint;
2493 WriteObject(obj.raw()); 2483 WriteObject(obj.raw());
2494 UnmarkAll(); 2484 UnmarkAll();
2495 } else { 2485 } else {
2496 ThrowException(exception_type(), exception_msg()); 2486 ThrowException(exception_type(), exception_msg());
2497 } 2487 }
2498 } 2488 }
2499 2489
2500 2490
2501 } // namespace dart 2491 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/snapshot.h ('k') | runtime/vm/snapshot_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698