OLD | NEW |
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/object.h" | 5 #include "vm/object.h" |
6 | 6 |
7 #include "platform/assert.h" | 7 #include "platform/assert.h" |
8 #include "vm/assembler.h" | 8 #include "vm/assembler.h" |
9 #include "vm/bigint_operations.h" | 9 #include "vm/bigint_operations.h" |
10 #include "vm/bootstrap.h" | 10 #include "vm/bootstrap.h" |
11 #include "vm/datastream.h" | 11 #include "vm/datastream.h" |
12 #include "vm/code_generator.h" | 12 #include "vm/code_generator.h" |
13 #include "vm/code_patcher.h" | 13 #include "vm/code_patcher.h" |
14 #include "vm/compiler.h" | 14 #include "vm/compiler.h" |
15 #include "vm/compiler_stats.h" | 15 #include "vm/compiler_stats.h" |
16 #include "vm/class_finalizer.h" | 16 #include "vm/class_finalizer.h" |
17 #include "vm/dart.h" | 17 #include "vm/dart.h" |
18 #include "vm/dart_api_state.h" | 18 #include "vm/dart_api_state.h" |
19 #include "vm/dart_entry.h" | 19 #include "vm/dart_entry.h" |
20 #include "vm/debuginfo.h" | 20 #include "vm/debuginfo.h" |
21 #include "vm/double_conversion.h" | 21 #include "vm/double_conversion.h" |
22 #include "vm/exceptions.h" | 22 #include "vm/exceptions.h" |
23 #include "vm/growable_array.h" | 23 #include "vm/growable_array.h" |
24 #include "vm/heap.h" | 24 #include "vm/heap.h" |
25 #include "vm/object_store.h" | 25 #include "vm/object_store.h" |
26 #include "vm/parser.h" | 26 #include "vm/parser.h" |
27 #include "vm/runtime_entry.h" | 27 #include "vm/runtime_entry.h" |
28 #include "vm/scopes.h" | 28 #include "vm/scopes.h" |
29 #include "vm/stack_frame.h" | 29 #include "vm/stack_frame.h" |
| 30 #include "vm/symbols.h" |
30 #include "vm/timer.h" | 31 #include "vm/timer.h" |
31 #include "vm/unicode.h" | 32 #include "vm/unicode.h" |
32 | 33 |
33 namespace dart { | 34 namespace dart { |
34 | 35 |
35 DEFINE_FLAG(bool, generate_gdb_symbols, false, | 36 DEFINE_FLAG(bool, generate_gdb_symbols, false, |
36 "Generate symbols of generated dart functions for debugging with GDB"); | 37 "Generate symbols of generated dart functions for debugging with GDB"); |
37 DEFINE_FLAG(bool, show_internal_names, false, | 38 DEFINE_FLAG(bool, show_internal_names, false, |
38 "Show names of internal classes (e.g. \"OneByteString\") in error messages " | 39 "Show names of internal classes (e.g. \"OneByteString\") in error messages " |
39 "instead of showing the corresponding interface names (e.g. \"String\")"); | 40 "instead of showing the corresponding interface names (e.g. \"String\")"); |
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
247 // TODO(iposva): NoGCScope needs to be added here. | 248 // TODO(iposva): NoGCScope needs to be added here. |
248 ASSERT(class_class() == null_); | 249 ASSERT(class_class() == null_); |
249 // Initialize the static vtable values. | 250 // Initialize the static vtable values. |
250 { | 251 { |
251 Object fake_object; | 252 Object fake_object; |
252 Smi fake_smi; | 253 Smi fake_smi; |
253 Object::handle_vtable_ = fake_object.vtable(); | 254 Object::handle_vtable_ = fake_object.vtable(); |
254 Smi::handle_vtable_ = fake_smi.vtable(); | 255 Smi::handle_vtable_ = fake_smi.vtable(); |
255 } | 256 } |
256 | 257 |
257 Heap* heap = Isolate::Current()->heap(); | 258 Isolate* isolate = Isolate::Current(); |
| 259 Heap* heap = isolate->heap(); |
258 // Allocate and initialize the null instance, except its class_ field. | 260 // Allocate and initialize the null instance, except its class_ field. |
259 // 'null_' must be the first object allocated as it is used in allocation to | 261 // 'null_' must be the first object allocated as it is used in allocation to |
260 // clear the object. | 262 // clear the object. |
261 { | 263 { |
262 uword address = heap->Allocate(Instance::InstanceSize(), Heap::kOld); | 264 uword address = heap->Allocate(Instance::InstanceSize(), Heap::kOld); |
263 null_ = reinterpret_cast<RawInstance*>(address + kHeapObjectTag); | 265 null_ = reinterpret_cast<RawInstance*>(address + kHeapObjectTag); |
264 // The call below is using 'null_' to initialize itself. | 266 // The call below is using 'null_' to initialize itself. |
265 InitializeObject(address, kNullClassId, Instance::InstanceSize()); | 267 InitializeObject(address, kNullClassId, Instance::InstanceSize()); |
266 } | 268 } |
267 | 269 |
268 // Initialize object_store empty array to null_ in order to be able to check | 270 // Initialize object_store empty array to null_ in order to be able to check |
269 // if the empty array was allocated (RAW_NULL is not available). | 271 // if the empty array was allocated (RAW_NULL is not available). |
270 Isolate::Current()->object_store()->set_empty_array(Array::Handle()); | 272 isolate->object_store()->set_empty_array(Array::Handle()); |
271 | 273 |
272 Class& cls = Class::Handle(); | 274 Class& cls = Class::Handle(); |
273 | 275 |
274 // Allocate and initialize the class class. | 276 // Allocate and initialize the class class. |
275 { | 277 { |
276 intptr_t size = Class::InstanceSize(); | 278 intptr_t size = Class::InstanceSize(); |
277 uword address = heap->Allocate(size, Heap::kOld); | 279 uword address = heap->Allocate(size, Heap::kOld); |
278 class_class_ = reinterpret_cast<RawClass*>(address + kHeapObjectTag); | 280 class_class_ = reinterpret_cast<RawClass*>(address + kHeapObjectTag); |
279 InitializeObject(address, Class::kInstanceKind, size); | 281 InitializeObject(address, Class::kInstanceKind, size); |
280 | 282 |
281 Class fake; | 283 Class fake; |
282 // Initialization from Class::New<Class>. | 284 // Initialization from Class::New<Class>. |
283 // Directly set raw_ to break a circular dependency: SetRaw will attempt | 285 // Directly set raw_ to break a circular dependency: SetRaw will attempt |
284 // to lookup class class in the class table where it is not registered yet. | 286 // to lookup class class in the class table where it is not registered yet. |
285 cls.raw_ = class_class_; | 287 cls.raw_ = class_class_; |
286 cls.set_handle_vtable(fake.vtable()); | 288 cls.set_handle_vtable(fake.vtable()); |
287 cls.set_instance_size(Class::InstanceSize()); | 289 cls.set_instance_size(Class::InstanceSize()); |
288 cls.set_next_field_offset(Class::InstanceSize()); | 290 cls.set_next_field_offset(Class::InstanceSize()); |
289 cls.set_instance_kind(Class::kInstanceKind); | 291 cls.set_instance_kind(Class::kInstanceKind); |
290 cls.set_id(Class::kInstanceKind); | 292 cls.set_id(Class::kInstanceKind); |
291 cls.raw_ptr()->is_const_ = false; | 293 cls.raw_ptr()->is_const_ = false; |
292 cls.raw_ptr()->is_interface_ = false; | 294 cls.raw_ptr()->is_interface_ = false; |
293 cls.set_is_finalized(); | 295 cls.set_is_finalized(); |
294 cls.raw_ptr()->type_arguments_instance_field_offset_ = | 296 cls.raw_ptr()->type_arguments_instance_field_offset_ = |
295 Class::kNoTypeArguments; | 297 Class::kNoTypeArguments; |
296 cls.raw_ptr()->num_native_fields_ = 0; | 298 cls.raw_ptr()->num_native_fields_ = 0; |
297 cls.InitEmptyFields(); | 299 cls.InitEmptyFields(); |
298 Isolate::Current()->class_table()->Register(cls); | 300 isolate->class_table()->Register(cls); |
299 } | 301 } |
300 | 302 |
301 // Allocate and initialize the null class. | 303 // Allocate and initialize the null class. |
302 cls = Class::New<Instance>(kNullClassId); | 304 cls = Class::New<Instance>(kNullClassId); |
303 cls.set_is_finalized(); | 305 cls.set_is_finalized(); |
304 null_class_ = cls.raw(); | 306 null_class_ = cls.raw(); |
305 | 307 |
306 // Allocate and initialize the free list element class. | 308 // Allocate and initialize the free list element class. |
307 cls = Class::New<FreeListElement::FakeInstance>(kFreeListElement); | 309 cls = Class::New<FreeListElement::FakeInstance>(kFreeListElement); |
308 cls.set_is_finalized(); | 310 cls.set_is_finalized(); |
309 | 311 |
310 // Allocate and initialize the sentinel values of Null class. | 312 // Allocate and initialize the sentinel values of Null class. |
311 { | 313 { |
312 cls = null_class_; | |
313 Instance& sentinel = Instance::Handle(); | 314 Instance& sentinel = Instance::Handle(); |
314 sentinel ^= Object::Allocate(cls, Instance::InstanceSize(), Heap::kOld); | 315 sentinel ^= |
| 316 Object::Allocate(kNullClassId, Instance::InstanceSize(), Heap::kOld); |
315 sentinel_ = sentinel.raw(); | 317 sentinel_ = sentinel.raw(); |
316 | 318 |
317 Instance& transition_sentinel = Instance::Handle(); | 319 Instance& transition_sentinel = Instance::Handle(); |
318 transition_sentinel ^= | 320 transition_sentinel ^= |
319 Object::Allocate(cls, Instance::InstanceSize(), Heap::kOld); | 321 Object::Allocate(kNullClassId, Instance::InstanceSize(), Heap::kOld); |
320 transition_sentinel_ = transition_sentinel.raw(); | 322 transition_sentinel_ = transition_sentinel.raw(); |
321 } | 323 } |
322 | 324 |
323 // The interface "Dynamic" is not a VM internal class. It is the type class of | 325 // The interface "Dynamic" is not a VM internal class. It is the type class of |
324 // the "unknown type". For efficiency, we allocate it in the VM isolate. | 326 // the "unknown type". For efficiency, we allocate it in the VM isolate. |
325 // Therefore, it cannot have a heap allocated name (the name is hard coded, | 327 // Therefore, it cannot have a heap allocated name (the name is hard coded, |
326 // see GetSingletonClassIndex) and its array fields cannot be set to the empty | 328 // see GetSingletonClassIndex) and its array fields cannot be set to the empty |
327 // array, but remain null. | 329 // array, but remain null. |
328 // | 330 // |
329 // TODO(turnidge): Once the empty array is allocated in the vm | 331 // TODO(turnidge): Once the empty array is allocated in the vm |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
410 cls = Class::New<LanguageError>(); | 412 cls = Class::New<LanguageError>(); |
411 language_error_class_ = cls.raw(); | 413 language_error_class_ = cls.raw(); |
412 | 414 |
413 cls = Class::New<UnhandledException>(); | 415 cls = Class::New<UnhandledException>(); |
414 unhandled_exception_class_ = cls.raw(); | 416 unhandled_exception_class_ = cls.raw(); |
415 | 417 |
416 cls = Class::New<UnwindError>(); | 418 cls = Class::New<UnwindError>(); |
417 unwind_error_class_ = cls.raw(); | 419 unwind_error_class_ = cls.raw(); |
418 | 420 |
419 ASSERT(class_class() != null_); | 421 ASSERT(class_class() != null_); |
| 422 |
| 423 // Pre-allocate the Array and OneByteString class in the vm isolate so that |
| 424 // we can create a symbol table and populate it with some frequently used |
| 425 // strings as symbols. |
| 426 cls = Class::New<Array>(); |
| 427 isolate->object_store()->set_array_class(cls); |
| 428 cls = Class::New<OneByteString>(); |
| 429 isolate->object_store()->set_one_byte_string_class(cls); |
420 } | 430 } |
421 | 431 |
422 | 432 |
423 RawClass* Object::CreateAndRegisterInterface(const char* cname, | 433 RawClass* Object::CreateAndRegisterInterface(const char* cname, |
424 const Script& script, | 434 const Script& script, |
425 const Library& lib) { | 435 const Library& lib) { |
426 const String& name = String::Handle(String::NewSymbol(cname)); | 436 const String& name = String::Handle(Symbols::New(cname)); |
427 const Class& cls = Class::Handle( | 437 const Class& cls = Class::Handle( |
428 Class::NewInterface(name, script, Scanner::kDummyTokenIndex)); | 438 Class::NewInterface(name, script, Scanner::kDummyTokenIndex)); |
429 lib.AddClass(cls); | 439 lib.AddClass(cls); |
430 return cls.raw(); | 440 return cls.raw(); |
431 } | 441 } |
432 | 442 |
433 | 443 |
434 void Object::RegisterClass(const Class& cls, | 444 void Object::RegisterClass(const Class& cls, |
435 const char* cname, | 445 const char* cname, |
436 const Script& script, | 446 const Script& script, |
437 const Library& lib) { | 447 const Library& lib) { |
438 const String& name = String::Handle(String::NewSymbol(cname)); | 448 const String& name = String::Handle(Symbols::New(cname)); |
439 cls.set_name(name); | 449 cls.set_name(name); |
440 cls.set_script(script); | 450 cls.set_script(script); |
441 lib.AddClass(cls); | 451 lib.AddClass(cls); |
442 } | 452 } |
443 | 453 |
444 | 454 |
445 void Object::RegisterPrivateClass(const Class& cls, | 455 void Object::RegisterPrivateClass(const Class& cls, |
446 const char* public_class_name, | 456 const char* public_class_name, |
447 const Script& script, | 457 const Script& script, |
448 const Library& lib) { | 458 const Library& lib) { |
449 String& str = String::Handle(); | 459 String& str = String::Handle(); |
450 str = String::NewSymbol(public_class_name); | 460 str = Symbols::New(public_class_name); |
451 str = lib.PrivateName(str); | 461 str = lib.PrivateName(str); |
452 cls.set_name(str); | 462 cls.set_name(str); |
453 cls.set_script(script); | 463 cls.set_script(script); |
454 lib.AddClass(cls); | 464 lib.AddClass(cls); |
455 } | 465 } |
456 | 466 |
457 | 467 |
458 RawError* Object::Init(Isolate* isolate) { | 468 RawError* Object::Init(Isolate* isolate) { |
459 TIMERSCOPE(time_bootstrap); | 469 TIMERSCOPE(time_bootstrap); |
460 ObjectStore* object_store = isolate->object_store(); | 470 ObjectStore* object_store = isolate->object_store(); |
(...skipping 21 matching lines...) Expand all Loading... |
482 // has been created. | 492 // has been created. |
483 cls.InitEmptyFields(); | 493 cls.InitEmptyFields(); |
484 | 494 |
485 // Set up the growable object array class (Has to be done after the array | 495 // Set up the growable object array class (Has to be done after the array |
486 // class is setup as one of its field is an array object). | 496 // class is setup as one of its field is an array object). |
487 cls = Class::New<GrowableObjectArray>(); | 497 cls = Class::New<GrowableObjectArray>(); |
488 object_store->set_growable_object_array_class(cls); | 498 object_store->set_growable_object_array_class(cls); |
489 cls.set_type_arguments_instance_field_offset( | 499 cls.set_type_arguments_instance_field_offset( |
490 GrowableObjectArray::type_arguments_offset()); | 500 GrowableObjectArray::type_arguments_offset()); |
491 | 501 |
492 // Setup the symbol table used within the String class. | |
493 const int kInitialSymbolTableSize = 16; | |
494 array = Array::New(kInitialSymbolTableSize + 1); | |
495 // Last element contains the count of used slots. | |
496 array.SetAt(kInitialSymbolTableSize, Smi::Handle(Smi::New(0))); | |
497 object_store->set_symbol_table(array); | |
498 | |
499 // canonical_type_arguments_ are NULL terminated. | 502 // canonical_type_arguments_ are NULL terminated. |
500 array = Array::New(4); | 503 array = Array::New(4); |
501 object_store->set_canonical_type_arguments(array); | 504 object_store->set_canonical_type_arguments(array); |
502 | 505 |
503 // Pre-allocate the OneByteString class needed by the symbol table. | 506 // Pre-allocate the OneByteString class needed by the symbol table. |
504 cls = Class::New<OneByteString>(); | 507 cls = Class::New<OneByteString>(); |
505 object_store->set_one_byte_string_class(cls); | 508 object_store->set_one_byte_string_class(cls); |
506 | 509 |
| 510 // Setup the symbol table for the symbols created in the isolate. |
| 511 Symbols::SetupSymbolTable(isolate); |
| 512 |
507 // Set up the libraries array before initializing the core library. | 513 // Set up the libraries array before initializing the core library. |
508 const GrowableObjectArray& libraries = | 514 const GrowableObjectArray& libraries = |
509 GrowableObjectArray::Handle(GrowableObjectArray::New(Heap::kOld)); | 515 GrowableObjectArray::Handle(GrowableObjectArray::New(Heap::kOld)); |
510 object_store->set_libraries(libraries); | 516 object_store->set_libraries(libraries); |
511 | 517 |
512 // Basic infrastructure has been setup, initialize the class dictionary. | 518 // Basic infrastructure has been setup, initialize the class dictionary. |
513 Library::InitCoreLibrary(isolate); | 519 Library::InitCoreLibrary(isolate); |
514 Library& core_lib = Library::Handle(Library::CoreLibrary()); | 520 Library& core_lib = Library::Handle(Library::CoreLibrary()); |
515 ASSERT(!core_lib.IsNull()); | 521 ASSERT(!core_lib.IsNull()); |
516 Library& core_impl_lib = Library::Handle(Library::CoreImplLibrary()); | 522 Library& core_impl_lib = Library::Handle(Library::CoreImplLibrary()); |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
614 pending_classes.Add(cls, Heap::kOld); | 620 pending_classes.Add(cls, Heap::kOld); |
615 | 621 |
616 // Initialize the base interfaces used by the core VM classes. | 622 // Initialize the base interfaces used by the core VM classes. |
617 const Script& script = Script::Handle(Bootstrap::LoadScript()); | 623 const Script& script = Script::Handle(Bootstrap::LoadScript()); |
618 | 624 |
619 // Allocate and initialize the Object class and type. The Object | 625 // Allocate and initialize the Object class and type. The Object |
620 // class and ByteArray subclasses are the only pre-allocated, | 626 // class and ByteArray subclasses are the only pre-allocated, |
621 // non-interface classes in the core library. | 627 // non-interface classes in the core library. |
622 cls = Class::New<Instance>(); | 628 cls = Class::New<Instance>(); |
623 object_store->set_object_class(cls); | 629 object_store->set_object_class(cls); |
624 cls.set_name(String::Handle(String::NewSymbol("Object"))); | 630 cls.set_name(String::Handle(Symbols::New("Object"))); |
625 cls.set_script(script); | 631 cls.set_script(script); |
626 cls.set_is_prefinalized(); | 632 cls.set_is_prefinalized(); |
627 core_lib.AddClass(cls); | 633 core_lib.AddClass(cls); |
628 pending_classes.Add(cls, Heap::kOld); | 634 pending_classes.Add(cls, Heap::kOld); |
629 type = Type::NewNonParameterizedType(cls); | 635 type = Type::NewNonParameterizedType(cls); |
630 object_store->set_object_type(type); | 636 object_store->set_object_type(type); |
631 | 637 |
632 cls = Class::New<Int8Array>(); | 638 cls = Class::New<Int8Array>(); |
633 object_store->set_int8_array_class(cls); | 639 object_store->set_int8_array_class(cls); |
634 RegisterPrivateClass(cls, "_Int8Array", script, core_lib); | 640 RegisterPrivateClass(cls, "_Int8Array", script, core_lib); |
(...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
983 cur += kWordSize; | 989 cur += kWordSize; |
984 } | 990 } |
985 uword tags = 0; | 991 uword tags = 0; |
986 ASSERT(index != kIllegalObjectKind); | 992 ASSERT(index != kIllegalObjectKind); |
987 tags = RawObject::ClassIdTag::update(index, tags); | 993 tags = RawObject::ClassIdTag::update(index, tags); |
988 tags = RawObject::SizeTag::update(size, tags); | 994 tags = RawObject::SizeTag::update(size, tags); |
989 reinterpret_cast<RawObject*>(address)->tags_ = tags; | 995 reinterpret_cast<RawObject*>(address)->tags_ = tags; |
990 } | 996 } |
991 | 997 |
992 | 998 |
993 RawObject* Object::Allocate(const Class& cls, | 999 RawObject* Object::Allocate(intptr_t cls_id, |
994 intptr_t size, | 1000 intptr_t size, |
995 Heap::Space space) { | 1001 Heap::Space space) { |
996 ASSERT(Utils::IsAligned(size, kObjectAlignment)); | 1002 ASSERT(Utils::IsAligned(size, kObjectAlignment)); |
997 Isolate* isolate = Isolate::Current(); | 1003 Isolate* isolate = Isolate::Current(); |
998 Heap* heap = isolate->heap(); | 1004 Heap* heap = isolate->heap(); |
999 | 1005 |
1000 uword address = heap->Allocate(size, space); | 1006 uword address = heap->Allocate(size, space); |
1001 if (address == 0) { | 1007 if (address == 0) { |
1002 // Use the preallocated out of memory exception to avoid calling | 1008 // Use the preallocated out of memory exception to avoid calling |
1003 // into dart code or allocating any code. | 1009 // into dart code or allocating any code. |
1004 const Instance& exception = | 1010 const Instance& exception = |
1005 Instance::Handle(isolate->object_store()->out_of_memory()); | 1011 Instance::Handle(isolate->object_store()->out_of_memory()); |
1006 Exceptions::Throw(exception); | 1012 Exceptions::Throw(exception); |
1007 UNREACHABLE(); | 1013 UNREACHABLE(); |
1008 } | 1014 } |
1009 NoGCScope no_gc; | 1015 NoGCScope no_gc; |
1010 InitializeObject(address, cls.id(), size); | 1016 InitializeObject(address, cls_id, size); |
1011 RawObject* raw_obj = reinterpret_cast<RawObject*>(address + kHeapObjectTag); | 1017 RawObject* raw_obj = reinterpret_cast<RawObject*>(address + kHeapObjectTag); |
1012 ASSERT(cls.id() == RawObject::ClassIdTag::decode(raw_obj->ptr()->tags_)); | 1018 ASSERT(cls_id == RawObject::ClassIdTag::decode(raw_obj->ptr()->tags_)); |
1013 return raw_obj; | 1019 return raw_obj; |
1014 } | 1020 } |
1015 | 1021 |
1016 | 1022 |
1017 class StoreBufferObjectPointerVisitor : public ObjectPointerVisitor { | 1023 class StoreBufferObjectPointerVisitor : public ObjectPointerVisitor { |
1018 public: | 1024 public: |
1019 explicit StoreBufferObjectPointerVisitor(Isolate* isolate) : | 1025 explicit StoreBufferObjectPointerVisitor(Isolate* isolate) : |
1020 ObjectPointerVisitor(isolate) { | 1026 ObjectPointerVisitor(isolate) { |
1021 } | 1027 } |
1022 void VisitPointers(RawObject** first, RawObject** last) { | 1028 void VisitPointers(RawObject** first, RawObject** last) { |
1023 for (RawObject** curr = first; curr <= last; ++curr) { | 1029 for (RawObject** curr = first; curr <= last; ++curr) { |
1024 if ((*curr)->IsNewObject()) { | 1030 if ((*curr)->IsNewObject()) { |
1025 uword ptr = reinterpret_cast<uword>(curr); | 1031 uword ptr = reinterpret_cast<uword>(curr); |
1026 isolate()->store_buffer()->AddPointer(ptr); | 1032 isolate()->store_buffer()->AddPointer(ptr); |
1027 } | 1033 } |
1028 } | 1034 } |
1029 } | 1035 } |
1030 | 1036 |
1031 private: | 1037 private: |
1032 DISALLOW_COPY_AND_ASSIGN(StoreBufferObjectPointerVisitor); | 1038 DISALLOW_COPY_AND_ASSIGN(StoreBufferObjectPointerVisitor); |
1033 }; | 1039 }; |
1034 | 1040 |
1035 | 1041 |
1036 RawObject* Object::Clone(const Object& src, Heap::Space space) { | 1042 RawObject* Object::Clone(const Object& src, Heap::Space space) { |
1037 const Class& cls = Class::Handle(src.clazz()); | 1043 const Class& cls = Class::Handle(src.clazz()); |
1038 intptr_t size = src.raw()->Size(); | 1044 intptr_t size = src.raw()->Size(); |
1039 RawObject* raw_obj = Object::Allocate(cls, size, space); | 1045 RawObject* raw_obj = Object::Allocate(cls.id(), size, space); |
1040 NoGCScope no_gc; | 1046 NoGCScope no_gc; |
1041 memmove(raw_obj->ptr(), src.raw()->ptr(), size); | 1047 memmove(raw_obj->ptr(), src.raw()->ptr(), size); |
1042 if (space == Heap::kOld) { | 1048 if (space == Heap::kOld) { |
1043 StoreBufferObjectPointerVisitor visitor(Isolate::Current()); | 1049 StoreBufferObjectPointerVisitor visitor(Isolate::Current()); |
1044 raw_obj->VisitPointers(&visitor); | 1050 raw_obj->VisitPointers(&visitor); |
1045 } | 1051 } |
1046 return raw_obj; | 1052 return raw_obj; |
1047 } | 1053 } |
1048 | 1054 |
1049 | 1055 |
1050 RawString* Class::Name() const { | 1056 RawString* Class::Name() const { |
1051 if (raw_ptr()->name_ != String::null()) { | 1057 if (raw_ptr()->name_ != String::null()) { |
1052 return raw_ptr()->name_; | 1058 return raw_ptr()->name_; |
1053 } | 1059 } |
1054 ASSERT(class_class() != Class::null()); // class_class_ should be set up. | 1060 ASSERT(class_class() != Class::null()); // class_class_ should be set up. |
1055 intptr_t index = GetSingletonClassIndex(raw()); | 1061 intptr_t index = GetSingletonClassIndex(raw()); |
1056 return String::NewSymbol(GetSingletonClassName(index)); | 1062 return Symbols::New(GetSingletonClassName(index)); |
1057 } | 1063 } |
1058 | 1064 |
1059 | 1065 |
1060 RawString* Class::UserVisibleName() const { | 1066 RawString* Class::UserVisibleName() const { |
1061 if (FLAG_show_internal_names) { | 1067 if (FLAG_show_internal_names) { |
1062 return Name(); | 1068 return Name(); |
1063 } | 1069 } |
1064 switch (id()) { | 1070 switch (id()) { |
1065 case kInteger: | 1071 case kInteger: |
1066 case kSmi: | 1072 case kSmi: |
1067 case kMint: | 1073 case kMint: |
1068 case kBigint: | 1074 case kBigint: |
1069 return String::NewSymbol("int"); | 1075 return Symbols::New("int"); |
1070 case kDouble: | 1076 case kDouble: |
1071 return String::NewSymbol("double"); | 1077 return Symbols::New("double"); |
1072 case kOneByteString: | 1078 case kOneByteString: |
1073 case kTwoByteString: | 1079 case kTwoByteString: |
1074 case kFourByteString: | 1080 case kFourByteString: |
1075 case kExternalOneByteString: | 1081 case kExternalOneByteString: |
1076 case kExternalTwoByteString: | 1082 case kExternalTwoByteString: |
1077 case kExternalFourByteString: | 1083 case kExternalFourByteString: |
1078 return String::NewSymbol("String"); | 1084 return Symbols::New("String"); |
1079 case kBool: | 1085 case kBool: |
1080 return String::NewSymbol("bool"); | 1086 return Symbols::New("bool"); |
1081 case kArray: | 1087 case kArray: |
1082 case kImmutableArray: | 1088 case kImmutableArray: |
1083 case kGrowableObjectArray: | 1089 case kGrowableObjectArray: |
1084 return String::NewSymbol("List"); | 1090 return Symbols::New("List"); |
1085 case kInt8Array: | 1091 case kInt8Array: |
1086 case kExternalInt8Array: | 1092 case kExternalInt8Array: |
1087 return String::NewSymbol("Int8List"); | 1093 return Symbols::New("Int8List"); |
1088 case kUint8Array: | 1094 case kUint8Array: |
1089 case kExternalUint8Array: | 1095 case kExternalUint8Array: |
1090 return String::NewSymbol("Uint8List"); | 1096 return Symbols::New("Uint8List"); |
1091 case kInt16Array: | 1097 case kInt16Array: |
1092 case kExternalInt16Array: | 1098 case kExternalInt16Array: |
1093 return String::NewSymbol("Int16List"); | 1099 return Symbols::New("Int16List"); |
1094 case kUint16Array: | 1100 case kUint16Array: |
1095 case kExternalUint16Array: | 1101 case kExternalUint16Array: |
1096 return String::NewSymbol("Uint16List"); | 1102 return Symbols::New("Uint16List"); |
1097 case kInt32Array: | 1103 case kInt32Array: |
1098 case kExternalInt32Array: | 1104 case kExternalInt32Array: |
1099 return String::NewSymbol("Int32List"); | 1105 return Symbols::New("Int32List"); |
1100 case kUint32Array: | 1106 case kUint32Array: |
1101 case kExternalUint32Array: | 1107 case kExternalUint32Array: |
1102 return String::NewSymbol("Uint32List"); | 1108 return Symbols::New("Uint32List"); |
1103 case kInt64Array: | 1109 case kInt64Array: |
1104 case kExternalInt64Array: | 1110 case kExternalInt64Array: |
1105 return String::NewSymbol("Int64List"); | 1111 return Symbols::New("Int64List"); |
1106 case kUint64Array: | 1112 case kUint64Array: |
1107 case kExternalUint64Array: | 1113 case kExternalUint64Array: |
1108 return String::NewSymbol("Uint64List"); | 1114 return Symbols::New("Uint64List"); |
1109 case kFloat32Array: | 1115 case kFloat32Array: |
1110 case kExternalFloat32Array: | 1116 case kExternalFloat32Array: |
1111 return String::NewSymbol("Float32List"); | 1117 return Symbols::New("Float32List"); |
1112 case kFloat64Array: | 1118 case kFloat64Array: |
1113 case kExternalFloat64Array: | 1119 case kExternalFloat64Array: |
1114 return String::NewSymbol("Float64List"); | 1120 return Symbols::New("Float64List"); |
1115 default: | 1121 default: |
1116 return Name(); | 1122 return Name(); |
1117 } | 1123 } |
1118 UNREACHABLE(); | 1124 UNREACHABLE(); |
1119 } | 1125 } |
1120 | 1126 |
1121 | 1127 |
1122 RawType* Class::SignatureType() const { | 1128 RawType* Class::SignatureType() const { |
1123 ASSERT(IsSignatureClass()); | 1129 ASSERT(IsSignatureClass()); |
1124 const Function& function = Function::Handle(signature_function()); | 1130 const Function& function = Function::Handle(signature_function()); |
(...skipping 29 matching lines...) Expand all Loading... |
1154 Type::New(*this, signature_type_arguments, token_pos())); | 1160 Type::New(*this, signature_type_arguments, token_pos())); |
1155 | 1161 |
1156 // Return the still unfinalized signature type. | 1162 // Return the still unfinalized signature type. |
1157 ASSERT(!signature_type.IsFinalized()); | 1163 ASSERT(!signature_type.IsFinalized()); |
1158 return signature_type.raw(); | 1164 return signature_type.raw(); |
1159 } | 1165 } |
1160 | 1166 |
1161 | 1167 |
1162 template <class FakeObject> | 1168 template <class FakeObject> |
1163 RawClass* Class::New() { | 1169 RawClass* Class::New() { |
1164 Class& class_class = Class::Handle(Object::class_class()); | 1170 ASSERT(Object::class_class() != Class::null()); |
1165 Class& result = Class::Handle(); | 1171 Class& result = Class::Handle(); |
1166 { | 1172 { |
1167 RawObject* raw = Object::Allocate(class_class, | 1173 RawObject* raw = Object::Allocate(Class::kInstanceKind, |
1168 Class::InstanceSize(), | 1174 Class::InstanceSize(), |
1169 Heap::kOld); | 1175 Heap::kOld); |
1170 NoGCScope no_gc; | 1176 NoGCScope no_gc; |
1171 result ^= raw; | 1177 result ^= raw; |
1172 } | 1178 } |
1173 FakeObject fake; | 1179 FakeObject fake; |
1174 result.set_handle_vtable(fake.vtable()); | 1180 result.set_handle_vtable(fake.vtable()); |
1175 result.set_instance_size(FakeObject::InstanceSize()); | 1181 result.set_instance_size(FakeObject::InstanceSize()); |
1176 result.set_next_field_offset(FakeObject::InstanceSize()); | 1182 result.set_next_field_offset(FakeObject::InstanceSize()); |
1177 result.set_instance_kind(FakeObject::kInstanceKind); | 1183 result.set_instance_kind(FakeObject::kInstanceKind); |
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1489 ASSERT(!(field.is_static() && field.is_final()) || | 1495 ASSERT(!(field.is_static() && field.is_final()) || |
1490 (field.value() == Object::sentinel())); | 1496 (field.value() == Object::sentinel())); |
1491 } | 1497 } |
1492 // The value of static fields is already initialized to null. | 1498 // The value of static fields is already initialized to null. |
1493 StorePointer(&raw_ptr()->fields_, value.raw()); | 1499 StorePointer(&raw_ptr()->fields_, value.raw()); |
1494 } | 1500 } |
1495 | 1501 |
1496 | 1502 |
1497 template <class FakeInstance> | 1503 template <class FakeInstance> |
1498 RawClass* Class::New(intptr_t index) { | 1504 RawClass* Class::New(intptr_t index) { |
1499 Class& class_class = Class::Handle(Object::class_class()); | 1505 ASSERT(Object::class_class() != Class::null()); |
1500 Class& result = Class::Handle(); | 1506 Class& result = Class::Handle(); |
1501 { | 1507 { |
1502 RawObject* raw = Object::Allocate(class_class, | 1508 RawObject* raw = Object::Allocate(Class::kInstanceKind, |
1503 Class::InstanceSize(), | 1509 Class::InstanceSize(), |
1504 Heap::kOld); | 1510 Heap::kOld); |
1505 NoGCScope no_gc; | 1511 NoGCScope no_gc; |
1506 result ^= raw; | 1512 result ^= raw; |
1507 } | 1513 } |
1508 FakeInstance fake; | 1514 FakeInstance fake; |
1509 ASSERT(fake.IsInstance()); | 1515 ASSERT(fake.IsInstance()); |
1510 result.set_handle_vtable(fake.vtable()); | 1516 result.set_handle_vtable(fake.vtable()); |
1511 result.set_instance_size(FakeInstance::InstanceSize()); | 1517 result.set_instance_size(FakeInstance::InstanceSize()); |
1512 result.set_next_field_offset(FakeInstance::InstanceSize()); | 1518 result.set_next_field_offset(FakeInstance::InstanceSize()); |
(...skipping 703 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2216 intptr_t token_pos) { | 2222 intptr_t token_pos) { |
2217 const UnresolvedClass& type = UnresolvedClass::Handle(UnresolvedClass::New()); | 2223 const UnresolvedClass& type = UnresolvedClass::Handle(UnresolvedClass::New()); |
2218 type.set_library_prefix(library_prefix); | 2224 type.set_library_prefix(library_prefix); |
2219 type.set_ident(ident); | 2225 type.set_ident(ident); |
2220 type.set_token_pos(token_pos); | 2226 type.set_token_pos(token_pos); |
2221 return type.raw(); | 2227 return type.raw(); |
2222 } | 2228 } |
2223 | 2229 |
2224 | 2230 |
2225 RawUnresolvedClass* UnresolvedClass::New() { | 2231 RawUnresolvedClass* UnresolvedClass::New() { |
2226 const Class& unresolved_class_class = | 2232 ASSERT(Object::unresolved_class_class() != Class::null()); |
2227 Class::Handle(Object::unresolved_class_class()); | 2233 RawObject* raw = Object::Allocate(UnresolvedClass::kInstanceKind, |
2228 RawObject* raw = Object::Allocate(unresolved_class_class, | |
2229 UnresolvedClass::InstanceSize(), | 2234 UnresolvedClass::InstanceSize(), |
2230 Heap::kOld); | 2235 Heap::kOld); |
2231 return reinterpret_cast<RawUnresolvedClass*>(raw); | 2236 return reinterpret_cast<RawUnresolvedClass*>(raw); |
2232 } | 2237 } |
2233 | 2238 |
2234 | 2239 |
2235 void UnresolvedClass::set_token_pos(intptr_t token_pos) const { | 2240 void UnresolvedClass::set_token_pos(intptr_t token_pos) const { |
2236 ASSERT(token_pos >= 0); | 2241 ASSERT(token_pos >= 0); |
2237 raw_ptr()->token_pos_ = token_pos; | 2242 raw_ptr()->token_pos_ = token_pos; |
2238 } | 2243 } |
(...skipping 14 matching lines...) Expand all Loading... |
2253 StorePointer(&raw_ptr()->factory_signature_class_, value.raw()); | 2258 StorePointer(&raw_ptr()->factory_signature_class_, value.raw()); |
2254 } | 2259 } |
2255 | 2260 |
2256 | 2261 |
2257 RawString* UnresolvedClass::Name() const { | 2262 RawString* UnresolvedClass::Name() const { |
2258 if (library_prefix() != LibraryPrefix::null()) { | 2263 if (library_prefix() != LibraryPrefix::null()) { |
2259 const LibraryPrefix& lib_prefix = LibraryPrefix::Handle(library_prefix()); | 2264 const LibraryPrefix& lib_prefix = LibraryPrefix::Handle(library_prefix()); |
2260 String& name = String::Handle(); | 2265 String& name = String::Handle(); |
2261 String& str = String::Handle(); | 2266 String& str = String::Handle(); |
2262 name = lib_prefix.name(); // Qualifier. | 2267 name = lib_prefix.name(); // Qualifier. |
2263 str = String::New("."); | 2268 str = Symbols::Dot(); |
2264 name = String::Concat(name, str); | 2269 name = String::Concat(name, str); |
2265 str = ident(); | 2270 str = ident(); |
2266 name = String::Concat(name, str); | 2271 name = String::Concat(name, str); |
2267 return name.raw(); | 2272 return name.raw(); |
2268 } else { | 2273 } else { |
2269 return ident(); | 2274 return ident(); |
2270 } | 2275 } |
2271 } | 2276 } |
2272 | 2277 |
2273 | 2278 |
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2454 } else { | 2459 } else { |
2455 const String& args_name = String::Handle( | 2460 const String& args_name = String::Handle( |
2456 args.SubvectorName(first_type_param_index, | 2461 args.SubvectorName(first_type_param_index, |
2457 num_type_params, | 2462 num_type_params, |
2458 name_visibility)); | 2463 name_visibility)); |
2459 type_name = String::Concat(class_name, args_name); | 2464 type_name = String::Concat(class_name, args_name); |
2460 } | 2465 } |
2461 // The name is only used for type checking and debugging purposes. | 2466 // The name is only used for type checking and debugging purposes. |
2462 // Unless profiling data shows otherwise, it is not worth caching the name in | 2467 // Unless profiling data shows otherwise, it is not worth caching the name in |
2463 // the type. | 2468 // the type. |
2464 return String::NewSymbol(type_name); | 2469 return Symbols::New(type_name); |
2465 } | 2470 } |
2466 | 2471 |
2467 | 2472 |
2468 RawString* AbstractType::ClassName() const { | 2473 RawString* AbstractType::ClassName() const { |
2469 if (HasResolvedTypeClass()) { | 2474 if (HasResolvedTypeClass()) { |
2470 return Class::Handle(type_class()).Name(); | 2475 return Class::Handle(type_class()).Name(); |
2471 } else { | 2476 } else { |
2472 return UnresolvedClass::Handle(unresolved_class()).Name(); | 2477 return UnresolvedClass::Handle(unresolved_class()).Name(); |
2473 } | 2478 } |
2474 } | 2479 } |
(...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2866 StorePointer(&raw_ptr()->type_class_, value.raw()); | 2871 StorePointer(&raw_ptr()->type_class_, value.raw()); |
2867 } | 2872 } |
2868 | 2873 |
2869 | 2874 |
2870 void Type::set_arguments(const AbstractTypeArguments& value) const { | 2875 void Type::set_arguments(const AbstractTypeArguments& value) const { |
2871 StorePointer(&raw_ptr()->arguments_, value.raw()); | 2876 StorePointer(&raw_ptr()->arguments_, value.raw()); |
2872 } | 2877 } |
2873 | 2878 |
2874 | 2879 |
2875 RawType* Type::New(Heap::Space space) { | 2880 RawType* Type::New(Heap::Space space) { |
2876 const Class& type_class = Class::Handle(Object::type_class()); | 2881 ASSERT(Object::type_class() != Class::null()); |
2877 RawObject* raw = Object::Allocate(type_class, | 2882 RawObject* raw = Object::Allocate(Type::kInstanceKind, |
2878 Type::InstanceSize(), | 2883 Type::InstanceSize(), |
2879 space); | 2884 space); |
2880 return reinterpret_cast<RawType*>(raw); | 2885 return reinterpret_cast<RawType*>(raw); |
2881 } | 2886 } |
2882 | 2887 |
2883 | 2888 |
2884 RawType* Type::New(const Object& clazz, | 2889 RawType* Type::New(const Object& clazz, |
2885 const AbstractTypeArguments& arguments, | 2890 const AbstractTypeArguments& arguments, |
2886 intptr_t token_pos, | 2891 intptr_t token_pos, |
2887 Heap::Space space) { | 2892 Heap::Space space) { |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3027 const AbstractTypeArguments& instantiator_type_arguments) const { | 3032 const AbstractTypeArguments& instantiator_type_arguments) const { |
3028 ASSERT(IsFinalized()); | 3033 ASSERT(IsFinalized()); |
3029 if (instantiator_type_arguments.IsNull()) { | 3034 if (instantiator_type_arguments.IsNull()) { |
3030 return Type::DynamicType(); | 3035 return Type::DynamicType(); |
3031 } | 3036 } |
3032 return instantiator_type_arguments.TypeAt(index()); | 3037 return instantiator_type_arguments.TypeAt(index()); |
3033 } | 3038 } |
3034 | 3039 |
3035 | 3040 |
3036 RawTypeParameter* TypeParameter::New() { | 3041 RawTypeParameter* TypeParameter::New() { |
3037 const Class& type_parameter_class = | 3042 ASSERT(Object::type_parameter_class() != Class::null()); |
3038 Class::Handle(Object::type_parameter_class()); | 3043 RawObject* raw = Object::Allocate(TypeParameter::kInstanceKind, |
3039 RawObject* raw = Object::Allocate(type_parameter_class, | |
3040 TypeParameter::InstanceSize(), | 3044 TypeParameter::InstanceSize(), |
3041 Heap::kOld); | 3045 Heap::kOld); |
3042 return reinterpret_cast<RawTypeParameter*>(raw); | 3046 return reinterpret_cast<RawTypeParameter*>(raw); |
3043 } | 3047 } |
3044 | 3048 |
3045 | 3049 |
3046 RawTypeParameter* TypeParameter::New(const Class& parameterized_class, | 3050 RawTypeParameter* TypeParameter::New(const Class& parameterized_class, |
3047 intptr_t index, | 3051 intptr_t index, |
3048 const String& name, | 3052 const String& name, |
3049 const AbstractType& bound, | 3053 const AbstractType& bound, |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3128 | 3132 |
3129 RawString* AbstractTypeArguments::SubvectorName( | 3133 RawString* AbstractTypeArguments::SubvectorName( |
3130 intptr_t from_index, | 3134 intptr_t from_index, |
3131 intptr_t len, | 3135 intptr_t len, |
3132 NameVisibility name_visibility) const { | 3136 NameVisibility name_visibility) const { |
3133 ASSERT(from_index + len <= Length()); | 3137 ASSERT(from_index + len <= Length()); |
3134 String& name = String::Handle(); | 3138 String& name = String::Handle(); |
3135 const intptr_t num_strings = 2*len + 1; // "<""T"", ""T"">". | 3139 const intptr_t num_strings = 2*len + 1; // "<""T"", ""T"">". |
3136 const Array& strings = Array::Handle(Array::New(num_strings)); | 3140 const Array& strings = Array::Handle(Array::New(num_strings)); |
3137 intptr_t s = 0; | 3141 intptr_t s = 0; |
3138 strings.SetAt(s++, String::Handle(String::NewSymbol("<"))); | 3142 strings.SetAt(s++, String::Handle(Symbols::New("<"))); |
3139 const String& kCommaSpace = String::Handle(String::NewSymbol(", ")); | 3143 const String& kCommaSpace = String::Handle(Symbols::New(", ")); |
3140 AbstractType& type = AbstractType::Handle(); | 3144 AbstractType& type = AbstractType::Handle(); |
3141 for (intptr_t i = 0; i < len; i++) { | 3145 for (intptr_t i = 0; i < len; i++) { |
3142 type = TypeAt(from_index + i); | 3146 type = TypeAt(from_index + i); |
3143 name = type.BuildName(name_visibility); | 3147 name = type.BuildName(name_visibility); |
3144 strings.SetAt(s++, name); | 3148 strings.SetAt(s++, name); |
3145 if (i < len - 1) { | 3149 if (i < len - 1) { |
3146 strings.SetAt(s++, kCommaSpace); | 3150 strings.SetAt(s++, kCommaSpace); |
3147 } | 3151 } |
3148 } | 3152 } |
3149 strings.SetAt(s++, String::Handle(String::NewSymbol(">"))); | 3153 strings.SetAt(s++, String::Handle(Symbols::New(">"))); |
3150 ASSERT(s == num_strings); | 3154 ASSERT(s == num_strings); |
3151 name = String::ConcatAll(strings); | 3155 name = String::ConcatAll(strings); |
3152 return String::NewSymbol(name); | 3156 return Symbols::New(name); |
3153 } | 3157 } |
3154 | 3158 |
3155 | 3159 |
3156 bool AbstractTypeArguments::Equals(const AbstractTypeArguments& other) const { | 3160 bool AbstractTypeArguments::Equals(const AbstractTypeArguments& other) const { |
3157 ASSERT(!IsNull()); // Use AbstractTypeArguments::AreEqual(). | 3161 ASSERT(!IsNull()); // Use AbstractTypeArguments::AreEqual(). |
3158 if (this->raw() == other.raw()) { | 3162 if (this->raw() == other.raw()) { |
3159 return true; | 3163 return true; |
3160 } | 3164 } |
3161 if (other.IsNull()) { | 3165 if (other.IsNull()) { |
3162 return false; | 3166 return false; |
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3453 } | 3457 } |
3454 | 3458 |
3455 | 3459 |
3456 RawTypeArguments* TypeArguments::New(intptr_t len, Heap::Space space) { | 3460 RawTypeArguments* TypeArguments::New(intptr_t len, Heap::Space space) { |
3457 if ((len < 0) || (len > kMaxTypes)) { | 3461 if ((len < 0) || (len > kMaxTypes)) { |
3458 // TODO(iposva): Should we throw an illegal parameter exception? | 3462 // TODO(iposva): Should we throw an illegal parameter exception? |
3459 UNIMPLEMENTED(); | 3463 UNIMPLEMENTED(); |
3460 return null(); | 3464 return null(); |
3461 } | 3465 } |
3462 | 3466 |
3463 const Class& type_arguments_class = | |
3464 Class::Handle(Object::type_arguments_class()); | |
3465 TypeArguments& result = TypeArguments::Handle(); | 3467 TypeArguments& result = TypeArguments::Handle(); |
3466 { | 3468 { |
3467 RawObject* raw = Object::Allocate(type_arguments_class, | 3469 RawObject* raw = Object::Allocate(TypeArguments::kInstanceKind, |
3468 TypeArguments::InstanceSize(len), | 3470 TypeArguments::InstanceSize(len), |
3469 space); | 3471 space); |
3470 NoGCScope no_gc; | 3472 NoGCScope no_gc; |
3471 result ^= raw; | 3473 result ^= raw; |
3472 // Length must be set before we start storing into the array. | 3474 // Length must be set before we start storing into the array. |
3473 result.SetLength(len); | 3475 result.SetLength(len); |
3474 } | 3476 } |
3475 return result.raw(); | 3477 return result.raw(); |
3476 } | 3478 } |
3477 | 3479 |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3577 } | 3579 } |
3578 | 3580 |
3579 | 3581 |
3580 void InstantiatedTypeArguments::set_instantiator_type_arguments( | 3582 void InstantiatedTypeArguments::set_instantiator_type_arguments( |
3581 const AbstractTypeArguments& value) const { | 3583 const AbstractTypeArguments& value) const { |
3582 StorePointer(&raw_ptr()->instantiator_type_arguments_, value.raw()); | 3584 StorePointer(&raw_ptr()->instantiator_type_arguments_, value.raw()); |
3583 } | 3585 } |
3584 | 3586 |
3585 | 3587 |
3586 RawInstantiatedTypeArguments* InstantiatedTypeArguments::New() { | 3588 RawInstantiatedTypeArguments* InstantiatedTypeArguments::New() { |
3587 const Class& instantiated_type_arguments_class = | 3589 ASSERT(Object::instantiated_type_arguments_class() != Class::null()); |
3588 Class::Handle(Object::instantiated_type_arguments_class()); | 3590 RawObject* raw = Object::Allocate(InstantiatedTypeArguments::kInstanceKind, |
3589 RawObject* raw = Object::Allocate(instantiated_type_arguments_class, | |
3590 InstantiatedTypeArguments::InstanceSize(), | 3591 InstantiatedTypeArguments::InstanceSize(), |
3591 Heap::kNew); | 3592 Heap::kNew); |
3592 return reinterpret_cast<RawInstantiatedTypeArguments*>(raw); | 3593 return reinterpret_cast<RawInstantiatedTypeArguments*>(raw); |
3593 } | 3594 } |
3594 | 3595 |
3595 | 3596 |
3596 RawInstantiatedTypeArguments* InstantiatedTypeArguments::New( | 3597 RawInstantiatedTypeArguments* InstantiatedTypeArguments::New( |
3597 const AbstractTypeArguments& uninstantiated_type_arguments, | 3598 const AbstractTypeArguments& uninstantiated_type_arguments, |
3598 const AbstractTypeArguments& instantiator_type_arguments) { | 3599 const AbstractTypeArguments& instantiator_type_arguments) { |
3599 const InstantiatedTypeArguments& result = | 3600 const InstantiatedTypeArguments& result = |
(...skipping 481 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4081 bool Function::IsImplicitClosureFunction() const { | 4082 bool Function::IsImplicitClosureFunction() const { |
4082 if (!IsClosureFunction()) { | 4083 if (!IsClosureFunction()) { |
4083 return false; | 4084 return false; |
4084 } | 4085 } |
4085 const Function& parent = Function::Handle(parent_function()); | 4086 const Function& parent = Function::Handle(parent_function()); |
4086 return parent.raw_ptr()->implicit_closure_function_ == raw(); | 4087 return parent.raw_ptr()->implicit_closure_function_ == raw(); |
4087 } | 4088 } |
4088 | 4089 |
4089 | 4090 |
4090 RawFunction* Function::New() { | 4091 RawFunction* Function::New() { |
4091 const Class& function_class = Class::Handle(Object::function_class()); | 4092 ASSERT(Object::function_class() != Class::null()); |
4092 RawObject* raw = Object::Allocate(function_class, | 4093 RawObject* raw = Object::Allocate(Function::kInstanceKind, |
4093 Function::InstanceSize(), | 4094 Function::InstanceSize(), |
4094 Heap::kOld); | 4095 Heap::kOld); |
4095 return reinterpret_cast<RawFunction*>(raw); | 4096 return reinterpret_cast<RawFunction*>(raw); |
4096 } | 4097 } |
4097 | 4098 |
4098 | 4099 |
4099 RawFunction* Function::New(const String& name, | 4100 RawFunction* Function::New(const String& name, |
4100 RawFunction::Kind kind, | 4101 RawFunction::Kind kind, |
4101 bool is_static, | 4102 bool is_static, |
4102 bool is_const, | 4103 bool is_const, |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4213 return closure_function.raw(); | 4214 return closure_function.raw(); |
4214 } | 4215 } |
4215 | 4216 |
4216 | 4217 |
4217 RawString* Function::BuildSignature( | 4218 RawString* Function::BuildSignature( |
4218 bool instantiate, | 4219 bool instantiate, |
4219 NameVisibility name_visibility, | 4220 NameVisibility name_visibility, |
4220 const AbstractTypeArguments& instantiator) const { | 4221 const AbstractTypeArguments& instantiator) const { |
4221 const GrowableObjectArray& pieces = | 4222 const GrowableObjectArray& pieces = |
4222 GrowableObjectArray::Handle(GrowableObjectArray::New()); | 4223 GrowableObjectArray::Handle(GrowableObjectArray::New()); |
4223 const String& kCommaSpace = String::Handle(String::NewSymbol(", ")); | 4224 const String& kCommaSpace = String::Handle(Symbols::New(", ")); |
4224 const String& kColonSpace = String::Handle(String::NewSymbol(": ")); | 4225 const String& kColonSpace = String::Handle(Symbols::New(": ")); |
4225 const String& kLParen = String::Handle(String::NewSymbol("(")); | 4226 const String& kLParen = String::Handle(Symbols::New("(")); |
4226 const String& kRParen = String::Handle(String::NewSymbol(") => ")); | 4227 const String& kRParen = String::Handle(Symbols::New(") => ")); |
4227 const String& kLBracket = String::Handle(String::NewSymbol("[")); | 4228 const String& kLBracket = String::Handle(Symbols::New("[")); |
4228 const String& kRBracket = String::Handle(String::NewSymbol("]")); | 4229 const String& kRBracket = String::Handle(Symbols::New("]")); |
4229 String& name = String::Handle(); | 4230 String& name = String::Handle(); |
4230 if (!instantiate && !is_static()) { | 4231 if (!instantiate && !is_static()) { |
4231 // Prefix the signature with its type parameters, if any (e.g. "<K, V>"). | 4232 // Prefix the signature with its type parameters, if any (e.g. "<K, V>"). |
4232 // The signature of static functions cannot be type parameterized. | 4233 // The signature of static functions cannot be type parameterized. |
4233 const String& kSpaceExtendsSpace = | 4234 const String& kSpaceExtendsSpace = |
4234 String::Handle(String::NewSymbol(" extends ")); | 4235 String::Handle(Symbols::New(" extends ")); |
4235 const String& kLAngleBracket = String::Handle(String::NewSymbol("<")); | 4236 const String& kLAngleBracket = String::Handle(Symbols::New("<")); |
4236 const String& kRAngleBracket = String::Handle(String::NewSymbol(">")); | 4237 const String& kRAngleBracket = String::Handle(Symbols::New(">")); |
4237 const Class& function_class = Class::Handle(owner()); | 4238 const Class& function_class = Class::Handle(owner()); |
4238 ASSERT(!function_class.IsNull()); | 4239 ASSERT(!function_class.IsNull()); |
4239 const TypeArguments& type_parameters = TypeArguments::Handle( | 4240 const TypeArguments& type_parameters = TypeArguments::Handle( |
4240 function_class.type_parameters()); | 4241 function_class.type_parameters()); |
4241 if (!type_parameters.IsNull()) { | 4242 if (!type_parameters.IsNull()) { |
4242 intptr_t num_type_parameters = type_parameters.Length(); | 4243 intptr_t num_type_parameters = type_parameters.Length(); |
4243 pieces.Add(kLAngleBracket); | 4244 pieces.Add(kLAngleBracket); |
4244 TypeParameter& type_parameter = TypeParameter::Handle(); | 4245 TypeParameter& type_parameter = TypeParameter::Handle(); |
4245 AbstractType& bound = AbstractType::Handle(); | 4246 AbstractType& bound = AbstractType::Handle(); |
4246 for (intptr_t i = 0; i < num_type_parameters; i++) { | 4247 for (intptr_t i = 0; i < num_type_parameters; i++) { |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4298 pieces.Add(kRBracket); | 4299 pieces.Add(kRBracket); |
4299 } | 4300 } |
4300 pieces.Add(kRParen); | 4301 pieces.Add(kRParen); |
4301 AbstractType& res_type = AbstractType::Handle(result_type()); | 4302 AbstractType& res_type = AbstractType::Handle(result_type()); |
4302 if (instantiate && !res_type.IsInstantiated()) { | 4303 if (instantiate && !res_type.IsInstantiated()) { |
4303 res_type = res_type.InstantiateFrom(instantiator); | 4304 res_type = res_type.InstantiateFrom(instantiator); |
4304 } | 4305 } |
4305 name = res_type.BuildName(name_visibility); | 4306 name = res_type.BuildName(name_visibility); |
4306 pieces.Add(name); | 4307 pieces.Add(name); |
4307 const Array& strings = Array::Handle(Array::MakeArray(pieces)); | 4308 const Array& strings = Array::Handle(Array::MakeArray(pieces)); |
4308 return String::NewSymbol(String::Handle(String::ConcatAll(strings))); | 4309 return Symbols::New(String::Handle(String::ConcatAll(strings))); |
4309 } | 4310 } |
4310 | 4311 |
4311 | 4312 |
4312 bool Function::HasInstantiatedSignature() const { | 4313 bool Function::HasInstantiatedSignature() const { |
4313 AbstractType& type = AbstractType::Handle(result_type()); | 4314 AbstractType& type = AbstractType::Handle(result_type()); |
4314 if (!type.IsInstantiated()) { | 4315 if (!type.IsInstantiated()) { |
4315 return false; | 4316 return false; |
4316 } | 4317 } |
4317 const intptr_t num_parameters = NumberOfParameters(); | 4318 const intptr_t num_parameters = NumberOfParameters(); |
4318 for (intptr_t i = 0; i < num_parameters; i++) { | 4319 for (intptr_t i = 0; i < num_parameters; i++) { |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4376 String& str = String::Handle(); | 4377 String& str = String::Handle(); |
4377 str = String::New(kGetterPrefix); | 4378 str = String::New(kGetterPrefix); |
4378 str = String::Concat(str, field_name); | 4379 str = String::Concat(str, field_name); |
4379 return str.raw(); | 4380 return str.raw(); |
4380 } | 4381 } |
4381 | 4382 |
4382 | 4383 |
4383 RawString* Field::GetterSymbol(const String& field_name) { | 4384 RawString* Field::GetterSymbol(const String& field_name) { |
4384 String& str = String::Handle(); | 4385 String& str = String::Handle(); |
4385 str = Field::GetterName(field_name); | 4386 str = Field::GetterName(field_name); |
4386 return String::NewSymbol(str); | 4387 return Symbols::New(str); |
4387 } | 4388 } |
4388 | 4389 |
4389 | 4390 |
4390 RawString* Field::SetterName(const String& field_name) { | 4391 RawString* Field::SetterName(const String& field_name) { |
4391 String& str = String::Handle(); | 4392 String& str = String::Handle(); |
4392 str = String::New(kSetterPrefix); | 4393 str = String::New(kSetterPrefix); |
4393 str = String::Concat(str, field_name); | 4394 str = String::Concat(str, field_name); |
4394 return str.raw(); | 4395 return str.raw(); |
4395 } | 4396 } |
4396 | 4397 |
4397 | 4398 |
4398 RawString* Field::SetterSymbol(const String& field_name) { | 4399 RawString* Field::SetterSymbol(const String& field_name) { |
4399 String& str = String::Handle(); | 4400 String& str = String::Handle(); |
4400 str = Field::SetterName(field_name); | 4401 str = Field::SetterName(field_name); |
4401 return String::NewSymbol(str); | 4402 return Symbols::New(str); |
4402 } | 4403 } |
4403 | 4404 |
4404 | 4405 |
4405 RawString* Field::NameFromGetter(const String& getter_name) { | 4406 RawString* Field::NameFromGetter(const String& getter_name) { |
4406 String& str = String::Handle(); | 4407 String& str = String::Handle(); |
4407 str = String::SubString(getter_name, strlen(kGetterPrefix)); | 4408 str = String::SubString(getter_name, strlen(kGetterPrefix)); |
4408 return str.raw(); | 4409 return str.raw(); |
4409 } | 4410 } |
4410 | 4411 |
4411 | 4412 |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4444 } | 4445 } |
4445 | 4446 |
4446 | 4447 |
4447 void Field::set_type(const AbstractType& value) const { | 4448 void Field::set_type(const AbstractType& value) const { |
4448 ASSERT(!value.IsNull()); | 4449 ASSERT(!value.IsNull()); |
4449 StorePointer(&raw_ptr()->type_, value.raw()); | 4450 StorePointer(&raw_ptr()->type_, value.raw()); |
4450 } | 4451 } |
4451 | 4452 |
4452 | 4453 |
4453 RawField* Field::New() { | 4454 RawField* Field::New() { |
4454 const Class& field_class = Class::Handle(Object::field_class()); | 4455 ASSERT(Object::field_class() != Class::null()); |
4455 RawObject* raw = Object::Allocate(field_class, | 4456 RawObject* raw = Object::Allocate(Field::kInstanceKind, |
4456 Field::InstanceSize(), | 4457 Field::InstanceSize(), |
4457 Heap::kOld); | 4458 Heap::kOld); |
4458 return reinterpret_cast<RawField*>(raw); | 4459 return reinterpret_cast<RawField*>(raw); |
4459 } | 4460 } |
4460 | 4461 |
4461 | 4462 |
4462 RawField* Field::New(const String& name, | 4463 RawField* Field::New(const String& name, |
4463 bool is_static, | 4464 bool is_static, |
4464 bool is_final, | 4465 bool is_final, |
4465 intptr_t token_pos) { | 4466 intptr_t token_pos) { |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4499 StorePointer(&raw_ptr()->literal_, literal.raw()); | 4500 StorePointer(&raw_ptr()->literal_, literal.raw()); |
4500 } | 4501 } |
4501 | 4502 |
4502 | 4503 |
4503 void LiteralToken::set_value(const Object& value) const { | 4504 void LiteralToken::set_value(const Object& value) const { |
4504 StorePointer(&raw_ptr()->value_, value.raw()); | 4505 StorePointer(&raw_ptr()->value_, value.raw()); |
4505 } | 4506 } |
4506 | 4507 |
4507 | 4508 |
4508 RawLiteralToken* LiteralToken::New() { | 4509 RawLiteralToken* LiteralToken::New() { |
4509 const Class& cls = Class::Handle(Object::literal_token_class()); | 4510 ASSERT(Object::literal_token_class() != Class::null()); |
4510 RawObject* raw = Object::Allocate(cls, | 4511 RawObject* raw = Object::Allocate(LiteralToken::kInstanceKind, |
4511 LiteralToken::InstanceSize(), | 4512 LiteralToken::InstanceSize(), |
4512 Heap::kOld); | 4513 Heap::kOld); |
4513 return reinterpret_cast<RawLiteralToken*>(raw); | 4514 return reinterpret_cast<RawLiteralToken*>(raw); |
4514 } | 4515 } |
4515 | 4516 |
4516 | 4517 |
4517 RawLiteralToken* LiteralToken::New(Token::Kind kind, const String& literal) { | 4518 RawLiteralToken* LiteralToken::New(Token::Kind kind, const String& literal) { |
4518 const LiteralToken& result = LiteralToken::Handle(LiteralToken::New()); | 4519 const LiteralToken& result = LiteralToken::Handle(LiteralToken::New()); |
4519 result.set_kind(kind); | 4520 result.set_kind(kind); |
4520 result.set_literal(literal); | 4521 result.set_literal(literal); |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4619 while (index < src_pos && kind != Token::kEOS) { | 4620 while (index < src_pos && kind != Token::kEOS) { |
4620 iterator.Advance(); | 4621 iterator.Advance(); |
4621 kind = iterator.CurrentTokenKind(); | 4622 kind = iterator.CurrentTokenKind(); |
4622 index += 1; | 4623 index += 1; |
4623 } | 4624 } |
4624 return iterator.CurrentPosition(); | 4625 return iterator.CurrentPosition(); |
4625 } | 4626 } |
4626 | 4627 |
4627 | 4628 |
4628 RawTokenStream* TokenStream::New(intptr_t len) { | 4629 RawTokenStream* TokenStream::New(intptr_t len) { |
4629 const Class& token_stream_class = Class::Handle(Object::token_stream_class()); | 4630 ASSERT(Object::token_stream_class() != Class::null()); |
4630 TokenStream& result = TokenStream::Handle(); | 4631 TokenStream& result = TokenStream::Handle(); |
4631 { | 4632 { |
4632 RawObject* raw = Object::Allocate(token_stream_class, | 4633 RawObject* raw = Object::Allocate(TokenStream::kInstanceKind, |
4633 TokenStream::InstanceSize(len), | 4634 TokenStream::InstanceSize(len), |
4634 Heap::kOld); | 4635 Heap::kOld); |
4635 NoGCScope no_gc; | 4636 NoGCScope no_gc; |
4636 result ^= raw; | 4637 result ^= raw; |
4637 result.SetLength(len); | 4638 result.SetLength(len); |
4638 } | 4639 } |
4639 return result.raw(); | 4640 return result.raw(); |
4640 } | 4641 } |
4641 | 4642 |
4642 | 4643 |
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4921 Isolate* isolate = Isolate::Current(); | 4922 Isolate* isolate = Isolate::Current(); |
4922 ObjectStore* object_store = isolate->object_store(); | 4923 ObjectStore* object_store = isolate->object_store(); |
4923 String& str = String::Handle(isolate, String::null()); | 4924 String& str = String::Handle(isolate, String::null()); |
4924 const Array& symbols = Array::Handle(isolate, | 4925 const Array& symbols = Array::Handle(isolate, |
4925 object_store->keyword_symbols()); | 4926 object_store->keyword_symbols()); |
4926 ASSERT(!symbols.IsNull()); | 4927 ASSERT(!symbols.IsNull()); |
4927 str ^= symbols.At(kind - Token::kFirstKeyword); | 4928 str ^= symbols.At(kind - Token::kFirstKeyword); |
4928 ASSERT(!str.IsNull()); | 4929 ASSERT(!str.IsNull()); |
4929 return str.raw(); | 4930 return str.raw(); |
4930 } | 4931 } |
4931 return String::NewSymbol(Token::Str(kind)); | 4932 return Symbols::New(Token::Str(kind)); |
4932 } else { | 4933 } else { |
4933 ASSERT(obj.IsLiteralToken()); // Must be a literal token. | 4934 ASSERT(obj.IsLiteralToken()); // Must be a literal token. |
4934 const LiteralToken& literal_token = LiteralToken::Cast(obj); | 4935 const LiteralToken& literal_token = LiteralToken::Cast(obj); |
4935 return literal_token.literal(); | 4936 return literal_token.literal(); |
4936 } | 4937 } |
4937 } | 4938 } |
4938 | 4939 |
4939 | 4940 |
4940 intptr_t TokenStream::Iterator::ReadToken() { | 4941 intptr_t TokenStream::Iterator::ReadToken() { |
4941 uint8_t b = ReadByte(); | 4942 uint8_t b = ReadByte(); |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5059 current_line++; | 5060 current_line++; |
5060 } else if (src.CharAt(ix) == '\r') { | 5061 } else if (src.CharAt(ix) == '\r') { |
5061 if ((ix + 1 != src.Length()) && (src.CharAt(ix + 1) != '\n')) { | 5062 if ((ix + 1 != src.Length()) && (src.CharAt(ix + 1) != '\n')) { |
5062 current_line++; | 5063 current_line++; |
5063 } | 5064 } |
5064 } else { | 5065 } else { |
5065 last_char = ix; | 5066 last_char = ix; |
5066 } | 5067 } |
5067 } | 5068 } |
5068 // Guarantee that returned string is never NULL. | 5069 // Guarantee that returned string is never NULL. |
5069 String& line = String::Handle(String::NewSymbol("")); | 5070 String& line = String::Handle(Symbols::New("")); |
5070 if (line_start >= 0) { | 5071 if (line_start >= 0) { |
5071 line = String::SubString(src, line_start, last_char - line_start + 1); | 5072 line = String::SubString(src, line_start, last_char - line_start + 1); |
5072 } | 5073 } |
5073 return line.raw(); | 5074 return line.raw(); |
5074 } | 5075 } |
5075 | 5076 |
5076 | 5077 |
5077 RawString* Script::GetSnippet(intptr_t from_line, | 5078 RawString* Script::GetSnippet(intptr_t from_line, |
5078 intptr_t from_column, | 5079 intptr_t from_column, |
5079 intptr_t to_line, | 5080 intptr_t to_line, |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5116 String& snippet = String::Handle(); | 5117 String& snippet = String::Handle(); |
5117 if ((snippet_start != -1) && (snippet_end != -1)) { | 5118 if ((snippet_start != -1) && (snippet_end != -1)) { |
5118 snippet = | 5119 snippet = |
5119 String::SubString(src, snippet_start, snippet_end - snippet_start); | 5120 String::SubString(src, snippet_start, snippet_end - snippet_start); |
5120 } | 5121 } |
5121 return snippet.raw(); | 5122 return snippet.raw(); |
5122 } | 5123 } |
5123 | 5124 |
5124 | 5125 |
5125 RawScript* Script::New() { | 5126 RawScript* Script::New() { |
5126 const Class& script_class = Class::Handle(Object::script_class()); | 5127 ASSERT(Object::script_class() != Class::null()); |
5127 RawObject* raw = Object::Allocate(script_class, | 5128 RawObject* raw = Object::Allocate(Script::kInstanceKind, |
5128 Script::InstanceSize(), | 5129 Script::InstanceSize(), |
5129 Heap::kOld); | 5130 Heap::kOld); |
5130 return reinterpret_cast<RawScript*>(raw); | 5131 return reinterpret_cast<RawScript*>(raw); |
5131 } | 5132 } |
5132 | 5133 |
5133 | 5134 |
5134 RawScript* Script::New(const String& url, | 5135 RawScript* Script::New(const String& url, |
5135 const String& source, | 5136 const String& source, |
5136 RawScript::Kind kind) { | 5137 RawScript::Kind kind) { |
5137 const Script& result = Script::Handle(Script::New()); | 5138 const Script& result = Script::Handle(Script::New()); |
5138 result.set_url(String::Handle(String::NewSymbol(url))); | 5139 result.set_url(String::Handle(Symbols::New(url))); |
5139 result.set_source(source); | 5140 result.set_source(source); |
5140 result.set_kind(kind); | 5141 result.set_kind(kind); |
5141 return result.raw(); | 5142 return result.raw(); |
5142 } | 5143 } |
5143 | 5144 |
5144 | 5145 |
5145 const char* Script::ToCString() const { | 5146 const char* Script::ToCString() const { |
5146 return "Script"; | 5147 return "Script"; |
5147 } | 5148 } |
5148 | 5149 |
(...skipping 775 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5924 | 5925 |
5925 void Library::InitImportedIntoList() const { | 5926 void Library::InitImportedIntoList() const { |
5926 const Array& imported_into = | 5927 const Array& imported_into = |
5927 Array::Handle(Array::New(kInitialImportedIntoCapacity, Heap::kOld)); | 5928 Array::Handle(Array::New(kInitialImportedIntoCapacity, Heap::kOld)); |
5928 StorePointer(&raw_ptr()->imported_into_, imported_into.raw()); | 5929 StorePointer(&raw_ptr()->imported_into_, imported_into.raw()); |
5929 raw_ptr()->num_imported_into_ = 0; | 5930 raw_ptr()->num_imported_into_ = 0; |
5930 } | 5931 } |
5931 | 5932 |
5932 | 5933 |
5933 RawLibrary* Library::New() { | 5934 RawLibrary* Library::New() { |
5934 const Class& library_class = Class::Handle(Object::library_class()); | 5935 ASSERT(Object::library_class() != Class::null()); |
5935 RawObject* raw = Object::Allocate(library_class, | 5936 RawObject* raw = Object::Allocate(Library::kInstanceKind, |
5936 Library::InstanceSize(), | 5937 Library::InstanceSize(), |
5937 Heap::kOld); | 5938 Heap::kOld); |
5938 return reinterpret_cast<RawLibrary*>(raw); | 5939 return reinterpret_cast<RawLibrary*>(raw); |
5939 } | 5940 } |
5940 | 5941 |
5941 | 5942 |
5942 RawLibrary* Library::NewLibraryHelper(const String& url, | 5943 RawLibrary* Library::NewLibraryHelper(const String& url, |
5943 bool import_core_lib) { | 5944 bool import_core_lib) { |
5944 const Library& result = Library::Handle(Library::New()); | 5945 const Library& result = Library::Handle(Library::New()); |
5945 result.StorePointer(&result.raw_ptr()->name_, url.raw()); | 5946 result.StorePointer(&result.raw_ptr()->name_, url.raw()); |
(...skipping 20 matching lines...) Expand all Loading... |
5966 return result.raw(); | 5967 return result.raw(); |
5967 } | 5968 } |
5968 | 5969 |
5969 | 5970 |
5970 RawLibrary* Library::New(const String& url) { | 5971 RawLibrary* Library::New(const String& url) { |
5971 return NewLibraryHelper(url, true); | 5972 return NewLibraryHelper(url, true); |
5972 } | 5973 } |
5973 | 5974 |
5974 | 5975 |
5975 void Library::InitCoreLibrary(Isolate* isolate) { | 5976 void Library::InitCoreLibrary(Isolate* isolate) { |
5976 const String& core_lib_url = String::Handle(String::NewSymbol("dart:core")); | 5977 const String& core_lib_url = String::Handle(Symbols::New("dart:core")); |
5977 const Library& core_lib = | 5978 const Library& core_lib = |
5978 Library::Handle(Library::NewLibraryHelper(core_lib_url, false)); | 5979 Library::Handle(Library::NewLibraryHelper(core_lib_url, false)); |
5979 core_lib.Register(); | 5980 core_lib.Register(); |
5980 isolate->object_store()->set_core_library(core_lib); | 5981 isolate->object_store()->set_core_library(core_lib); |
5981 const String& core_impl_lib_url = | 5982 const String& core_impl_lib_url = |
5982 String::Handle(String::NewSymbol("dart:coreimpl")); | 5983 String::Handle(Symbols::New("dart:coreimpl")); |
5983 const Library& core_impl_lib = | 5984 const Library& core_impl_lib = |
5984 Library::Handle(Library::NewLibraryHelper(core_impl_lib_url, false)); | 5985 Library::Handle(Library::NewLibraryHelper(core_impl_lib_url, false)); |
5985 isolate->object_store()->set_core_impl_library(core_impl_lib); | 5986 isolate->object_store()->set_core_impl_library(core_impl_lib); |
5986 core_impl_lib.Register(); | 5987 core_impl_lib.Register(); |
5987 core_lib.AddImport(core_impl_lib); | 5988 core_lib.AddImport(core_impl_lib); |
5988 core_impl_lib.AddImport(core_lib); | 5989 core_impl_lib.AddImport(core_lib); |
5989 isolate->object_store()->set_root_library(Library::Handle()); | 5990 isolate->object_store()->set_root_library(Library::Handle()); |
5990 } | 5991 } |
5991 | 5992 |
5992 | 5993 |
5993 void Library::InitMathLibrary(Isolate* isolate) { | 5994 void Library::InitMathLibrary(Isolate* isolate) { |
5994 const String& url = String::Handle(String::NewSymbol("dart:math")); | 5995 const String& url = String::Handle(Symbols::New("dart:math")); |
5995 const Library& lib = Library::Handle(Library::New(url)); | 5996 const Library& lib = Library::Handle(Library::New(url)); |
5996 lib.Register(); | 5997 lib.Register(); |
5997 const Library& core_impl_lib = Library::Handle(Library::CoreImplLibrary()); | 5998 const Library& core_impl_lib = Library::Handle(Library::CoreImplLibrary()); |
5998 lib.AddImport(core_impl_lib); | 5999 lib.AddImport(core_impl_lib); |
5999 isolate->object_store()->set_math_library(lib); | 6000 isolate->object_store()->set_math_library(lib); |
6000 } | 6001 } |
6001 | 6002 |
6002 | 6003 |
6003 void Library::InitIsolateLibrary(Isolate* isolate) { | 6004 void Library::InitIsolateLibrary(Isolate* isolate) { |
6004 const String& url = String::Handle(String::NewSymbol("dart:isolate")); | 6005 const String& url = String::Handle(Symbols::New("dart:isolate")); |
6005 const Library& lib = Library::Handle(Library::New(url)); | 6006 const Library& lib = Library::Handle(Library::New(url)); |
6006 lib.Register(); | 6007 lib.Register(); |
6007 isolate->object_store()->set_isolate_library(lib); | 6008 isolate->object_store()->set_isolate_library(lib); |
6008 } | 6009 } |
6009 | 6010 |
6010 | 6011 |
6011 void Library::InitMirrorsLibrary(Isolate* isolate) { | 6012 void Library::InitMirrorsLibrary(Isolate* isolate) { |
6012 const String& url = String::Handle(String::NewSymbol("dart:mirrors")); | 6013 const String& url = String::Handle(Symbols::New("dart:mirrors")); |
6013 const Library& lib = Library::Handle(Library::New(url)); | 6014 const Library& lib = Library::Handle(Library::New(url)); |
6014 lib.Register(); | 6015 lib.Register(); |
6015 const Library& isolate_lib = Library::Handle(Library::IsolateLibrary()); | 6016 const Library& isolate_lib = Library::Handle(Library::IsolateLibrary()); |
6016 lib.AddImport(isolate_lib); | 6017 lib.AddImport(isolate_lib); |
6017 const Library& wrappers_lib = | 6018 const Library& wrappers_lib = |
6018 Library::Handle(Library::NativeWrappersLibrary()); | 6019 Library::Handle(Library::NativeWrappersLibrary()); |
6019 lib.AddImport(wrappers_lib); | 6020 lib.AddImport(wrappers_lib); |
6020 isolate->object_store()->set_mirrors_library(lib); | 6021 isolate->object_store()->set_mirrors_library(lib); |
6021 } | 6022 } |
6022 | 6023 |
6023 | 6024 |
6024 void Library::InitNativeWrappersLibrary(Isolate* isolate) { | 6025 void Library::InitNativeWrappersLibrary(Isolate* isolate) { |
6025 static const int kNumNativeWrappersClasses = 4; | 6026 static const int kNumNativeWrappersClasses = 4; |
6026 ASSERT(kNumNativeWrappersClasses > 0 && kNumNativeWrappersClasses < 10); | 6027 ASSERT(kNumNativeWrappersClasses > 0 && kNumNativeWrappersClasses < 10); |
6027 const String& native_flds_lib_url = String::Handle( | 6028 const String& native_flds_lib_url = String::Handle( |
6028 String::NewSymbol("dart:nativewrappers")); | 6029 Symbols::New("dart:nativewrappers")); |
6029 Library& native_flds_lib = Library::Handle( | 6030 Library& native_flds_lib = Library::Handle( |
6030 Library::NewLibraryHelper(native_flds_lib_url, false)); | 6031 Library::NewLibraryHelper(native_flds_lib_url, false)); |
6031 native_flds_lib.Register(); | 6032 native_flds_lib.Register(); |
6032 isolate->object_store()->set_native_wrappers_library(native_flds_lib); | 6033 isolate->object_store()->set_native_wrappers_library(native_flds_lib); |
6033 static const char* const kNativeWrappersClass = "NativeFieldWrapperClass"; | 6034 static const char* const kNativeWrappersClass = "NativeFieldWrapperClass"; |
6034 static const int kNameLength = 25; | 6035 static const int kNameLength = 25; |
6035 ASSERT(kNameLength == (strlen(kNativeWrappersClass) + 1 + 1)); | 6036 ASSERT(kNameLength == (strlen(kNativeWrappersClass) + 1 + 1)); |
6036 char name_buffer[kNameLength]; | 6037 char name_buffer[kNameLength]; |
6037 String& cls_name = String::Handle(); | 6038 String& cls_name = String::Handle(); |
6038 for (int fld_cnt = 1; fld_cnt <= kNumNativeWrappersClasses; fld_cnt++) { | 6039 for (int fld_cnt = 1; fld_cnt <= kNumNativeWrappersClasses; fld_cnt++) { |
6039 OS::SNPrint(name_buffer, | 6040 OS::SNPrint(name_buffer, |
6040 kNameLength, | 6041 kNameLength, |
6041 "%s%d", | 6042 "%s%d", |
6042 kNativeWrappersClass, | 6043 kNativeWrappersClass, |
6043 fld_cnt); | 6044 fld_cnt); |
6044 cls_name = String::NewSymbol(name_buffer); | 6045 cls_name = Symbols::New(name_buffer); |
6045 Class::NewNativeWrapper(&native_flds_lib, cls_name, fld_cnt); | 6046 Class::NewNativeWrapper(&native_flds_lib, cls_name, fld_cnt); |
6046 } | 6047 } |
6047 } | 6048 } |
6048 | 6049 |
6049 | 6050 |
6050 RawLibrary* Library::LookupLibrary(const String &url) { | 6051 RawLibrary* Library::LookupLibrary(const String &url) { |
6051 Isolate* isolate = Isolate::Current(); | 6052 Isolate* isolate = Isolate::Current(); |
6052 Library& lib = Library::Handle(isolate, Library::null()); | 6053 Library& lib = Library::Handle(isolate, Library::null()); |
6053 String& lib_url = String::Handle(isolate, String::null()); | 6054 String& lib_url = String::Handle(isolate, String::null()); |
6054 GrowableObjectArray& libs = GrowableObjectArray::Handle( | 6055 GrowableObjectArray& libs = GrowableObjectArray::Handle( |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6101 return false; | 6102 return false; |
6102 } | 6103 } |
6103 | 6104 |
6104 | 6105 |
6105 RawString* Library::PrivateName(const String& name) const { | 6106 RawString* Library::PrivateName(const String& name) const { |
6106 ASSERT(ShouldBePrivate(name)); | 6107 ASSERT(ShouldBePrivate(name)); |
6107 // ASSERT(strchr(name, '@') == NULL); | 6108 // ASSERT(strchr(name, '@') == NULL); |
6108 String& str = String::Handle(); | 6109 String& str = String::Handle(); |
6109 str ^= name.raw(); | 6110 str ^= name.raw(); |
6110 str = String::Concat(str, String::Handle(this->private_key())); | 6111 str = String::Concat(str, String::Handle(this->private_key())); |
6111 str = String::NewSymbol(str); | 6112 str = Symbols::New(str); |
6112 return str.raw(); | 6113 return str.raw(); |
6113 } | 6114 } |
6114 | 6115 |
6115 | 6116 |
6116 RawLibrary* Library::GetLibrary(intptr_t index) { | 6117 RawLibrary* Library::GetLibrary(intptr_t index) { |
6117 Isolate* isolate = Isolate::Current(); | 6118 Isolate* isolate = Isolate::Current(); |
6118 const GrowableObjectArray& libs = | 6119 const GrowableObjectArray& libs = |
6119 GrowableObjectArray::Handle(isolate->object_store()->libraries()); | 6120 GrowableObjectArray::Handle(isolate->object_store()->libraries()); |
6120 ASSERT(!libs.IsNull()); | 6121 ASSERT(!libs.IsNull()); |
6121 if ((0 <= index) && (index < libs.Length())) { | 6122 if ((0 <= index) && (index < libs.Length())) { |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6239 resolved_class = lib.LookupLocalClass(class_name); | 6240 resolved_class = lib.LookupLocalClass(class_name); |
6240 if (!resolved_class.IsNull()) { | 6241 if (!resolved_class.IsNull()) { |
6241 return resolved_class.raw(); | 6242 return resolved_class.raw(); |
6242 } | 6243 } |
6243 } | 6244 } |
6244 return Class::null(); | 6245 return Class::null(); |
6245 } | 6246 } |
6246 | 6247 |
6247 | 6248 |
6248 RawLibraryPrefix* LibraryPrefix::New() { | 6249 RawLibraryPrefix* LibraryPrefix::New() { |
6249 const Class& library_prefix_class = | 6250 ASSERT(Object::library_prefix_class() != Class::null()); |
6250 Class::Handle(Object::library_prefix_class()); | 6251 RawObject* raw = Object::Allocate(LibraryPrefix::kInstanceKind, |
6251 RawObject* raw = Object::Allocate(library_prefix_class, | |
6252 LibraryPrefix::InstanceSize(), | 6252 LibraryPrefix::InstanceSize(), |
6253 Heap::kOld); | 6253 Heap::kOld); |
6254 return reinterpret_cast<RawLibraryPrefix*>(raw); | 6254 return reinterpret_cast<RawLibraryPrefix*>(raw); |
6255 } | 6255 } |
6256 | 6256 |
6257 | 6257 |
6258 RawLibraryPrefix* LibraryPrefix::New(const String& name, const Library& lib) { | 6258 RawLibraryPrefix* LibraryPrefix::New(const String& name, const Library& lib) { |
6259 const LibraryPrefix& result = LibraryPrefix::Handle(LibraryPrefix::New()); | 6259 const LibraryPrefix& result = LibraryPrefix::Handle(LibraryPrefix::New()); |
6260 result.set_name(name); | 6260 result.set_name(name); |
6261 result.set_num_libs(0); | 6261 result.set_num_libs(0); |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6366 if (!error.IsNull()) { | 6366 if (!error.IsNull()) { |
6367 return error.raw(); | 6367 return error.raw(); |
6368 } | 6368 } |
6369 } | 6369 } |
6370 } | 6370 } |
6371 return error.raw(); | 6371 return error.raw(); |
6372 } | 6372 } |
6373 | 6373 |
6374 | 6374 |
6375 RawInstructions* Instructions::New(intptr_t size) { | 6375 RawInstructions* Instructions::New(intptr_t size) { |
6376 const Class& instructions_class = Class::Handle(Object::instructions_class()); | 6376 ASSERT(Object::instructions_class() != Class::null()); |
6377 Instructions& result = Instructions::Handle(); | 6377 Instructions& result = Instructions::Handle(); |
6378 { | 6378 { |
6379 uword aligned_size = Instructions::InstanceSize(size); | 6379 uword aligned_size = Instructions::InstanceSize(size); |
6380 RawObject* raw = Object::Allocate(instructions_class, | 6380 RawObject* raw = Object::Allocate(Instructions::kInstanceKind, |
6381 aligned_size, | 6381 aligned_size, |
6382 Heap::kCode); | 6382 Heap::kCode); |
6383 NoGCScope no_gc; | 6383 NoGCScope no_gc; |
6384 // TODO(iposva): Remove premarking once old and code spaces are merged. | 6384 // TODO(iposva): Remove premarking once old and code spaces are merged. |
6385 raw->SetMarkBit(); | 6385 raw->SetMarkBit(); |
6386 result ^= raw; | 6386 result ^= raw; |
6387 result.set_size(size); | 6387 result.set_size(size); |
6388 } | 6388 } |
6389 return result.raw(); | 6389 return result.raw(); |
6390 } | 6390 } |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6451 return *(EntryAddr(index, kTryIndexEntry)); | 6451 return *(EntryAddr(index, kTryIndexEntry)); |
6452 } | 6452 } |
6453 | 6453 |
6454 | 6454 |
6455 void PcDescriptors::SetTryIndex(intptr_t index, intptr_t value) const { | 6455 void PcDescriptors::SetTryIndex(intptr_t index, intptr_t value) const { |
6456 *(EntryAddr(index, kTryIndexEntry)) = value; | 6456 *(EntryAddr(index, kTryIndexEntry)) = value; |
6457 } | 6457 } |
6458 | 6458 |
6459 | 6459 |
6460 RawPcDescriptors* PcDescriptors::New(intptr_t num_descriptors) { | 6460 RawPcDescriptors* PcDescriptors::New(intptr_t num_descriptors) { |
6461 const Class& cls = Class::Handle(Object::pc_descriptors_class()); | 6461 ASSERT(Object::pc_descriptors_class() != Class::null()); |
6462 PcDescriptors& result = PcDescriptors::Handle(); | 6462 PcDescriptors& result = PcDescriptors::Handle(); |
6463 { | 6463 { |
6464 uword size = PcDescriptors::InstanceSize(num_descriptors); | 6464 uword size = PcDescriptors::InstanceSize(num_descriptors); |
6465 RawObject* raw = Object::Allocate(cls, size, Heap::kOld); | 6465 RawObject* raw = Object::Allocate(PcDescriptors::kInstanceKind, |
| 6466 size, |
| 6467 Heap::kOld); |
6466 NoGCScope no_gc; | 6468 NoGCScope no_gc; |
6467 result ^= raw; | 6469 result ^= raw; |
6468 result.SetLength(num_descriptors); | 6470 result.SetLength(num_descriptors); |
6469 } | 6471 } |
6470 return result.raw(); | 6472 return result.raw(); |
6471 } | 6473 } |
6472 | 6474 |
6473 | 6475 |
6474 const char* PcDescriptors::KindAsStr(intptr_t index) const { | 6476 const char* PcDescriptors::KindAsStr(intptr_t index) const { |
6475 switch (DescriptorKind(index)) { | 6477 switch (DescriptorKind(index)) { |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6572 uint8_t* byte_addr = &(raw_ptr()->data_[byte_offset]); | 6574 uint8_t* byte_addr = &(raw_ptr()->data_[byte_offset]); |
6573 if (value) { | 6575 if (value) { |
6574 *byte_addr |= byte_mask; | 6576 *byte_addr |= byte_mask; |
6575 } else { | 6577 } else { |
6576 *byte_addr &= ~byte_mask; | 6578 *byte_addr &= ~byte_mask; |
6577 } | 6579 } |
6578 } | 6580 } |
6579 | 6581 |
6580 | 6582 |
6581 RawStackmap* Stackmap::New(uword pc_offset, BitmapBuilder* bmap) { | 6583 RawStackmap* Stackmap::New(uword pc_offset, BitmapBuilder* bmap) { |
6582 const Class& cls = Class::Handle(Object::stackmap_class()); | 6584 ASSERT(Object::stackmap_class() != Class::null()); |
6583 ASSERT(!cls.IsNull()); | |
6584 ASSERT(bmap != NULL); | 6585 ASSERT(bmap != NULL); |
6585 Stackmap& result = Stackmap::Handle(); | 6586 Stackmap& result = Stackmap::Handle(); |
6586 intptr_t size = bmap->SizeInBytes(); | 6587 intptr_t size = bmap->SizeInBytes(); |
6587 { | 6588 { |
6588 // Stackmap data objects are associated with a code object, allocate them | 6589 // Stackmap data objects are associated with a code object, allocate them |
6589 // in old generation. | 6590 // in old generation. |
6590 RawObject* raw = | 6591 RawObject* raw = Object::Allocate(Stackmap::kInstanceKind, |
6591 Object::Allocate(cls, Stackmap::InstanceSize(size), Heap::kOld); | 6592 Stackmap::InstanceSize(size), |
| 6593 Heap::kOld); |
6592 NoGCScope no_gc; | 6594 NoGCScope no_gc; |
6593 result ^= raw; | 6595 result ^= raw; |
6594 result.set_bitmap_size_in_bytes(size); | 6596 result.set_bitmap_size_in_bytes(size); |
6595 } | 6597 } |
6596 result.SetPC(pc_offset); | 6598 result.SetPC(pc_offset); |
6597 intptr_t bound = bmap->SizeInBits(); | 6599 intptr_t bound = bmap->SizeInBits(); |
6598 for (intptr_t i = 0; i < bound; i++) { | 6600 for (intptr_t i = 0; i < bound; i++) { |
6599 result.SetBit(i, bmap->Get(i)); | 6601 result.SetBit(i, bmap->Get(i)); |
6600 } | 6602 } |
6601 result.SetMinBitOffset(bmap->Minimum()); | 6603 result.SetMinBitOffset(bmap->Minimum()); |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6661 } | 6663 } |
6662 | 6664 |
6663 | 6665 |
6664 const char* LocalVarDescriptors::ToCString() const { | 6666 const char* LocalVarDescriptors::ToCString() const { |
6665 UNIMPLEMENTED(); | 6667 UNIMPLEMENTED(); |
6666 return "LocalVarDescriptors"; | 6668 return "LocalVarDescriptors"; |
6667 } | 6669 } |
6668 | 6670 |
6669 | 6671 |
6670 RawLocalVarDescriptors* LocalVarDescriptors::New(intptr_t num_variables) { | 6672 RawLocalVarDescriptors* LocalVarDescriptors::New(intptr_t num_variables) { |
6671 const Class& cls = Class::Handle(Object::var_descriptors_class()); | 6673 ASSERT(Object::var_descriptors_class() != Class::null()); |
6672 LocalVarDescriptors& result = LocalVarDescriptors::Handle(); | 6674 LocalVarDescriptors& result = LocalVarDescriptors::Handle(); |
6673 { | 6675 { |
6674 uword size = LocalVarDescriptors::InstanceSize(num_variables); | 6676 uword size = LocalVarDescriptors::InstanceSize(num_variables); |
6675 RawObject* raw = Object::Allocate(cls, size, Heap::kOld); | 6677 RawObject* raw = Object::Allocate(LocalVarDescriptors::kInstanceKind, |
| 6678 size, |
| 6679 Heap::kOld); |
6676 NoGCScope no_gc; | 6680 NoGCScope no_gc; |
6677 result ^= raw; | 6681 result ^= raw; |
6678 result.raw_ptr()->length_ = num_variables; | 6682 result.raw_ptr()->length_ = num_variables; |
6679 } | 6683 } |
6680 const Array& names = Array::Handle(Array::New(num_variables, Heap::kOld)); | 6684 const Array& names = Array::Handle(Array::New(num_variables, Heap::kOld)); |
6681 result.raw_ptr()->names_ = names.raw(); | 6685 result.raw_ptr()->names_ = names.raw(); |
6682 return result.raw(); | 6686 return result.raw(); |
6683 } | 6687 } |
6684 | 6688 |
6685 | 6689 |
(...skipping 29 matching lines...) Expand all Loading... |
6715 } | 6719 } |
6716 | 6720 |
6717 | 6721 |
6718 void ExceptionHandlers::SetHandlerPC(intptr_t index, | 6722 void ExceptionHandlers::SetHandlerPC(intptr_t index, |
6719 intptr_t value) const { | 6723 intptr_t value) const { |
6720 *(EntryAddr(index, kHandlerPcEntry)) = value; | 6724 *(EntryAddr(index, kHandlerPcEntry)) = value; |
6721 } | 6725 } |
6722 | 6726 |
6723 | 6727 |
6724 RawExceptionHandlers* ExceptionHandlers::New(intptr_t num_handlers) { | 6728 RawExceptionHandlers* ExceptionHandlers::New(intptr_t num_handlers) { |
6725 const Class& cls = Class::Handle(Object::exception_handlers_class()); | 6729 ASSERT(Object::exception_handlers_class() != Class::null()); |
6726 ExceptionHandlers& result = ExceptionHandlers::Handle(); | 6730 ExceptionHandlers& result = ExceptionHandlers::Handle(); |
6727 { | 6731 { |
6728 uword size = ExceptionHandlers::InstanceSize(num_handlers); | 6732 uword size = ExceptionHandlers::InstanceSize(num_handlers); |
6729 RawObject* raw = Object::Allocate(cls, size, Heap::kOld); | 6733 RawObject* raw = Object::Allocate(ExceptionHandlers::kInstanceKind, |
| 6734 size, |
| 6735 Heap::kOld); |
6730 NoGCScope no_gc; | 6736 NoGCScope no_gc; |
6731 result ^= raw; | 6737 result ^= raw; |
6732 result.SetLength(num_handlers); | 6738 result.SetLength(num_handlers); |
6733 } | 6739 } |
6734 return result.raw(); | 6740 return result.raw(); |
6735 } | 6741 } |
6736 | 6742 |
6737 | 6743 |
6738 const char* ExceptionHandlers::ToCString() const { | 6744 const char* ExceptionHandlers::ToCString() const { |
6739 if (Length() == 0) { | 6745 if (Length() == 0) { |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6818 return *comments; | 6824 return *comments; |
6819 } | 6825 } |
6820 | 6826 |
6821 | 6827 |
6822 void Code::set_comments(const Code::Comments& comments) const { | 6828 void Code::set_comments(const Code::Comments& comments) const { |
6823 StorePointer(&raw_ptr()->comments_, comments.comments_.raw()); | 6829 StorePointer(&raw_ptr()->comments_, comments.comments_.raw()); |
6824 } | 6830 } |
6825 | 6831 |
6826 | 6832 |
6827 RawCode* Code::New(int pointer_offsets_length) { | 6833 RawCode* Code::New(int pointer_offsets_length) { |
6828 const Class& cls = Class::Handle(Object::code_class()); | 6834 ASSERT(Object::code_class() != Class::null()); |
6829 Code& result = Code::Handle(); | 6835 Code& result = Code::Handle(); |
6830 { | 6836 { |
6831 uword size = Code::InstanceSize(pointer_offsets_length); | 6837 uword size = Code::InstanceSize(pointer_offsets_length); |
6832 RawObject* raw = Object::Allocate(cls, size, Heap::kOld); | 6838 RawObject* raw = Object::Allocate(Code::kInstanceKind, size, Heap::kOld); |
6833 NoGCScope no_gc; | 6839 NoGCScope no_gc; |
6834 result ^= raw; | 6840 result ^= raw; |
6835 result.set_pointer_offsets_length(pointer_offsets_length); | 6841 result.set_pointer_offsets_length(pointer_offsets_length); |
6836 result.set_is_optimized(false); | 6842 result.set_is_optimized(false); |
6837 result.set_comments(Comments::New(0)); | 6843 result.set_comments(Comments::New(0)); |
6838 } | 6844 } |
6839 return result.raw(); | 6845 return result.raw(); |
6840 } | 6846 } |
6841 | 6847 |
6842 | 6848 |
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7046 break; | 7052 break; |
7047 } | 7053 } |
7048 previous_map = map->raw(); | 7054 previous_map = map->raw(); |
7049 } | 7055 } |
7050 return map->raw(); | 7056 return map->raw(); |
7051 } | 7057 } |
7052 | 7058 |
7053 | 7059 |
7054 RawContext* Context::New(intptr_t num_variables, Heap::Space space) { | 7060 RawContext* Context::New(intptr_t num_variables, Heap::Space space) { |
7055 ASSERT(num_variables >= 0); | 7061 ASSERT(num_variables >= 0); |
| 7062 ASSERT(Object::context_class() != Class::null()); |
7056 | 7063 |
7057 const Class& context_class = Class::Handle(Object::context_class()); | |
7058 Context& result = Context::Handle(); | 7064 Context& result = Context::Handle(); |
7059 { | 7065 { |
7060 RawObject* raw = Object::Allocate(context_class, | 7066 RawObject* raw = Object::Allocate(Context::kInstanceKind, |
7061 Context::InstanceSize(num_variables), | 7067 Context::InstanceSize(num_variables), |
7062 space); | 7068 space); |
7063 NoGCScope no_gc; | 7069 NoGCScope no_gc; |
7064 result ^= raw; | 7070 result ^= raw; |
7065 result.set_num_variables(num_variables); | 7071 result.set_num_variables(num_variables); |
7066 } | 7072 } |
7067 result.set_isolate(Isolate::Current()); | 7073 result.set_isolate(Isolate::Current()); |
7068 return result.raw(); | 7074 return result.raw(); |
7069 } | 7075 } |
7070 | 7076 |
7071 | 7077 |
7072 const char* Context::ToCString() const { | 7078 const char* Context::ToCString() const { |
7073 return "Context"; | 7079 return "Context"; |
7074 } | 7080 } |
7075 | 7081 |
7076 | 7082 |
7077 RawContextScope* ContextScope::New(intptr_t num_variables) { | 7083 RawContextScope* ContextScope::New(intptr_t num_variables) { |
7078 const Class& context_scope_class = | 7084 ASSERT(Object::context_scope_class() != Class::null()); |
7079 Class::Handle(Object::context_scope_class()); | |
7080 intptr_t size = ContextScope::InstanceSize(num_variables); | 7085 intptr_t size = ContextScope::InstanceSize(num_variables); |
7081 ContextScope& result = ContextScope::Handle(); | 7086 ContextScope& result = ContextScope::Handle(); |
7082 { | 7087 { |
7083 RawObject* raw = Object::Allocate(context_scope_class, size, Heap::kOld); | 7088 RawObject* raw = Object::Allocate(ContextScope::kInstanceKind, |
| 7089 size, |
| 7090 Heap::kOld); |
7084 NoGCScope no_gc; | 7091 NoGCScope no_gc; |
7085 result ^= raw; | 7092 result ^= raw; |
7086 result.set_num_variables(num_variables); | 7093 result.set_num_variables(num_variables); |
7087 } | 7094 } |
7088 return result.raw(); | 7095 return result.raw(); |
7089 } | 7096 } |
7090 | 7097 |
7091 | 7098 |
7092 intptr_t ContextScope::TokenIndexAt(intptr_t scope_index) const { | 7099 intptr_t ContextScope::TokenIndexAt(intptr_t scope_index) const { |
7093 return Smi::Value(VariableDescAddr(scope_index)->token_pos); | 7100 return Smi::Value(VariableDescAddr(scope_index)->token_pos); |
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7344 } | 7351 } |
7345 } | 7352 } |
7346 return result.raw(); | 7353 return result.raw(); |
7347 } | 7354 } |
7348 | 7355 |
7349 | 7356 |
7350 RawICData* ICData::New(const Function& function, | 7357 RawICData* ICData::New(const Function& function, |
7351 const String& target_name, | 7358 const String& target_name, |
7352 intptr_t id, | 7359 intptr_t id, |
7353 intptr_t num_args_tested) { | 7360 intptr_t num_args_tested) { |
| 7361 ASSERT(Object::icdata_class() != Class::null()); |
7354 ASSERT(num_args_tested > 0); | 7362 ASSERT(num_args_tested > 0); |
7355 const Class& cls = Class::Handle(Object::icdata_class()); | |
7356 ASSERT(!cls.IsNull()); | |
7357 ICData& result = ICData::Handle(); | 7363 ICData& result = ICData::Handle(); |
7358 { | 7364 { |
7359 // IC data objects are long living objects, allocate them in old generation. | 7365 // IC data objects are long living objects, allocate them in old generation. |
7360 RawObject* raw = Object::Allocate(cls, ICData::InstanceSize(), Heap::kOld); | 7366 RawObject* raw = Object::Allocate(ICData::kInstanceKind, |
| 7367 ICData::InstanceSize(), |
| 7368 Heap::kOld); |
7361 NoGCScope no_gc; | 7369 NoGCScope no_gc; |
7362 result ^= raw; | 7370 result ^= raw; |
7363 } | 7371 } |
7364 result.set_function(function); | 7372 result.set_function(function); |
7365 result.set_target_name(target_name); | 7373 result.set_target_name(target_name); |
7366 result.set_id(id); | 7374 result.set_id(id); |
7367 result.set_num_args_tested(num_args_tested); | 7375 result.set_num_args_tested(num_args_tested); |
7368 // Number of array elements in one test entry (num_args_tested + 1) | 7376 // Number of array elements in one test entry (num_args_tested + 1) |
7369 intptr_t len = result.TestEntryLength(); | 7377 intptr_t len = result.TestEntryLength(); |
7370 // IC data array must be null terminated (sentinel entry). | 7378 // IC data array must be null terminated (sentinel entry). |
7371 const Array& ic_data = Array::Handle(Array::New(len, Heap::kOld)); | 7379 const Array& ic_data = Array::Handle(Array::New(len, Heap::kOld)); |
7372 result.set_ic_data(ic_data); | 7380 result.set_ic_data(ic_data); |
7373 return result.raw(); | 7381 return result.raw(); |
7374 } | 7382 } |
7375 | 7383 |
7376 | 7384 |
7377 RawSubtypeTestCache* SubtypeTestCache::New() { | 7385 RawSubtypeTestCache* SubtypeTestCache::New() { |
7378 const Class& cls = Class::Handle(Object::subtypetestcache_class()); | 7386 ASSERT(Object::subtypetestcache_class() != Class::null()); |
7379 ASSERT(!cls.IsNull()); | |
7380 SubtypeTestCache& result = SubtypeTestCache::Handle(); | 7387 SubtypeTestCache& result = SubtypeTestCache::Handle(); |
7381 { | 7388 { |
7382 // SubtypeTestCache objects are long living objects, allocate them in the | 7389 // SubtypeTestCache objects are long living objects, allocate them in the |
7383 // old generation. | 7390 // old generation. |
7384 RawObject* raw = | 7391 RawObject* raw = Object::Allocate(SubtypeTestCache::kInstanceKind, |
7385 Object::Allocate(cls, SubtypeTestCache::InstanceSize(), Heap::kOld); | 7392 SubtypeTestCache::InstanceSize(), |
| 7393 Heap::kOld); |
7386 NoGCScope no_gc; | 7394 NoGCScope no_gc; |
7387 result ^= raw; | 7395 result ^= raw; |
7388 } | 7396 } |
7389 const Array& cache = Array::Handle(Array::New(kTestEntryLength)); | 7397 const Array& cache = Array::Handle(Array::New(kTestEntryLength)); |
7390 result.set_cache(cache); | 7398 result.set_cache(cache); |
7391 return result.raw(); | 7399 return result.raw(); |
7392 } | 7400 } |
7393 | 7401 |
7394 | 7402 |
7395 void SubtypeTestCache::set_cache(const Array& value) const { | 7403 void SubtypeTestCache::set_cache(const Array& value) const { |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7453 | 7461 |
7454 | 7462 |
7455 const char* Error::ToCString() const { | 7463 const char* Error::ToCString() const { |
7456 // Error is an abstract class. We should never reach here. | 7464 // Error is an abstract class. We should never reach here. |
7457 UNREACHABLE(); | 7465 UNREACHABLE(); |
7458 return "Error"; | 7466 return "Error"; |
7459 } | 7467 } |
7460 | 7468 |
7461 | 7469 |
7462 RawApiError* ApiError::New(const String& message, Heap::Space space) { | 7470 RawApiError* ApiError::New(const String& message, Heap::Space space) { |
7463 const Class& cls = Class::Handle(Object::api_error_class()); | 7471 ASSERT(Object::api_error_class() != Class::null()); |
7464 ApiError& result = ApiError::Handle(); | 7472 ApiError& result = ApiError::Handle(); |
7465 { | 7473 { |
7466 RawObject* raw = Object::Allocate(cls, | 7474 RawObject* raw = Object::Allocate(ApiError::kInstanceKind, |
7467 ApiError::InstanceSize(), | 7475 ApiError::InstanceSize(), |
7468 space); | 7476 space); |
7469 NoGCScope no_gc; | 7477 NoGCScope no_gc; |
7470 result ^= raw; | 7478 result ^= raw; |
7471 } | 7479 } |
7472 result.set_message(message); | 7480 result.set_message(message); |
7473 return result.raw(); | 7481 return result.raw(); |
7474 } | 7482 } |
7475 | 7483 |
7476 | 7484 |
7477 void ApiError::set_message(const String& message) const { | 7485 void ApiError::set_message(const String& message) const { |
7478 StorePointer(&raw_ptr()->message_, message.raw()); | 7486 StorePointer(&raw_ptr()->message_, message.raw()); |
7479 } | 7487 } |
7480 | 7488 |
7481 | 7489 |
7482 const char* ApiError::ToErrorCString() const { | 7490 const char* ApiError::ToErrorCString() const { |
7483 const String& msg_str = String::Handle(message()); | 7491 const String& msg_str = String::Handle(message()); |
7484 return msg_str.ToCString(); | 7492 return msg_str.ToCString(); |
7485 } | 7493 } |
7486 | 7494 |
7487 | 7495 |
7488 const char* ApiError::ToCString() const { | 7496 const char* ApiError::ToCString() const { |
7489 return "ApiError"; | 7497 return "ApiError"; |
7490 } | 7498 } |
7491 | 7499 |
7492 | 7500 |
7493 RawLanguageError* LanguageError::New(const String& message, Heap::Space space) { | 7501 RawLanguageError* LanguageError::New(const String& message, Heap::Space space) { |
7494 const Class& cls = Class::Handle(Object::language_error_class()); | 7502 ASSERT(Object::language_error_class() != Class::null()); |
7495 LanguageError& result = LanguageError::Handle(); | 7503 LanguageError& result = LanguageError::Handle(); |
7496 { | 7504 { |
7497 RawObject* raw = Object::Allocate(cls, | 7505 RawObject* raw = Object::Allocate(LanguageError::kInstanceKind, |
7498 LanguageError::InstanceSize(), | 7506 LanguageError::InstanceSize(), |
7499 space); | 7507 space); |
7500 NoGCScope no_gc; | 7508 NoGCScope no_gc; |
7501 result ^= raw; | 7509 result ^= raw; |
7502 } | 7510 } |
7503 result.set_message(message); | 7511 result.set_message(message); |
7504 return result.raw(); | 7512 return result.raw(); |
7505 } | 7513 } |
7506 | 7514 |
7507 | 7515 |
7508 void LanguageError::set_message(const String& message) const { | 7516 void LanguageError::set_message(const String& message) const { |
7509 StorePointer(&raw_ptr()->message_, message.raw()); | 7517 StorePointer(&raw_ptr()->message_, message.raw()); |
7510 } | 7518 } |
7511 | 7519 |
7512 | 7520 |
7513 const char* LanguageError::ToErrorCString() const { | 7521 const char* LanguageError::ToErrorCString() const { |
7514 const String& msg_str = String::Handle(message()); | 7522 const String& msg_str = String::Handle(message()); |
7515 return msg_str.ToCString(); | 7523 return msg_str.ToCString(); |
7516 } | 7524 } |
7517 | 7525 |
7518 | 7526 |
7519 const char* LanguageError::ToCString() const { | 7527 const char* LanguageError::ToCString() const { |
7520 return "LanguageError"; | 7528 return "LanguageError"; |
7521 } | 7529 } |
7522 | 7530 |
7523 | 7531 |
7524 RawUnhandledException* UnhandledException::New(const Instance& exception, | 7532 RawUnhandledException* UnhandledException::New(const Instance& exception, |
7525 const Instance& stacktrace, | 7533 const Instance& stacktrace, |
7526 Heap::Space space) { | 7534 Heap::Space space) { |
7527 const Class& cls = Class::Handle(Object::unhandled_exception_class()); | 7535 ASSERT(Object::unhandled_exception_class() != Class::null()); |
7528 UnhandledException& result = UnhandledException::Handle(); | 7536 UnhandledException& result = UnhandledException::Handle(); |
7529 { | 7537 { |
7530 RawObject* raw = Object::Allocate(cls, | 7538 RawObject* raw = Object::Allocate(UnhandledException::kInstanceKind, |
7531 UnhandledException::InstanceSize(), | 7539 UnhandledException::InstanceSize(), |
7532 space); | 7540 space); |
7533 NoGCScope no_gc; | 7541 NoGCScope no_gc; |
7534 result ^= raw; | 7542 result ^= raw; |
7535 } | 7543 } |
7536 result.set_exception(exception); | 7544 result.set_exception(exception); |
7537 result.set_stacktrace(stacktrace); | 7545 result.set_stacktrace(stacktrace); |
7538 return result.raw(); | 7546 return result.raw(); |
7539 } | 7547 } |
7540 | 7548 |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7578 return chars; | 7586 return chars; |
7579 } | 7587 } |
7580 | 7588 |
7581 | 7589 |
7582 const char* UnhandledException::ToCString() const { | 7590 const char* UnhandledException::ToCString() const { |
7583 return "UnhandledException"; | 7591 return "UnhandledException"; |
7584 } | 7592 } |
7585 | 7593 |
7586 | 7594 |
7587 RawUnwindError* UnwindError::New(const String& message, Heap::Space space) { | 7595 RawUnwindError* UnwindError::New(const String& message, Heap::Space space) { |
7588 const Class& cls = Class::Handle(Object::unwind_error_class()); | 7596 ASSERT(Object::unwind_error_class() != Class::null()); |
7589 UnwindError& result = UnwindError::Handle(); | 7597 UnwindError& result = UnwindError::Handle(); |
7590 { | 7598 { |
7591 RawObject* raw = Object::Allocate(cls, | 7599 RawObject* raw = Object::Allocate(UnwindError::kInstanceKind, |
7592 UnwindError::InstanceSize(), | 7600 UnwindError::InstanceSize(), |
7593 space); | 7601 space); |
7594 NoGCScope no_gc; | 7602 NoGCScope no_gc; |
7595 result ^= raw; | 7603 result ^= raw; |
7596 } | 7604 } |
7597 result.set_message(message); | 7605 result.set_message(message); |
7598 return result.raw(); | 7606 return result.raw(); |
7599 } | 7607 } |
7600 | 7608 |
7601 | 7609 |
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7805 const Class& cls = Class::Handle(clazz()); | 7813 const Class& cls = Class::Handle(clazz()); |
7806 return (index >= 0 && index < cls.num_native_fields()); | 7814 return (index >= 0 && index < cls.num_native_fields()); |
7807 } | 7815 } |
7808 | 7816 |
7809 | 7817 |
7810 RawInstance* Instance::New(const Class& cls, Heap::Space space) { | 7818 RawInstance* Instance::New(const Class& cls, Heap::Space space) { |
7811 Instance& result = Instance::Handle(); | 7819 Instance& result = Instance::Handle(); |
7812 { | 7820 { |
7813 intptr_t instance_size = cls.instance_size(); | 7821 intptr_t instance_size = cls.instance_size(); |
7814 ASSERT(instance_size > 0); | 7822 ASSERT(instance_size > 0); |
7815 RawObject* raw = Object::Allocate(cls, instance_size, space); | 7823 RawObject* raw = Object::Allocate(cls.id(), instance_size, space); |
7816 NoGCScope no_gc; | 7824 NoGCScope no_gc; |
7817 result ^= raw; | 7825 result ^= raw; |
7818 uword addr = reinterpret_cast<uword>(result.raw_ptr()); | 7826 uword addr = reinterpret_cast<uword>(result.raw_ptr()); |
7819 // Initialize fields. | 7827 // Initialize fields. |
7820 intptr_t offset = sizeof(RawObject); | 7828 intptr_t offset = sizeof(RawObject); |
7821 // Initialize all native fields to NULL. | 7829 // Initialize all native fields to NULL. |
7822 for (intptr_t i = 0; i < cls.num_native_fields(); i++) { | 7830 for (intptr_t i = 0; i < cls.num_native_fields(); i++) { |
7823 *reinterpret_cast<uword*>(addr + offset) = 0; | 7831 *reinterpret_cast<uword*>(addr + offset) = 0; |
7824 offset += kWordSize; | 7832 offset += kWordSize; |
7825 } | 7833 } |
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7995 | 8003 |
7996 | 8004 |
7997 void Mint::set_value(int64_t value) const { | 8005 void Mint::set_value(int64_t value) const { |
7998 raw_ptr()->value_ = value; | 8006 raw_ptr()->value_ = value; |
7999 } | 8007 } |
8000 | 8008 |
8001 | 8009 |
8002 RawMint* Mint::New(int64_t val, Heap::Space space) { | 8010 RawMint* Mint::New(int64_t val, Heap::Space space) { |
8003 // Do not allocate a Mint if Smi would do. | 8011 // Do not allocate a Mint if Smi would do. |
8004 ASSERT(!Smi::IsValid64(val)); | 8012 ASSERT(!Smi::IsValid64(val)); |
8005 Isolate* isolate = Isolate::Current(); | 8013 ASSERT(Isolate::Current()->object_store()->mint_class() != Class::null()); |
8006 const Class& cls = | |
8007 Class::Handle(isolate->object_store()->mint_class()); | |
8008 Mint& result = Mint::Handle(); | 8014 Mint& result = Mint::Handle(); |
8009 { | 8015 { |
8010 RawObject* raw = Object::Allocate(cls, Mint::InstanceSize(), space); | 8016 RawObject* raw = Object::Allocate(Mint::kInstanceKind, |
| 8017 Mint::InstanceSize(), |
| 8018 space); |
8011 NoGCScope no_gc; | 8019 NoGCScope no_gc; |
8012 result ^= raw; | 8020 result ^= raw; |
8013 } | 8021 } |
8014 result.set_value(val); | 8022 result.set_value(val); |
8015 return result.raw(); | 8023 return result.raw(); |
8016 } | 8024 } |
8017 | 8025 |
8018 | 8026 |
8019 RawMint* Mint::NewCanonical(int64_t value) { | 8027 RawMint* Mint::NewCanonical(int64_t value) { |
8020 // Do not allocate a Mint if Smi would do. | 8028 // Do not allocate a Mint if Smi would do. |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8123 return true; // "===". | 8131 return true; // "===". |
8124 } | 8132 } |
8125 if (other.IsNull() || !other.IsDouble()) { | 8133 if (other.IsNull() || !other.IsDouble()) { |
8126 return false; | 8134 return false; |
8127 } | 8135 } |
8128 return EqualsToDouble(Double::Cast(other).value()); | 8136 return EqualsToDouble(Double::Cast(other).value()); |
8129 } | 8137 } |
8130 | 8138 |
8131 | 8139 |
8132 RawDouble* Double::New(double d, Heap::Space space) { | 8140 RawDouble* Double::New(double d, Heap::Space space) { |
8133 Isolate* isolate = Isolate::Current(); | 8141 ASSERT(Isolate::Current()->object_store()->double_class() != Class::null()); |
8134 const Class& cls = | |
8135 Class::Handle(isolate->object_store()->double_class()); | |
8136 Double& result = Double::Handle(); | 8142 Double& result = Double::Handle(); |
8137 { | 8143 { |
8138 RawObject* raw = Object::Allocate(cls, Double::InstanceSize(), space); | 8144 RawObject* raw = Object::Allocate(Double::kInstanceKind, |
| 8145 Double::InstanceSize(), |
| 8146 space); |
8139 NoGCScope no_gc; | 8147 NoGCScope no_gc; |
8140 result ^= raw; | 8148 result ^= raw; |
8141 } | 8149 } |
8142 result.set_value(d); | 8150 result.set_value(d); |
8143 return result.raw(); | 8151 return result.raw(); |
8144 } | 8152 } |
8145 | 8153 |
8146 | 8154 |
8147 static bool IsWhiteSpace(char ch) { | 8155 static bool IsWhiteSpace(char ch) { |
8148 return ch == '\0' || ch == '\n' || ch == '\r' || ch == ' ' || ch == '\t'; | 8156 return ch == '\0' || ch == '\n' || ch == '\r' || ch == ' ' || ch == '\t'; |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8284 } | 8292 } |
8285 if (this->IsNegative() == other.IsNegative()) { | 8293 if (this->IsNegative() == other.IsNegative()) { |
8286 return this->IsNegative() ? -1 : 1; | 8294 return this->IsNegative() ? -1 : 1; |
8287 } | 8295 } |
8288 return this->IsNegative() ? -1 : 1; | 8296 return this->IsNegative() ? -1 : 1; |
8289 } | 8297 } |
8290 | 8298 |
8291 | 8299 |
8292 RawBigint* Bigint::Allocate(intptr_t length, Heap::Space space) { | 8300 RawBigint* Bigint::Allocate(intptr_t length, Heap::Space space) { |
8293 ASSERT(length >= 0); | 8301 ASSERT(length >= 0); |
8294 Isolate* isolate = Isolate::Current(); | 8302 ASSERT(Isolate::Current()->object_store()->bigint_class() != Class::null()); |
8295 const Class& cls = Class::Handle(isolate->object_store()->bigint_class()); | |
8296 Bigint& result = Bigint::Handle(); | 8303 Bigint& result = Bigint::Handle(); |
8297 { | 8304 { |
8298 RawObject* raw = Object::Allocate(cls, Bigint::InstanceSize(length), space); | 8305 RawObject* raw = Object::Allocate(Bigint::kInstanceKind, |
| 8306 Bigint::InstanceSize(length), |
| 8307 space); |
8299 NoGCScope no_gc; | 8308 NoGCScope no_gc; |
8300 result ^= raw; | 8309 result ^= raw; |
8301 result.raw_ptr()->allocated_length_ = length; // Chunk length allocated. | 8310 result.raw_ptr()->allocated_length_ = length; // Chunk length allocated. |
8302 result.raw_ptr()->signed_length_ = length; // Chunk length in use. | 8311 result.raw_ptr()->signed_length_ = length; // Chunk length in use. |
8303 } | 8312 } |
8304 return result.raw(); | 8313 return result.raw(); |
8305 } | 8314 } |
8306 | 8315 |
8307 | 8316 |
8308 static uword ZoneAllocator(intptr_t size) { | 8317 static uword ZoneAllocator(intptr_t size) { |
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8514 } | 8523 } |
8515 } | 8524 } |
8516 return true; | 8525 return true; |
8517 } | 8526 } |
8518 | 8527 |
8519 | 8528 |
8520 RawInstance* String::Canonicalize() const { | 8529 RawInstance* String::Canonicalize() const { |
8521 if (IsCanonical()) { | 8530 if (IsCanonical()) { |
8522 return this->raw(); | 8531 return this->raw(); |
8523 } | 8532 } |
8524 return NewSymbol(*this); | 8533 return Symbols::New(*this); |
8525 } | 8534 } |
8526 | 8535 |
8527 | 8536 |
8528 RawString* String::New(const char* str, Heap::Space space) { | 8537 RawString* String::New(const char* str, Heap::Space space) { |
8529 intptr_t width = 0; | 8538 intptr_t width = 0; |
8530 intptr_t len = Utf8::CodePointCount(str, &width); | 8539 intptr_t len = Utf8::CodePointCount(str, &width); |
8531 if (width == 1) { | 8540 if (width == 1) { |
8532 const OneByteString& onestr | 8541 const OneByteString& onestr |
8533 = OneByteString::Handle(OneByteString::New(len, space)); | 8542 = OneByteString::Handle(OneByteString::New(len, space)); |
8534 if (len > 0) { | 8543 if (len > 0) { |
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8795 if (str.IsTwoByteString()) { | 8804 if (str.IsTwoByteString()) { |
8796 const TwoByteString& twostr = TwoByteString::Cast(str); | 8805 const TwoByteString& twostr = TwoByteString::Cast(str); |
8797 return twostr.EscapeDoubleQuotes(); | 8806 return twostr.EscapeDoubleQuotes(); |
8798 } | 8807 } |
8799 ASSERT(str.IsFourByteString()); | 8808 ASSERT(str.IsFourByteString()); |
8800 const FourByteString& fourstr = FourByteString::Cast(str); | 8809 const FourByteString& fourstr = FourByteString::Cast(str); |
8801 return fourstr.EscapeDoubleQuotes(); | 8810 return fourstr.EscapeDoubleQuotes(); |
8802 } | 8811 } |
8803 | 8812 |
8804 | 8813 |
8805 static void GrowSymbolTable(const Array& symbol_table, intptr_t table_size) { | |
8806 // TODO(iposva): Avoid exponential growth. | |
8807 intptr_t new_table_size = table_size * 2; | |
8808 Array& new_symbol_table = Array::Handle(Array::New(new_table_size + 1)); | |
8809 // Copy all elements from the original symbol table to the newly allocated | |
8810 // array. | |
8811 String& element = String::Handle(); | |
8812 Object& new_element = Object::Handle(); | |
8813 for (intptr_t i = 0; i < table_size; i++) { | |
8814 element ^= symbol_table.At(i); | |
8815 if (!element.IsNull()) { | |
8816 intptr_t hash = element.Hash(); | |
8817 intptr_t index = hash % new_table_size; | |
8818 new_element = new_symbol_table.At(index); | |
8819 while (!new_element.IsNull()) { | |
8820 index = (index + 1) % new_table_size; // Move to next element. | |
8821 new_element = new_symbol_table.At(index); | |
8822 } | |
8823 new_symbol_table.SetAt(index, element); | |
8824 } | |
8825 } | |
8826 // Copy used count. | |
8827 new_element = symbol_table.At(table_size); | |
8828 new_symbol_table.SetAt(new_table_size, new_element); | |
8829 // Remember the new symbol table now. | |
8830 Isolate::Current()->object_store()->set_symbol_table(new_symbol_table); | |
8831 } | |
8832 | |
8833 | |
8834 static void InsertIntoSymbolTable(const Array& symbol_table, | |
8835 const String& symbol, | |
8836 intptr_t index, | |
8837 intptr_t table_size) { | |
8838 symbol.SetCanonical(); // Mark object as being canonical. | |
8839 symbol_table.SetAt(index, symbol); // Remember the new symbol. | |
8840 Smi& used = Smi::Handle(); | |
8841 used ^= symbol_table.At(table_size); | |
8842 intptr_t used_elements = used.Value() + 1; // One more element added. | |
8843 used = Smi::New(used_elements); | |
8844 symbol_table.SetAt(table_size, used); // Update used count. | |
8845 | |
8846 // Rehash if symbol_table is 75% full. | |
8847 if (used_elements > ((table_size / 4) * 3)) { | |
8848 GrowSymbolTable(symbol_table, table_size); | |
8849 } | |
8850 } | |
8851 | |
8852 | |
8853 RawString* String::NewSymbol(const char* str) { | |
8854 intptr_t width = 0; | |
8855 intptr_t len = Utf8::CodePointCount(str, &width); | |
8856 intptr_t size = len * width; | |
8857 Zone* zone = Isolate::Current()->current_zone(); | |
8858 if (len == 0) { | |
8859 return String::NewSymbol(reinterpret_cast<uint8_t*>(NULL), 0); | |
8860 } else if (width == 1) { | |
8861 uint8_t* characters = reinterpret_cast<uint8_t*>(zone->Allocate(size)); | |
8862 Utf8::Decode(str, characters, len); | |
8863 return NewSymbol(characters, len); | |
8864 } else if (width == 2) { | |
8865 uint16_t* characters = reinterpret_cast<uint16_t*>(zone->Allocate(size)); | |
8866 Utf8::Decode(str, characters, len); | |
8867 return NewSymbol(characters, len); | |
8868 } | |
8869 ASSERT(width == 4); | |
8870 uint32_t* characters = reinterpret_cast<uint32_t*>(zone->Allocate(size)); | |
8871 Utf8::Decode(str, characters, len); | |
8872 return NewSymbol(characters, len); | |
8873 } | |
8874 | |
8875 | |
8876 template<typename T> | |
8877 RawString* String::NewSymbol(const T* characters, intptr_t len) { | |
8878 Isolate* isolate = Isolate::Current(); | |
8879 | |
8880 // Calculate the String hash for this sequence of characters. | |
8881 intptr_t hash = Hash(characters, len); | |
8882 | |
8883 const Array& symbol_table = | |
8884 Array::Handle(isolate, isolate->object_store()->symbol_table()); | |
8885 // Last element of the array is the number of used elements. | |
8886 intptr_t table_size = symbol_table.Length() - 1; | |
8887 intptr_t index = hash % table_size; | |
8888 | |
8889 String& symbol = String::Handle(isolate, String::null()); | |
8890 symbol ^= symbol_table.At(index); | |
8891 while (!symbol.IsNull() && !symbol.Equals(characters, len)) { | |
8892 index = (index + 1) % table_size; // Move to next element. | |
8893 symbol ^= symbol_table.At(index); | |
8894 } | |
8895 // Since we leave enough room in the table to guarantee, that we find an | |
8896 // empty spot, index is the insertion point if symbol is null. | |
8897 if (symbol.IsNull()) { | |
8898 // Allocate new result string. | |
8899 symbol = String::New(characters, len, Heap::kOld); | |
8900 symbol.SetHash(hash); // Remember the calculated hash value. | |
8901 InsertIntoSymbolTable(symbol_table, symbol, index, table_size); | |
8902 } | |
8903 ASSERT(symbol.IsSymbol()); | |
8904 return symbol.raw(); | |
8905 } | |
8906 | |
8907 template RawString* String::NewSymbol(const uint8_t* characters, intptr_t len); | |
8908 template RawString* String::NewSymbol(const uint16_t* characters, intptr_t len); | |
8909 template RawString* String::NewSymbol(const uint32_t* characters, intptr_t len); | |
8910 | |
8911 | |
8912 RawString* String::NewSymbol(const String& str) { | |
8913 if (str.IsSymbol()) { | |
8914 return str.raw(); | |
8915 } | |
8916 return NewSymbol(str, 0, str.Length()); | |
8917 } | |
8918 | |
8919 | |
8920 RawString* String::NewSymbol(const String& str, | |
8921 intptr_t begin_index, | |
8922 intptr_t len) { | |
8923 ASSERT(begin_index >= 0); | |
8924 ASSERT(len >= 0); | |
8925 ASSERT((begin_index + len) <= str.Length()); | |
8926 Isolate* isolate = Isolate::Current(); | |
8927 | |
8928 // Calculate the String hash for this sequence of characters. | |
8929 intptr_t hash = String::Hash(str, begin_index, len); | |
8930 | |
8931 const Array& symbol_table = | |
8932 Array::Handle(isolate, isolate->object_store()->symbol_table()); | |
8933 // Last element of the array is the number of used elements. | |
8934 intptr_t table_size = symbol_table.Length() - 1; | |
8935 intptr_t index = hash % table_size; | |
8936 | |
8937 String& symbol = String::Handle(isolate, String::null()); | |
8938 symbol ^= symbol_table.At(index); | |
8939 while (!symbol.IsNull() && !symbol.Equals(str, begin_index, len)) { | |
8940 index = (index + 1) % table_size; // Move to next element. | |
8941 symbol ^= symbol_table.At(index); | |
8942 } | |
8943 // Since we leave enough room in the table to guarantee, that we find an | |
8944 // empty spot, index is the insertion point if symbol is null. | |
8945 if (symbol.IsNull()) { | |
8946 if (str.IsOld() && begin_index == 0 && len == str.Length()) { | |
8947 // Reuse the incoming str as the symbol value. | |
8948 symbol = str.raw(); | |
8949 } else { | |
8950 // Allocate a copy in old space. | |
8951 symbol = String::SubString(str, begin_index, len, Heap::kOld); | |
8952 } | |
8953 symbol.SetHash(hash); | |
8954 InsertIntoSymbolTable(symbol_table, symbol, index, table_size); | |
8955 } | |
8956 ASSERT(symbol.IsSymbol()); | |
8957 return symbol.raw(); | |
8958 } | |
8959 | |
8960 | |
8961 RawString* String::NewFormatted(const char* format, ...) { | 8814 RawString* String::NewFormatted(const char* format, ...) { |
8962 va_list args; | 8815 va_list args; |
8963 va_start(args, format); | 8816 va_start(args, format); |
8964 intptr_t len = OS::VSNPrint(NULL, 0, format, args); | 8817 intptr_t len = OS::VSNPrint(NULL, 0, format, args); |
8965 va_end(args); | 8818 va_end(args); |
8966 | 8819 |
8967 Zone* zone = Isolate::Current()->current_zone(); | 8820 Zone* zone = Isolate::Current()->current_zone(); |
8968 char* buffer = reinterpret_cast<char*>(zone->Allocate(len + 1)); | 8821 char* buffer = reinterpret_cast<char*>(zone->Allocate(len + 1)); |
8969 va_list args2; | 8822 va_list args2; |
8970 va_start(args2, format); | 8823 va_start(args2, format); |
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9196 } | 9049 } |
9197 | 9050 |
9198 // We have reached the end of mangled_name string. | 9051 // We have reached the end of mangled_name string. |
9199 ASSERT(pos == len); | 9052 ASSERT(pos == len); |
9200 return (name_pos == name_len); | 9053 return (name_pos == name_len); |
9201 } | 9054 } |
9202 | 9055 |
9203 | 9056 |
9204 RawOneByteString* OneByteString::New(intptr_t len, | 9057 RawOneByteString* OneByteString::New(intptr_t len, |
9205 Heap::Space space) { | 9058 Heap::Space space) { |
9206 Isolate* isolate = Isolate::Current(); | 9059 ASSERT(Isolate::Current() == Dart::vm_isolate() || |
9207 | 9060 Isolate::Current()->object_store()->one_byte_string_class() != |
9208 const Class& cls = | 9061 Class::null()); |
9209 Class::Handle(isolate->object_store()->one_byte_string_class()); | |
9210 OneByteString& result = OneByteString::Handle(); | 9062 OneByteString& result = OneByteString::Handle(); |
9211 { | 9063 { |
9212 RawObject* raw = Object::Allocate(cls, | 9064 RawObject* raw = Object::Allocate(OneByteString::kInstanceKind, |
9213 OneByteString::InstanceSize(len), | 9065 OneByteString::InstanceSize(len), |
9214 space); | 9066 space); |
9215 NoGCScope no_gc; | 9067 NoGCScope no_gc; |
9216 result ^= raw; | 9068 result ^= raw; |
9217 result.SetLength(len); | 9069 result.SetLength(len); |
9218 result.SetHash(0); | 9070 result.SetHash(0); |
9219 } | 9071 } |
9220 return result.raw(); | 9072 return result.raw(); |
9221 } | 9073 } |
9222 | 9074 |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9337 } | 9189 } |
9338 } | 9190 } |
9339 return dststr.raw(); | 9191 return dststr.raw(); |
9340 } | 9192 } |
9341 return TwoByteString::null(); | 9193 return TwoByteString::null(); |
9342 } | 9194 } |
9343 | 9195 |
9344 | 9196 |
9345 RawTwoByteString* TwoByteString::New(intptr_t len, | 9197 RawTwoByteString* TwoByteString::New(intptr_t len, |
9346 Heap::Space space) { | 9198 Heap::Space space) { |
9347 Isolate* isolate = Isolate::Current(); | 9199 ASSERT(Isolate::Current()->object_store()->two_byte_string_class()); |
9348 | |
9349 const Class& cls = | |
9350 Class::Handle(isolate->object_store()->two_byte_string_class()); | |
9351 TwoByteString& result = TwoByteString::Handle(); | 9200 TwoByteString& result = TwoByteString::Handle(); |
9352 { | 9201 { |
9353 RawObject* raw = Object::Allocate(cls, | 9202 RawObject* raw = Object::Allocate(TwoByteString::kInstanceKind, |
9354 TwoByteString::InstanceSize(len), | 9203 TwoByteString::InstanceSize(len), |
9355 space); | 9204 space); |
9356 NoGCScope no_gc; | 9205 NoGCScope no_gc; |
9357 result ^= raw; | 9206 result ^= raw; |
9358 result.SetLength(len); | 9207 result.SetLength(len); |
9359 result.SetHash(0); | 9208 result.SetHash(0); |
9360 } | 9209 } |
9361 return result.raw(); | 9210 return result.raw(); |
9362 } | 9211 } |
9363 | 9212 |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9468 } | 9317 } |
9469 } | 9318 } |
9470 return dststr.raw(); | 9319 return dststr.raw(); |
9471 } | 9320 } |
9472 return FourByteString::null(); | 9321 return FourByteString::null(); |
9473 } | 9322 } |
9474 | 9323 |
9475 | 9324 |
9476 RawFourByteString* FourByteString::New(intptr_t len, | 9325 RawFourByteString* FourByteString::New(intptr_t len, |
9477 Heap::Space space) { | 9326 Heap::Space space) { |
9478 Isolate* isolate = Isolate::Current(); | 9327 ASSERT(Isolate::Current()->object_store()->four_byte_string_class() != |
9479 | 9328 Class::null()); |
9480 const Class& cls = | |
9481 Class::Handle(isolate->object_store()->four_byte_string_class()); | |
9482 FourByteString& result = FourByteString::Handle(); | 9329 FourByteString& result = FourByteString::Handle(); |
9483 { | 9330 { |
9484 RawObject* raw = Object::Allocate(cls, | 9331 RawObject* raw = Object::Allocate(FourByteString::kInstanceKind, |
9485 FourByteString::InstanceSize(len), | 9332 FourByteString::InstanceSize(len), |
9486 space); | 9333 space); |
9487 NoGCScope no_gc; | 9334 NoGCScope no_gc; |
9488 result ^= raw; | 9335 result ^= raw; |
9489 result.SetLength(len); | 9336 result.SetLength(len); |
9490 result.SetHash(0); | 9337 result.SetHash(0); |
9491 } | 9338 } |
9492 return result.raw(); | 9339 return result.raw(); |
9493 } | 9340 } |
9494 | 9341 |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9577 weak_ref->set_callback(callback); | 9424 weak_ref->set_callback(callback); |
9578 } | 9425 } |
9579 | 9426 |
9580 | 9427 |
9581 RawExternalOneByteString* ExternalOneByteString::New( | 9428 RawExternalOneByteString* ExternalOneByteString::New( |
9582 const uint8_t* data, | 9429 const uint8_t* data, |
9583 intptr_t len, | 9430 intptr_t len, |
9584 void* peer, | 9431 void* peer, |
9585 Dart_PeerFinalizer callback, | 9432 Dart_PeerFinalizer callback, |
9586 Heap::Space space) { | 9433 Heap::Space space) { |
9587 Isolate* isolate = Isolate::Current(); | 9434 ASSERT(Isolate::Current()->object_store()->external_one_byte_string_class() != |
9588 | 9435 Class::null()); |
9589 const Class& cls = | |
9590 Class::Handle(isolate->object_store()->external_one_byte_string_class()); | |
9591 ExternalOneByteString& result = ExternalOneByteString::Handle(); | 9436 ExternalOneByteString& result = ExternalOneByteString::Handle(); |
9592 ExternalStringData<uint8_t>* external_data = | 9437 ExternalStringData<uint8_t>* external_data = |
9593 new ExternalStringData<uint8_t>(data, peer, callback); | 9438 new ExternalStringData<uint8_t>(data, peer, callback); |
9594 { | 9439 { |
9595 RawObject* raw = Object::Allocate(cls, | 9440 RawObject* raw = Object::Allocate(ExternalOneByteString::kInstanceKind, |
9596 ExternalOneByteString::InstanceSize(), | 9441 ExternalOneByteString::InstanceSize(), |
9597 space); | 9442 space); |
9598 NoGCScope no_gc; | 9443 NoGCScope no_gc; |
9599 result ^= raw; | 9444 result ^= raw; |
9600 result.SetLength(len); | 9445 result.SetLength(len); |
9601 result.SetHash(0); | 9446 result.SetHash(0); |
9602 result.SetExternalData(external_data); | 9447 result.SetExternalData(external_data); |
9603 } | 9448 } |
9604 AddFinalizer(result, external_data, ExternalOneByteString::Finalize); | 9449 AddFinalizer(result, external_data, ExternalOneByteString::Finalize); |
9605 return result.raw(); | 9450 return result.raw(); |
(...skipping 20 matching lines...) Expand all Loading... |
9626 return String::ToCString(); | 9471 return String::ToCString(); |
9627 } | 9472 } |
9628 | 9473 |
9629 | 9474 |
9630 RawExternalTwoByteString* ExternalTwoByteString::New( | 9475 RawExternalTwoByteString* ExternalTwoByteString::New( |
9631 const uint16_t* data, | 9476 const uint16_t* data, |
9632 intptr_t len, | 9477 intptr_t len, |
9633 void* peer, | 9478 void* peer, |
9634 Dart_PeerFinalizer callback, | 9479 Dart_PeerFinalizer callback, |
9635 Heap::Space space) { | 9480 Heap::Space space) { |
9636 Isolate* isolate = Isolate::Current(); | 9481 ASSERT(Isolate::Current()->object_store()->external_two_byte_string_class() != |
9637 | 9482 Class::null()); |
9638 const Class& cls = | |
9639 Class::Handle(isolate->object_store()->external_two_byte_string_class()); | |
9640 ExternalTwoByteString& result = ExternalTwoByteString::Handle(); | 9483 ExternalTwoByteString& result = ExternalTwoByteString::Handle(); |
9641 ExternalStringData<uint16_t>* external_data = | 9484 ExternalStringData<uint16_t>* external_data = |
9642 new ExternalStringData<uint16_t>(data, peer, callback); | 9485 new ExternalStringData<uint16_t>(data, peer, callback); |
9643 { | 9486 { |
9644 RawObject* raw = Object::Allocate(cls, | 9487 RawObject* raw = Object::Allocate(ExternalTwoByteString::kInstanceKind, |
9645 ExternalTwoByteString::InstanceSize(), | 9488 ExternalTwoByteString::InstanceSize(), |
9646 space); | 9489 space); |
9647 NoGCScope no_gc; | 9490 NoGCScope no_gc; |
9648 result ^= raw; | 9491 result ^= raw; |
9649 result.SetLength(len); | 9492 result.SetLength(len); |
9650 result.SetHash(0); | 9493 result.SetHash(0); |
9651 result.SetExternalData(external_data); | 9494 result.SetExternalData(external_data); |
9652 } | 9495 } |
9653 AddFinalizer(result, external_data, ExternalTwoByteString::Finalize); | 9496 AddFinalizer(result, external_data, ExternalTwoByteString::Finalize); |
9654 return result.raw(); | 9497 return result.raw(); |
(...skipping 10 matching lines...) Expand all Loading... |
9665 return String::ToCString(); | 9508 return String::ToCString(); |
9666 } | 9509 } |
9667 | 9510 |
9668 | 9511 |
9669 RawExternalFourByteString* ExternalFourByteString::New( | 9512 RawExternalFourByteString* ExternalFourByteString::New( |
9670 const uint32_t* data, | 9513 const uint32_t* data, |
9671 intptr_t len, | 9514 intptr_t len, |
9672 void* peer, | 9515 void* peer, |
9673 Dart_PeerFinalizer callback, | 9516 Dart_PeerFinalizer callback, |
9674 Heap::Space space) { | 9517 Heap::Space space) { |
9675 Isolate* isolate = Isolate::Current(); | 9518 ASSERT(Isolate::Current()->object_store()-> |
9676 | 9519 external_four_byte_string_class() != Class::null()); |
9677 const Class& cls = | |
9678 Class::Handle(isolate->object_store()->external_four_byte_string_class()); | |
9679 ExternalFourByteString& result = ExternalFourByteString::Handle(); | 9520 ExternalFourByteString& result = ExternalFourByteString::Handle(); |
9680 ExternalStringData<uint32_t>* external_data = | 9521 ExternalStringData<uint32_t>* external_data = |
9681 new ExternalStringData<uint32_t>(data, peer, callback); | 9522 new ExternalStringData<uint32_t>(data, peer, callback); |
9682 { | 9523 { |
9683 RawObject* raw = Object::Allocate(cls, | 9524 RawObject* raw = Object::Allocate(ExternalFourByteString::kInstanceKind, |
9684 ExternalFourByteString::InstanceSize(), | 9525 ExternalFourByteString::InstanceSize(), |
9685 space); | 9526 space); |
9686 NoGCScope no_gc; | 9527 NoGCScope no_gc; |
9687 result ^= raw; | 9528 result ^= raw; |
9688 result.SetLength(len); | 9529 result.SetLength(len); |
9689 result.SetHash(0); | 9530 result.SetHash(0); |
9690 result.SetExternalData(external_data); | 9531 result.SetExternalData(external_data); |
9691 } | 9532 } |
9692 AddFinalizer(result, external_data, ExternalFourByteString::Finalize); | 9533 AddFinalizer(result, external_data, ExternalFourByteString::Finalize); |
9693 return result.raw(); | 9534 return result.raw(); |
(...skipping 15 matching lines...) Expand all Loading... |
9709 return Isolate::Current()->object_store()->true_value(); | 9550 return Isolate::Current()->object_store()->true_value(); |
9710 } | 9551 } |
9711 | 9552 |
9712 | 9553 |
9713 RawBool* Bool::False() { | 9554 RawBool* Bool::False() { |
9714 return Isolate::Current()->object_store()->false_value(); | 9555 return Isolate::Current()->object_store()->false_value(); |
9715 } | 9556 } |
9716 | 9557 |
9717 | 9558 |
9718 RawBool* Bool::New(bool value) { | 9559 RawBool* Bool::New(bool value) { |
9719 Isolate* isolate = Isolate::Current(); | 9560 ASSERT(Isolate::Current()->object_store()->bool_class() != Class::null()); |
9720 | |
9721 const Class& cls = Class::Handle(isolate->object_store()->bool_class()); | |
9722 Bool& result = Bool::Handle(); | 9561 Bool& result = Bool::Handle(); |
9723 { | 9562 { |
9724 // Since the two boolean instances are singletons we allocate them straight | 9563 // Since the two boolean instances are singletons we allocate them straight |
9725 // in the old generation. | 9564 // in the old generation. |
9726 RawObject* raw = Object::Allocate(cls, Bool::InstanceSize(), Heap::kOld); | 9565 RawObject* raw = Object::Allocate(Bool::kInstanceKind, |
| 9566 Bool::InstanceSize(), |
| 9567 Heap::kOld); |
9727 NoGCScope no_gc; | 9568 NoGCScope no_gc; |
9728 result ^= raw; | 9569 result ^= raw; |
9729 } | 9570 } |
9730 result.set_value(value); | 9571 result.set_value(value); |
9731 return result.raw(); | 9572 return result.raw(); |
9732 } | 9573 } |
9733 | 9574 |
9734 | 9575 |
9735 const char* Bool::ToCString() const { | 9576 const char* Bool::ToCString() const { |
9736 return value() ? "true" : "false"; | 9577 return value() ? "true" : "false"; |
(...skipping 28 matching lines...) Expand all Loading... |
9765 if (this->At(i) != other_arr.At(i)) { | 9606 if (this->At(i) != other_arr.At(i)) { |
9766 return false; | 9607 return false; |
9767 } | 9608 } |
9768 } | 9609 } |
9769 return true; | 9610 return true; |
9770 } | 9611 } |
9771 | 9612 |
9772 | 9613 |
9773 RawArray* Array::New(intptr_t len, Heap::Space space) { | 9614 RawArray* Array::New(intptr_t len, Heap::Space space) { |
9774 ObjectStore* object_store = Isolate::Current()->object_store(); | 9615 ObjectStore* object_store = Isolate::Current()->object_store(); |
| 9616 ASSERT(object_store->array_class() != Class::null()); |
9775 Class& cls = Class::Handle(object_store->array_class()); | 9617 Class& cls = Class::Handle(object_store->array_class()); |
9776 return New(cls, len, space); | 9618 return New(cls, len, space); |
9777 } | 9619 } |
9778 | 9620 |
9779 | 9621 |
9780 RawArray* Array::New(const Class& cls, intptr_t len, Heap::Space space) { | 9622 RawArray* Array::New(const Class& cls, intptr_t len, Heap::Space space) { |
9781 if ((len < 0) || (len > kMaxArrayElements)) { | 9623 if ((len < 0) || (len > kMaxArrayElements)) { |
9782 // TODO(srdjan): Verify that illegal argument is the right thing to throw. | 9624 // TODO(srdjan): Verify that illegal argument is the right thing to throw. |
9783 GrowableArray<const Object*> args; | 9625 GrowableArray<const Object*> args; |
9784 args.Add(&Smi::Handle(Smi::New(len))); | 9626 args.Add(&Smi::Handle(Smi::New(len))); |
9785 Exceptions::ThrowByType(Exceptions::kIllegalArgument, args); | 9627 Exceptions::ThrowByType(Exceptions::kIllegalArgument, args); |
9786 } | 9628 } |
9787 Array& result = Array::Handle(); | 9629 Array& result = Array::Handle(); |
9788 { | 9630 { |
9789 RawObject* raw = Object::Allocate(cls, | 9631 RawObject* raw = Object::Allocate(cls.id(), |
9790 Array::InstanceSize(len), | 9632 Array::InstanceSize(len), |
9791 space); | 9633 space); |
9792 NoGCScope no_gc; | 9634 NoGCScope no_gc; |
9793 result ^= raw; | 9635 result ^= raw; |
9794 result.SetLength(len); | 9636 result.SetLength(len); |
9795 } | 9637 } |
9796 return result.raw(); | 9638 return result.raw(); |
9797 } | 9639 } |
9798 | 9640 |
9799 | 9641 |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9892 raw->ptr()->tags_ = tags; | 9734 raw->ptr()->tags_ = tags; |
9893 } | 9735 } |
9894 } | 9736 } |
9895 return array.raw(); | 9737 return array.raw(); |
9896 } | 9738 } |
9897 | 9739 |
9898 | 9740 |
9899 RawImmutableArray* ImmutableArray::New(intptr_t len, | 9741 RawImmutableArray* ImmutableArray::New(intptr_t len, |
9900 Heap::Space space) { | 9742 Heap::Space space) { |
9901 ObjectStore* object_store = Isolate::Current()->object_store(); | 9743 ObjectStore* object_store = Isolate::Current()->object_store(); |
| 9744 ASSERT(object_store->immutable_array_class() != Class::null()); |
9902 Class& cls = Class::Handle(object_store->immutable_array_class()); | 9745 Class& cls = Class::Handle(object_store->immutable_array_class()); |
9903 return reinterpret_cast<RawImmutableArray*>(Array::New(cls, len, space)); | 9746 return reinterpret_cast<RawImmutableArray*>(Array::New(cls, len, space)); |
9904 } | 9747 } |
9905 | 9748 |
9906 | 9749 |
9907 const char* ImmutableArray::ToCString() const { | 9750 const char* ImmutableArray::ToCString() const { |
9908 return "ImmutableArray"; | 9751 return "ImmutableArray"; |
9909 } | 9752 } |
9910 | 9753 |
9911 | 9754 |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9996 | 9839 |
9997 RawGrowableObjectArray* GrowableObjectArray::New(intptr_t capacity, | 9840 RawGrowableObjectArray* GrowableObjectArray::New(intptr_t capacity, |
9998 Heap::Space space) { | 9841 Heap::Space space) { |
9999 const Array& data = Array::Handle(Array::New(capacity, space)); | 9842 const Array& data = Array::Handle(Array::New(capacity, space)); |
10000 return New(data, space); | 9843 return New(data, space); |
10001 } | 9844 } |
10002 | 9845 |
10003 | 9846 |
10004 RawGrowableObjectArray* GrowableObjectArray::New(const Array& array, | 9847 RawGrowableObjectArray* GrowableObjectArray::New(const Array& array, |
10005 Heap::Space space) { | 9848 Heap::Space space) { |
10006 ObjectStore* object_store = Isolate::Current()->object_store(); | 9849 ASSERT(Isolate::Current()->object_store()->growable_object_array_class() |
10007 Class& cls = Class::Handle(object_store->growable_object_array_class()); | 9850 != Class::null()); |
10008 GrowableObjectArray& result = GrowableObjectArray::Handle(); | 9851 GrowableObjectArray& result = GrowableObjectArray::Handle(); |
10009 { | 9852 { |
10010 RawObject* raw = Object::Allocate(cls, | 9853 RawObject* raw = Object::Allocate(GrowableObjectArray::kInstanceKind, |
10011 GrowableObjectArray::InstanceSize(), | 9854 GrowableObjectArray::InstanceSize(), |
10012 space); | 9855 space); |
10013 NoGCScope no_gc; | 9856 NoGCScope no_gc; |
10014 result ^= raw; | 9857 result ^= raw; |
10015 result.SetLength(0); | 9858 result.SetLength(0); |
10016 result.SetData(array); | 9859 result.SetData(array); |
10017 } | 9860 } |
10018 return result.raw(); | 9861 return result.raw(); |
10019 } | 9862 } |
10020 | 9863 |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10079 RawT* ByteArray::NewExternalImpl(const Class& cls, | 9922 RawT* ByteArray::NewExternalImpl(const Class& cls, |
10080 ElementT* data, | 9923 ElementT* data, |
10081 intptr_t len, | 9924 intptr_t len, |
10082 void* peer, | 9925 void* peer, |
10083 Dart_PeerFinalizer callback, | 9926 Dart_PeerFinalizer callback, |
10084 Heap::Space space) { | 9927 Heap::Space space) { |
10085 HandleT& result = HandleT::Handle(); | 9928 HandleT& result = HandleT::Handle(); |
10086 ExternalByteArrayData<ElementT>* external_data = | 9929 ExternalByteArrayData<ElementT>* external_data = |
10087 new ExternalByteArrayData<ElementT>(data, peer, callback); | 9930 new ExternalByteArrayData<ElementT>(data, peer, callback); |
10088 { | 9931 { |
10089 RawObject* raw = Object::Allocate(cls, HandleT::InstanceSize(), space); | 9932 RawObject* raw = Object::Allocate(cls.id(), HandleT::InstanceSize(), space); |
10090 NoGCScope no_gc; | 9933 NoGCScope no_gc; |
10091 result ^= raw; | 9934 result ^= raw; |
10092 result.SetLength(len); | 9935 result.SetLength(len); |
10093 result.SetExternalData(external_data); | 9936 result.SetExternalData(external_data); |
10094 } | 9937 } |
10095 AddFinalizer(result, external_data, ExternalByteArrayFinalize<ElementT>); | 9938 AddFinalizer(result, external_data, ExternalByteArrayFinalize<ElementT>); |
10096 return result.raw(); | 9939 return result.raw(); |
10097 } | 9940 } |
10098 | 9941 |
10099 | 9942 |
(...skipping 15 matching lines...) Expand all Loading... |
10115 // ByteArray is an abstract class. | 9958 // ByteArray is an abstract class. |
10116 UNREACHABLE(); | 9959 UNREACHABLE(); |
10117 return "ByteArray"; | 9960 return "ByteArray"; |
10118 } | 9961 } |
10119 | 9962 |
10120 | 9963 |
10121 template<typename HandleT, typename RawT> | 9964 template<typename HandleT, typename RawT> |
10122 RawT* ByteArray::NewImpl(const Class& cls, intptr_t len, Heap::Space space) { | 9965 RawT* ByteArray::NewImpl(const Class& cls, intptr_t len, Heap::Space space) { |
10123 HandleT& result = HandleT::Handle(); | 9966 HandleT& result = HandleT::Handle(); |
10124 { | 9967 { |
10125 RawObject* raw = Object::Allocate(cls, HandleT::InstanceSize(len), space); | 9968 RawObject* raw = Object::Allocate(cls.id(), |
| 9969 HandleT::InstanceSize(len), |
| 9970 space); |
10126 NoGCScope no_gc; | 9971 NoGCScope no_gc; |
10127 result ^= raw; | 9972 result ^= raw; |
10128 result.SetLength(len); | 9973 result.SetLength(len); |
10129 if (len > 0) { | 9974 if (len > 0) { |
10130 memset(result.ByteAddr(0), 0, result.ByteLength()); | 9975 memset(result.ByteAddr(0), 0, result.ByteLength()); |
10131 } | 9976 } |
10132 } | 9977 } |
10133 return result.raw(); | 9978 return result.raw(); |
10134 } | 9979 } |
10135 | 9980 |
10136 | 9981 |
10137 template<typename HandleT, typename RawT, typename ElementT> | 9982 template<typename HandleT, typename RawT, typename ElementT> |
10138 RawT* ByteArray::NewImpl(const Class& cls, | 9983 RawT* ByteArray::NewImpl(const Class& cls, |
10139 const ElementT* data, | 9984 const ElementT* data, |
10140 intptr_t len, | 9985 intptr_t len, |
10141 Heap::Space space) { | 9986 Heap::Space space) { |
10142 HandleT& result = HandleT::Handle(); | 9987 HandleT& result = HandleT::Handle(); |
10143 { | 9988 { |
10144 RawObject* raw = Object::Allocate(cls, HandleT::InstanceSize(len), space); | 9989 RawObject* raw = Object::Allocate(cls.id(), |
| 9990 HandleT::InstanceSize(len), |
| 9991 space); |
10145 NoGCScope no_gc; | 9992 NoGCScope no_gc; |
10146 result ^= raw; | 9993 result ^= raw; |
10147 result.SetLength(len); | 9994 result.SetLength(len); |
10148 if (len > 0) { | 9995 if (len > 0) { |
10149 memmove(result.ByteAddr(0), data, result.ByteLength()); | 9996 memmove(result.ByteAddr(0), data, result.ByteLength()); |
10150 } | 9997 } |
10151 } | 9998 } |
10152 return result.raw(); | 9999 return result.raw(); |
10153 } | 10000 } |
10154 | 10001 |
10155 | 10002 |
10156 RawInt8Array* Int8Array::New(intptr_t len, Heap::Space space) { | 10003 RawInt8Array* Int8Array::New(intptr_t len, Heap::Space space) { |
10157 Isolate* isolate = Isolate::Current(); | 10004 Isolate* isolate = Isolate::Current(); |
| 10005 ASSERT(isolate->object_store()->int8_array_class() != Class::null()); |
10158 const Class& cls = | 10006 const Class& cls = |
10159 Class::Handle(isolate->object_store()->int8_array_class()); | 10007 Class::Handle(isolate->object_store()->int8_array_class()); |
10160 return NewImpl<Int8Array, RawInt8Array>(cls, len, space); | 10008 return NewImpl<Int8Array, RawInt8Array>(cls, len, space); |
10161 } | 10009 } |
10162 | 10010 |
10163 | 10011 |
10164 RawInt8Array* Int8Array::New(const int8_t* data, | 10012 RawInt8Array* Int8Array::New(const int8_t* data, |
10165 intptr_t len, | 10013 intptr_t len, |
10166 Heap::Space space) { | 10014 Heap::Space space) { |
10167 Isolate* isolate = Isolate::Current(); | 10015 Isolate* isolate = Isolate::Current(); |
| 10016 ASSERT(isolate->object_store()->int8_array_class() != Class::null()); |
10168 const Class& cls = | 10017 const Class& cls = |
10169 Class::Handle(isolate->object_store()->int8_array_class()); | 10018 Class::Handle(isolate->object_store()->int8_array_class()); |
10170 return NewImpl<Int8Array, RawInt8Array>(cls, data, len, space); | 10019 return NewImpl<Int8Array, RawInt8Array>(cls, data, len, space); |
10171 } | 10020 } |
10172 | 10021 |
10173 | 10022 |
10174 const char* Int8Array::ToCString() const { | 10023 const char* Int8Array::ToCString() const { |
10175 return "_Int8Array"; | 10024 return "_Int8Array"; |
10176 } | 10025 } |
10177 | 10026 |
10178 | 10027 |
10179 RawUint8Array* Uint8Array::New(intptr_t len, Heap::Space space) { | 10028 RawUint8Array* Uint8Array::New(intptr_t len, Heap::Space space) { |
10180 Isolate* isolate = Isolate::Current(); | 10029 Isolate* isolate = Isolate::Current(); |
| 10030 ASSERT(isolate->object_store()->uint8_array_class() != Class::null()); |
10181 const Class& cls = | 10031 const Class& cls = |
10182 Class::Handle(isolate->object_store()->uint8_array_class()); | 10032 Class::Handle(isolate->object_store()->uint8_array_class()); |
10183 return NewImpl<Uint8Array, RawUint8Array>(cls, len, space); | 10033 return NewImpl<Uint8Array, RawUint8Array>(cls, len, space); |
10184 } | 10034 } |
10185 | 10035 |
10186 | 10036 |
10187 RawUint8Array* Uint8Array::New(const uint8_t* data, | 10037 RawUint8Array* Uint8Array::New(const uint8_t* data, |
10188 intptr_t len, | 10038 intptr_t len, |
10189 Heap::Space space) { | 10039 Heap::Space space) { |
10190 Isolate* isolate = Isolate::Current(); | 10040 Isolate* isolate = Isolate::Current(); |
| 10041 ASSERT(isolate->object_store()->uint8_array_class() != Class::null()); |
10191 const Class& cls = | 10042 const Class& cls = |
10192 Class::Handle(isolate->object_store()->uint8_array_class()); | 10043 Class::Handle(isolate->object_store()->uint8_array_class()); |
10193 return NewImpl<Uint8Array, RawUint8Array>(cls, data, len, space); | 10044 return NewImpl<Uint8Array, RawUint8Array>(cls, data, len, space); |
10194 } | 10045 } |
10195 | 10046 |
10196 | 10047 |
10197 const char* Uint8Array::ToCString() const { | 10048 const char* Uint8Array::ToCString() const { |
10198 return "_Uint8Array"; | 10049 return "_Uint8Array"; |
10199 } | 10050 } |
10200 | 10051 |
10201 | 10052 |
10202 RawInt16Array* Int16Array::New(intptr_t len, Heap::Space space) { | 10053 RawInt16Array* Int16Array::New(intptr_t len, Heap::Space space) { |
10203 Isolate* isolate = Isolate::Current(); | 10054 Isolate* isolate = Isolate::Current(); |
| 10055 ASSERT(isolate->object_store()->int16_array_class() != Class::null()); |
10204 const Class& cls = | 10056 const Class& cls = |
10205 Class::Handle(isolate->object_store()->int16_array_class()); | 10057 Class::Handle(isolate->object_store()->int16_array_class()); |
10206 return NewImpl<Int16Array, RawInt16Array>(cls, len, space); | 10058 return NewImpl<Int16Array, RawInt16Array>(cls, len, space); |
10207 } | 10059 } |
10208 | 10060 |
10209 | 10061 |
10210 RawInt16Array* Int16Array::New(const int16_t* data, | 10062 RawInt16Array* Int16Array::New(const int16_t* data, |
10211 intptr_t len, | 10063 intptr_t len, |
10212 Heap::Space space) { | 10064 Heap::Space space) { |
10213 Isolate* isolate = Isolate::Current(); | 10065 Isolate* isolate = Isolate::Current(); |
| 10066 ASSERT(isolate->object_store()->int16_array_class() != Class::null()); |
10214 const Class& cls = | 10067 const Class& cls = |
10215 Class::Handle(isolate->object_store()->int16_array_class()); | 10068 Class::Handle(isolate->object_store()->int16_array_class()); |
10216 return NewImpl<Int16Array, RawInt16Array>(cls, data, len, space); | 10069 return NewImpl<Int16Array, RawInt16Array>(cls, data, len, space); |
10217 } | 10070 } |
10218 | 10071 |
10219 | 10072 |
10220 const char* Int16Array::ToCString() const { | 10073 const char* Int16Array::ToCString() const { |
10221 return "_Int16Array"; | 10074 return "_Int16Array"; |
10222 } | 10075 } |
10223 | 10076 |
10224 | 10077 |
10225 RawUint16Array* Uint16Array::New(intptr_t len, Heap::Space space) { | 10078 RawUint16Array* Uint16Array::New(intptr_t len, Heap::Space space) { |
10226 Isolate* isolate = Isolate::Current(); | 10079 Isolate* isolate = Isolate::Current(); |
| 10080 ASSERT(isolate->object_store()->uint16_array_class() != Class::null()); |
10227 const Class& cls = | 10081 const Class& cls = |
10228 Class::Handle(isolate->object_store()->uint16_array_class()); | 10082 Class::Handle(isolate->object_store()->uint16_array_class()); |
10229 return NewImpl<Uint16Array, RawUint16Array>(cls, len, space); | 10083 return NewImpl<Uint16Array, RawUint16Array>(cls, len, space); |
10230 } | 10084 } |
10231 | 10085 |
10232 | 10086 |
10233 RawUint16Array* Uint16Array::New(const uint16_t* data, | 10087 RawUint16Array* Uint16Array::New(const uint16_t* data, |
10234 intptr_t len, | 10088 intptr_t len, |
10235 Heap::Space space) { | 10089 Heap::Space space) { |
10236 Isolate* isolate = Isolate::Current(); | 10090 Isolate* isolate = Isolate::Current(); |
| 10091 ASSERT(isolate->object_store()->uint16_array_class() != Class::null()); |
10237 const Class& cls = | 10092 const Class& cls = |
10238 Class::Handle(isolate->object_store()->uint16_array_class()); | 10093 Class::Handle(isolate->object_store()->uint16_array_class()); |
10239 return NewImpl<Uint16Array, RawUint16Array>(cls, data, len, space); | 10094 return NewImpl<Uint16Array, RawUint16Array>(cls, data, len, space); |
10240 } | 10095 } |
10241 | 10096 |
10242 | 10097 |
10243 const char* Uint16Array::ToCString() const { | 10098 const char* Uint16Array::ToCString() const { |
10244 return "_Uint16Array"; | 10099 return "_Uint16Array"; |
10245 } | 10100 } |
10246 | 10101 |
10247 | 10102 |
10248 RawInt32Array* Int32Array::New(intptr_t len, Heap::Space space) { | 10103 RawInt32Array* Int32Array::New(intptr_t len, Heap::Space space) { |
10249 Isolate* isolate = Isolate::Current(); | 10104 Isolate* isolate = Isolate::Current(); |
| 10105 ASSERT(isolate->object_store()->int32_array_class() != Class::null()); |
10250 const Class& cls = | 10106 const Class& cls = |
10251 Class::Handle(isolate->object_store()->int32_array_class()); | 10107 Class::Handle(isolate->object_store()->int32_array_class()); |
10252 return NewImpl<Int32Array, RawInt32Array>(cls, len, space); | 10108 return NewImpl<Int32Array, RawInt32Array>(cls, len, space); |
10253 } | 10109 } |
10254 | 10110 |
10255 | 10111 |
10256 RawInt32Array* Int32Array::New(const int32_t* data, | 10112 RawInt32Array* Int32Array::New(const int32_t* data, |
10257 intptr_t len, | 10113 intptr_t len, |
10258 Heap::Space space) { | 10114 Heap::Space space) { |
10259 Isolate* isolate = Isolate::Current(); | 10115 Isolate* isolate = Isolate::Current(); |
| 10116 ASSERT(isolate->object_store()->int32_array_class() != Class::null()); |
10260 const Class& cls = | 10117 const Class& cls = |
10261 Class::Handle(isolate->object_store()->int32_array_class()); | 10118 Class::Handle(isolate->object_store()->int32_array_class()); |
10262 return NewImpl<Int32Array, RawInt32Array>(cls, data, len, space); | 10119 return NewImpl<Int32Array, RawInt32Array>(cls, data, len, space); |
10263 } | 10120 } |
10264 | 10121 |
10265 | 10122 |
10266 const char* Int32Array::ToCString() const { | 10123 const char* Int32Array::ToCString() const { |
10267 return "_Int32Array"; | 10124 return "_Int32Array"; |
10268 } | 10125 } |
10269 | 10126 |
10270 | 10127 |
10271 RawUint32Array* Uint32Array::New(intptr_t len, Heap::Space space) { | 10128 RawUint32Array* Uint32Array::New(intptr_t len, Heap::Space space) { |
10272 Isolate* isolate = Isolate::Current(); | 10129 Isolate* isolate = Isolate::Current(); |
| 10130 ASSERT(isolate->object_store()->uint32_array_class() != Class::null()); |
10273 const Class& cls = | 10131 const Class& cls = |
10274 Class::Handle(isolate->object_store()->uint32_array_class()); | 10132 Class::Handle(isolate->object_store()->uint32_array_class()); |
10275 return NewImpl<Uint32Array, RawUint32Array>(cls, len, space); | 10133 return NewImpl<Uint32Array, RawUint32Array>(cls, len, space); |
10276 } | 10134 } |
10277 | 10135 |
10278 | 10136 |
10279 RawUint32Array* Uint32Array::New(const uint32_t* data, | 10137 RawUint32Array* Uint32Array::New(const uint32_t* data, |
10280 intptr_t len, | 10138 intptr_t len, |
10281 Heap::Space space) { | 10139 Heap::Space space) { |
10282 Isolate* isolate = Isolate::Current(); | 10140 Isolate* isolate = Isolate::Current(); |
| 10141 ASSERT(isolate->object_store()->uint32_array_class() != Class::null()); |
10283 const Class& cls = | 10142 const Class& cls = |
10284 Class::Handle(isolate->object_store()->uint32_array_class()); | 10143 Class::Handle(isolate->object_store()->uint32_array_class()); |
10285 return NewImpl<Uint32Array, RawUint32Array>(cls, data, len, space); | 10144 return NewImpl<Uint32Array, RawUint32Array>(cls, data, len, space); |
10286 } | 10145 } |
10287 | 10146 |
10288 | 10147 |
10289 const char* Uint32Array::ToCString() const { | 10148 const char* Uint32Array::ToCString() const { |
10290 return "_Uint32Array"; | 10149 return "_Uint32Array"; |
10291 } | 10150 } |
10292 | 10151 |
10293 | 10152 |
10294 RawInt64Array* Int64Array::New(intptr_t len, Heap::Space space) { | 10153 RawInt64Array* Int64Array::New(intptr_t len, Heap::Space space) { |
10295 Isolate* isolate = Isolate::Current(); | 10154 Isolate* isolate = Isolate::Current(); |
| 10155 ASSERT(isolate->object_store()->int64_array_class() != Class::null()); |
10296 const Class& cls = | 10156 const Class& cls = |
10297 Class::Handle(isolate->object_store()->int64_array_class()); | 10157 Class::Handle(isolate->object_store()->int64_array_class()); |
10298 return NewImpl<Int64Array, RawInt64Array>(cls, len, space); | 10158 return NewImpl<Int64Array, RawInt64Array>(cls, len, space); |
10299 } | 10159 } |
10300 | 10160 |
10301 | 10161 |
10302 RawInt64Array* Int64Array::New(const int64_t* data, | 10162 RawInt64Array* Int64Array::New(const int64_t* data, |
10303 intptr_t len, | 10163 intptr_t len, |
10304 Heap::Space space) { | 10164 Heap::Space space) { |
10305 Isolate* isolate = Isolate::Current(); | 10165 Isolate* isolate = Isolate::Current(); |
| 10166 ASSERT(isolate->object_store()->int64_array_class() != Class::null()); |
10306 const Class& cls = | 10167 const Class& cls = |
10307 Class::Handle(isolate->object_store()->int64_array_class()); | 10168 Class::Handle(isolate->object_store()->int64_array_class()); |
10308 return NewImpl<Int64Array, RawInt64Array>(cls, data, len, space); | 10169 return NewImpl<Int64Array, RawInt64Array>(cls, data, len, space); |
10309 } | 10170 } |
10310 | 10171 |
10311 | 10172 |
10312 const char* Int64Array::ToCString() const { | 10173 const char* Int64Array::ToCString() const { |
10313 return "_Int64Array"; | 10174 return "_Int64Array"; |
10314 } | 10175 } |
10315 | 10176 |
10316 | 10177 |
10317 RawUint64Array* Uint64Array::New(intptr_t len, Heap::Space space) { | 10178 RawUint64Array* Uint64Array::New(intptr_t len, Heap::Space space) { |
10318 Isolate* isolate = Isolate::Current(); | 10179 Isolate* isolate = Isolate::Current(); |
| 10180 ASSERT(isolate->object_store()->uint64_array_class() != Class::null()); |
10319 const Class& cls = | 10181 const Class& cls = |
10320 Class::Handle(isolate->object_store()->uint64_array_class()); | 10182 Class::Handle(isolate->object_store()->uint64_array_class()); |
10321 return NewImpl<Uint64Array, RawUint64Array>(cls, len, space); | 10183 return NewImpl<Uint64Array, RawUint64Array>(cls, len, space); |
10322 } | 10184 } |
10323 | 10185 |
10324 | 10186 |
10325 RawUint64Array* Uint64Array::New(const uint64_t* data, | 10187 RawUint64Array* Uint64Array::New(const uint64_t* data, |
10326 intptr_t len, | 10188 intptr_t len, |
10327 Heap::Space space) { | 10189 Heap::Space space) { |
10328 Isolate* isolate = Isolate::Current(); | 10190 Isolate* isolate = Isolate::Current(); |
| 10191 ASSERT(isolate->object_store()->uint64_array_class() != Class::null()); |
10329 const Class& cls = | 10192 const Class& cls = |
10330 Class::Handle(isolate->object_store()->uint64_array_class()); | 10193 Class::Handle(isolate->object_store()->uint64_array_class()); |
10331 return NewImpl<Uint64Array, RawUint64Array>(cls, data, len, space); | 10194 return NewImpl<Uint64Array, RawUint64Array>(cls, data, len, space); |
10332 } | 10195 } |
10333 | 10196 |
10334 | 10197 |
10335 const char* Uint64Array::ToCString() const { | 10198 const char* Uint64Array::ToCString() const { |
10336 return "_Uint64Array"; | 10199 return "_Uint64Array"; |
10337 } | 10200 } |
10338 | 10201 |
10339 | 10202 |
10340 RawFloat32Array* Float32Array::New(intptr_t len, Heap::Space space) { | 10203 RawFloat32Array* Float32Array::New(intptr_t len, Heap::Space space) { |
10341 Isolate* isolate = Isolate::Current(); | 10204 Isolate* isolate = Isolate::Current(); |
| 10205 ASSERT(isolate->object_store()->float32_array_class() != Class::null()); |
10342 const Class& cls = | 10206 const Class& cls = |
10343 Class::Handle(isolate->object_store()->float32_array_class()); | 10207 Class::Handle(isolate->object_store()->float32_array_class()); |
10344 return NewImpl<Float32Array, RawFloat32Array>(cls, len, space); | 10208 return NewImpl<Float32Array, RawFloat32Array>(cls, len, space); |
10345 } | 10209 } |
10346 | 10210 |
10347 | 10211 |
10348 RawFloat32Array* Float32Array::New(const float* data, | 10212 RawFloat32Array* Float32Array::New(const float* data, |
10349 intptr_t len, | 10213 intptr_t len, |
10350 Heap::Space space) { | 10214 Heap::Space space) { |
10351 Isolate* isolate = Isolate::Current(); | 10215 Isolate* isolate = Isolate::Current(); |
| 10216 ASSERT(isolate->object_store()->float32_array_class() != Class::null()); |
10352 const Class& cls = | 10217 const Class& cls = |
10353 Class::Handle(isolate->object_store()->float32_array_class()); | 10218 Class::Handle(isolate->object_store()->float32_array_class()); |
10354 return NewImpl<Float32Array, RawFloat32Array>(cls, data, len, space); | 10219 return NewImpl<Float32Array, RawFloat32Array>(cls, data, len, space); |
10355 } | 10220 } |
10356 | 10221 |
10357 | 10222 |
10358 const char* Float32Array::ToCString() const { | 10223 const char* Float32Array::ToCString() const { |
10359 return "_Float32Array"; | 10224 return "_Float32Array"; |
10360 } | 10225 } |
10361 | 10226 |
10362 | 10227 |
10363 RawFloat64Array* Float64Array::New(intptr_t len, Heap::Space space) { | 10228 RawFloat64Array* Float64Array::New(intptr_t len, Heap::Space space) { |
10364 Isolate* isolate = Isolate::Current(); | 10229 Isolate* isolate = Isolate::Current(); |
| 10230 ASSERT(isolate->object_store()->float64_array_class() != Class::null()); |
10365 const Class& cls = | 10231 const Class& cls = |
10366 Class::Handle(isolate->object_store()->float64_array_class()); | 10232 Class::Handle(isolate->object_store()->float64_array_class()); |
10367 return NewImpl<Float64Array, RawFloat64Array>(cls, len, space); | 10233 return NewImpl<Float64Array, RawFloat64Array>(cls, len, space); |
10368 } | 10234 } |
10369 | 10235 |
10370 | 10236 |
10371 RawFloat64Array* Float64Array::New(const double* data, | 10237 RawFloat64Array* Float64Array::New(const double* data, |
10372 intptr_t len, | 10238 intptr_t len, |
10373 Heap::Space space) { | 10239 Heap::Space space) { |
10374 Isolate* isolate = Isolate::Current(); | 10240 Isolate* isolate = Isolate::Current(); |
| 10241 ASSERT(isolate->object_store()->float64_array_class() != Class::null()); |
10375 const Class& cls = | 10242 const Class& cls = |
10376 Class::Handle(isolate->object_store()->float64_array_class()); | 10243 Class::Handle(isolate->object_store()->float64_array_class()); |
10377 return NewImpl<Float64Array, RawFloat64Array>(cls, data, len, space); | 10244 return NewImpl<Float64Array, RawFloat64Array>(cls, data, len, space); |
10378 } | 10245 } |
10379 | 10246 |
10380 | 10247 |
10381 const char* Float64Array::ToCString() const { | 10248 const char* Float64Array::ToCString() const { |
10382 return "_Float64Array"; | 10249 return "_Float64Array"; |
10383 } | 10250 } |
10384 | 10251 |
10385 | 10252 |
10386 RawExternalInt8Array* ExternalInt8Array::New(int8_t* data, | 10253 RawExternalInt8Array* ExternalInt8Array::New(int8_t* data, |
10387 intptr_t len, | 10254 intptr_t len, |
10388 void* peer, | 10255 void* peer, |
10389 Dart_PeerFinalizer callback, | 10256 Dart_PeerFinalizer callback, |
10390 Heap::Space space) { | 10257 Heap::Space space) { |
10391 Isolate* isolate = Isolate::Current(); | 10258 Isolate* isolate = Isolate::Current(); |
| 10259 ASSERT(isolate->object_store()->external_int8_array_class() != Class::null()); |
10392 const Class& cls = | 10260 const Class& cls = |
10393 Class::Handle(isolate->object_store()->external_int8_array_class()); | 10261 Class::Handle(isolate->object_store()->external_int8_array_class()); |
10394 return NewExternalImpl<ExternalInt8Array, RawExternalInt8Array>( | 10262 return NewExternalImpl<ExternalInt8Array, RawExternalInt8Array>( |
10395 cls, data, len, peer, callback, space); | 10263 cls, data, len, peer, callback, space); |
10396 } | 10264 } |
10397 | 10265 |
10398 | 10266 |
10399 const char* ExternalInt8Array::ToCString() const { | 10267 const char* ExternalInt8Array::ToCString() const { |
10400 return "_ExternalInt8Array"; | 10268 return "_ExternalInt8Array"; |
10401 } | 10269 } |
10402 | 10270 |
10403 | 10271 |
10404 RawExternalUint8Array* ExternalUint8Array::New(uint8_t* data, | 10272 RawExternalUint8Array* ExternalUint8Array::New(uint8_t* data, |
10405 intptr_t len, | 10273 intptr_t len, |
10406 void* peer, | 10274 void* peer, |
10407 Dart_PeerFinalizer callback, | 10275 Dart_PeerFinalizer callback, |
10408 Heap::Space space) { | 10276 Heap::Space space) { |
10409 Isolate* isolate = Isolate::Current(); | 10277 Isolate* isolate = Isolate::Current(); |
| 10278 ASSERT(isolate->object_store()->external_uint8_array_class() != |
| 10279 Class::null()); |
10410 const Class& cls = | 10280 const Class& cls = |
10411 Class::Handle(isolate->object_store()->external_uint8_array_class()); | 10281 Class::Handle(isolate->object_store()->external_uint8_array_class()); |
10412 return NewExternalImpl<ExternalUint8Array, RawExternalUint8Array>( | 10282 return NewExternalImpl<ExternalUint8Array, RawExternalUint8Array>( |
10413 cls, data, len, peer, callback, space); | 10283 cls, data, len, peer, callback, space); |
10414 } | 10284 } |
10415 | 10285 |
10416 | 10286 |
10417 const char* ExternalUint8Array::ToCString() const { | 10287 const char* ExternalUint8Array::ToCString() const { |
10418 return "_ExternalUint8Array"; | 10288 return "_ExternalUint8Array"; |
10419 } | 10289 } |
10420 | 10290 |
10421 | 10291 |
10422 RawExternalInt16Array* ExternalInt16Array::New(int16_t* data, | 10292 RawExternalInt16Array* ExternalInt16Array::New(int16_t* data, |
10423 intptr_t len, | 10293 intptr_t len, |
10424 void* peer, | 10294 void* peer, |
10425 Dart_PeerFinalizer callback, | 10295 Dart_PeerFinalizer callback, |
10426 Heap::Space space) { | 10296 Heap::Space space) { |
10427 Isolate* isolate = Isolate::Current(); | 10297 Isolate* isolate = Isolate::Current(); |
| 10298 ASSERT(isolate->object_store()->external_int16_array_class() != |
| 10299 Class::null()); |
10428 const Class& cls = | 10300 const Class& cls = |
10429 Class::Handle(isolate->object_store()->external_int16_array_class()); | 10301 Class::Handle(isolate->object_store()->external_int16_array_class()); |
10430 return NewExternalImpl<ExternalInt16Array, RawExternalInt16Array>( | 10302 return NewExternalImpl<ExternalInt16Array, RawExternalInt16Array>( |
10431 cls, data, len, peer, callback, space); | 10303 cls, data, len, peer, callback, space); |
10432 } | 10304 } |
10433 | 10305 |
10434 | 10306 |
10435 const char* ExternalInt16Array::ToCString() const { | 10307 const char* ExternalInt16Array::ToCString() const { |
10436 return "_ExternalInt16Array"; | 10308 return "_ExternalInt16Array"; |
10437 } | 10309 } |
10438 | 10310 |
10439 | 10311 |
10440 RawExternalUint16Array* ExternalUint16Array::New(uint16_t* data, | 10312 RawExternalUint16Array* ExternalUint16Array::New(uint16_t* data, |
10441 intptr_t len, | 10313 intptr_t len, |
10442 void* peer, | 10314 void* peer, |
10443 Dart_PeerFinalizer callback, | 10315 Dart_PeerFinalizer callback, |
10444 Heap::Space space) { | 10316 Heap::Space space) { |
10445 Isolate* isolate = Isolate::Current(); | 10317 Isolate* isolate = Isolate::Current(); |
| 10318 ASSERT(isolate->object_store()->external_uint16_array_class() != |
| 10319 Class::null()); |
10446 const Class& cls = | 10320 const Class& cls = |
10447 Class::Handle(isolate->object_store()->external_uint16_array_class()); | 10321 Class::Handle(isolate->object_store()->external_uint16_array_class()); |
10448 return NewExternalImpl<ExternalUint16Array, RawExternalUint16Array>( | 10322 return NewExternalImpl<ExternalUint16Array, RawExternalUint16Array>( |
10449 cls, data, len, peer, callback, space); | 10323 cls, data, len, peer, callback, space); |
10450 } | 10324 } |
10451 | 10325 |
10452 | 10326 |
10453 const char* ExternalUint16Array::ToCString() const { | 10327 const char* ExternalUint16Array::ToCString() const { |
10454 return "_ExternalUint16Array"; | 10328 return "_ExternalUint16Array"; |
10455 } | 10329 } |
10456 | 10330 |
10457 | 10331 |
10458 RawExternalInt32Array* ExternalInt32Array::New(int32_t* data, | 10332 RawExternalInt32Array* ExternalInt32Array::New(int32_t* data, |
10459 intptr_t len, | 10333 intptr_t len, |
10460 void* peer, | 10334 void* peer, |
10461 Dart_PeerFinalizer callback, | 10335 Dart_PeerFinalizer callback, |
10462 Heap::Space space) { | 10336 Heap::Space space) { |
10463 Isolate* isolate = Isolate::Current(); | 10337 Isolate* isolate = Isolate::Current(); |
| 10338 ASSERT(isolate->object_store()->external_int32_array_class() != |
| 10339 Class::null()); |
10464 const Class& cls = | 10340 const Class& cls = |
10465 Class::Handle(isolate->object_store()->external_int32_array_class()); | 10341 Class::Handle(isolate->object_store()->external_int32_array_class()); |
10466 return NewExternalImpl<ExternalInt32Array, RawExternalInt32Array>( | 10342 return NewExternalImpl<ExternalInt32Array, RawExternalInt32Array>( |
10467 cls, data, len, peer, callback, space); | 10343 cls, data, len, peer, callback, space); |
10468 } | 10344 } |
10469 | 10345 |
10470 | 10346 |
10471 const char* ExternalInt32Array::ToCString() const { | 10347 const char* ExternalInt32Array::ToCString() const { |
10472 return "_ExternalInt32Array"; | 10348 return "_ExternalInt32Array"; |
10473 } | 10349 } |
10474 | 10350 |
10475 | 10351 |
10476 RawExternalUint32Array* ExternalUint32Array::New(uint32_t* data, | 10352 RawExternalUint32Array* ExternalUint32Array::New(uint32_t* data, |
10477 intptr_t len, | 10353 intptr_t len, |
10478 void* peer, | 10354 void* peer, |
10479 Dart_PeerFinalizer callback, | 10355 Dart_PeerFinalizer callback, |
10480 Heap::Space space) { | 10356 Heap::Space space) { |
10481 Isolate* isolate = Isolate::Current(); | 10357 Isolate* isolate = Isolate::Current(); |
| 10358 ASSERT(isolate->object_store()->external_uint32_array_class() != |
| 10359 Class::null()); |
10482 const Class& cls = | 10360 const Class& cls = |
10483 Class::Handle(isolate->object_store()->external_uint32_array_class()); | 10361 Class::Handle(isolate->object_store()->external_uint32_array_class()); |
10484 return NewExternalImpl<ExternalUint32Array, RawExternalUint32Array>( | 10362 return NewExternalImpl<ExternalUint32Array, RawExternalUint32Array>( |
10485 cls, data, len, peer, callback, space); | 10363 cls, data, len, peer, callback, space); |
10486 } | 10364 } |
10487 | 10365 |
10488 | 10366 |
10489 const char* ExternalUint32Array::ToCString() const { | 10367 const char* ExternalUint32Array::ToCString() const { |
10490 return "_ExternalUint32Array"; | 10368 return "_ExternalUint32Array"; |
10491 } | 10369 } |
10492 | 10370 |
10493 | 10371 |
10494 RawExternalInt64Array* ExternalInt64Array::New(int64_t* data, | 10372 RawExternalInt64Array* ExternalInt64Array::New(int64_t* data, |
10495 intptr_t len, | 10373 intptr_t len, |
10496 void* peer, | 10374 void* peer, |
10497 Dart_PeerFinalizer callback, | 10375 Dart_PeerFinalizer callback, |
10498 Heap::Space space) { | 10376 Heap::Space space) { |
10499 Isolate* isolate = Isolate::Current(); | 10377 Isolate* isolate = Isolate::Current(); |
| 10378 ASSERT(isolate->object_store()->external_int64_array_class() != |
| 10379 Class::null()); |
10500 const Class& cls = | 10380 const Class& cls = |
10501 Class::Handle(isolate->object_store()->external_int64_array_class()); | 10381 Class::Handle(isolate->object_store()->external_int64_array_class()); |
10502 return NewExternalImpl<ExternalInt64Array, RawExternalInt64Array>( | 10382 return NewExternalImpl<ExternalInt64Array, RawExternalInt64Array>( |
10503 cls, data, len, peer, callback, space); | 10383 cls, data, len, peer, callback, space); |
10504 } | 10384 } |
10505 | 10385 |
10506 | 10386 |
10507 const char* ExternalInt64Array::ToCString() const { | 10387 const char* ExternalInt64Array::ToCString() const { |
10508 return "_ExternalInt64Array"; | 10388 return "_ExternalInt64Array"; |
10509 } | 10389 } |
10510 | 10390 |
10511 | 10391 |
10512 RawExternalUint64Array* ExternalUint64Array::New(uint64_t* data, | 10392 RawExternalUint64Array* ExternalUint64Array::New(uint64_t* data, |
10513 intptr_t len, | 10393 intptr_t len, |
10514 void* peer, | 10394 void* peer, |
10515 Dart_PeerFinalizer callback, | 10395 Dart_PeerFinalizer callback, |
10516 Heap::Space space) { | 10396 Heap::Space space) { |
10517 Isolate* isolate = Isolate::Current(); | 10397 Isolate* isolate = Isolate::Current(); |
| 10398 ASSERT(isolate->object_store()->external_uint64_array_class() != |
| 10399 Class::null()); |
10518 const Class& cls = | 10400 const Class& cls = |
10519 Class::Handle(isolate->object_store()->external_uint64_array_class()); | 10401 Class::Handle(isolate->object_store()->external_uint64_array_class()); |
10520 return NewExternalImpl<ExternalUint64Array, RawExternalUint64Array>( | 10402 return NewExternalImpl<ExternalUint64Array, RawExternalUint64Array>( |
10521 cls, data, len, peer, callback, space); | 10403 cls, data, len, peer, callback, space); |
10522 } | 10404 } |
10523 | 10405 |
10524 | 10406 |
10525 const char* ExternalUint64Array::ToCString() const { | 10407 const char* ExternalUint64Array::ToCString() const { |
10526 return "_ExternalUint64Array"; | 10408 return "_ExternalUint64Array"; |
10527 } | 10409 } |
10528 | 10410 |
10529 | 10411 |
10530 RawExternalFloat32Array* ExternalFloat32Array::New(float* data, | 10412 RawExternalFloat32Array* ExternalFloat32Array::New(float* data, |
10531 intptr_t len, | 10413 intptr_t len, |
10532 void* peer, | 10414 void* peer, |
10533 Dart_PeerFinalizer callback, | 10415 Dart_PeerFinalizer callback, |
10534 Heap::Space space) { | 10416 Heap::Space space) { |
10535 Isolate* isolate = Isolate::Current(); | 10417 Isolate* isolate = Isolate::Current(); |
| 10418 ASSERT(isolate->object_store()->external_float32_array_class() != |
| 10419 Class::null()); |
10536 const Class& cls = | 10420 const Class& cls = |
10537 Class::Handle(isolate->object_store()->external_float32_array_class()); | 10421 Class::Handle(isolate->object_store()->external_float32_array_class()); |
10538 return NewExternalImpl<ExternalFloat32Array, RawExternalFloat32Array>( | 10422 return NewExternalImpl<ExternalFloat32Array, RawExternalFloat32Array>( |
10539 cls, data, len, peer, callback, space); | 10423 cls, data, len, peer, callback, space); |
10540 } | 10424 } |
10541 | 10425 |
10542 | 10426 |
10543 const char* ExternalFloat32Array::ToCString() const { | 10427 const char* ExternalFloat32Array::ToCString() const { |
10544 return "_ExternalFloat32Array"; | 10428 return "_ExternalFloat32Array"; |
10545 } | 10429 } |
10546 | 10430 |
10547 | 10431 |
10548 RawExternalFloat64Array* ExternalFloat64Array::New(double* data, | 10432 RawExternalFloat64Array* ExternalFloat64Array::New(double* data, |
10549 intptr_t len, | 10433 intptr_t len, |
10550 void* peer, | 10434 void* peer, |
10551 Dart_PeerFinalizer callback, | 10435 Dart_PeerFinalizer callback, |
10552 Heap::Space space) { | 10436 Heap::Space space) { |
10553 Isolate* isolate = Isolate::Current(); | 10437 Isolate* isolate = Isolate::Current(); |
| 10438 ASSERT(isolate->object_store()->external_float64_array_class() != |
| 10439 Class::null()); |
10554 const Class& cls = | 10440 const Class& cls = |
10555 Class::Handle(isolate->object_store()->external_float64_array_class()); | 10441 Class::Handle(isolate->object_store()->external_float64_array_class()); |
10556 return NewExternalImpl<ExternalFloat64Array, RawExternalFloat64Array>( | 10442 return NewExternalImpl<ExternalFloat64Array, RawExternalFloat64Array>( |
10557 cls, data, len, peer, callback, space); | 10443 cls, data, len, peer, callback, space); |
10558 } | 10444 } |
10559 | 10445 |
10560 | 10446 |
10561 const char* ExternalFloat64Array::ToCString() const { | 10447 const char* ExternalFloat64Array::ToCString() const { |
10562 return "_ExternalFloat64Array"; | 10448 return "_ExternalFloat64Array"; |
10563 } | 10449 } |
10564 | 10450 |
10565 | 10451 |
10566 | 10452 |
10567 RawClosure* Closure::New(const Function& function, | 10453 RawClosure* Closure::New(const Function& function, |
10568 const Context& context, | 10454 const Context& context, |
10569 Heap::Space space) { | 10455 Heap::Space space) { |
10570 Isolate* isolate = Isolate::Current(); | 10456 Isolate* isolate = Isolate::Current(); |
10571 ASSERT(context.isolate() == isolate); | 10457 ASSERT(context.isolate() == isolate); |
10572 | 10458 |
10573 const Class& cls = Class::Handle(function.signature_class()); | 10459 const Class& cls = Class::Handle(function.signature_class()); |
10574 Closure& result = Closure::Handle(); | 10460 Closure& result = Closure::Handle(); |
10575 { | 10461 { |
10576 RawObject* raw = Object::Allocate(cls, Closure::InstanceSize(), space); | 10462 RawObject* raw = Object::Allocate(cls.id(), Closure::InstanceSize(), space); |
10577 NoGCScope no_gc; | 10463 NoGCScope no_gc; |
10578 result ^= raw; | 10464 result ^= raw; |
10579 } | 10465 } |
10580 result.set_function(function); | 10466 result.set_function(function); |
10581 result.set_context(context); | 10467 result.set_context(context); |
10582 return result.raw(); | 10468 return result.raw(); |
10583 } | 10469 } |
10584 | 10470 |
10585 | 10471 |
10586 void Closure::set_context(const Context& value) const { | 10472 void Closure::set_context(const Context& value) const { |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10664 function_array.SetAt((index + i), function); | 10550 function_array.SetAt((index + i), function); |
10665 code_array.SetAt((index + i), code); | 10551 code_array.SetAt((index + i), code); |
10666 pc_offset = Smi::New(frame_pcs[i] - code.EntryPoint()); | 10552 pc_offset = Smi::New(frame_pcs[i] - code.EntryPoint()); |
10667 pc_offset_array.SetAt((index + i), pc_offset); | 10553 pc_offset_array.SetAt((index + i), pc_offset); |
10668 } | 10554 } |
10669 } | 10555 } |
10670 | 10556 |
10671 | 10557 |
10672 RawStacktrace* Stacktrace::New(const GrowableArray<uword>& stack_frame_pcs, | 10558 RawStacktrace* Stacktrace::New(const GrowableArray<uword>& stack_frame_pcs, |
10673 Heap::Space space) { | 10559 Heap::Space space) { |
10674 const Class& cls = Class::Handle( | 10560 ASSERT(Isolate::Current()->object_store()->stacktrace_class() != |
10675 Isolate::Current()->object_store()->stacktrace_class()); | 10561 Class::null()); |
10676 Stacktrace& result = Stacktrace::Handle(); | 10562 Stacktrace& result = Stacktrace::Handle(); |
10677 { | 10563 { |
10678 RawObject* raw = Object::Allocate(cls, | 10564 RawObject* raw = Object::Allocate(Stacktrace::kInstanceKind, |
10679 Stacktrace::InstanceSize(), | 10565 Stacktrace::InstanceSize(), |
10680 space); | 10566 space); |
10681 NoGCScope no_gc; | 10567 NoGCScope no_gc; |
10682 result ^= raw; | 10568 result ^= raw; |
10683 } | 10569 } |
10684 intptr_t length = stack_frame_pcs.length(); | 10570 intptr_t length = stack_frame_pcs.length(); |
10685 // Create arrays for the function, code and pc_offset triplet for each frame. | 10571 // Create arrays for the function, code and pc_offset triplet for each frame. |
10686 const Array& function_array = Array::Handle(Array::New(length)); | 10572 const Array& function_array = Array::Handle(Array::New(length)); |
10687 const Array& code_array = Array::Handle(Array::New(length)); | 10573 const Array& code_array = Array::Handle(Array::New(length)); |
10688 const Array& pc_offset_array = Array::Handle(Array::New(length)); | 10574 const Array& pc_offset_array = Array::Handle(Array::New(length)); |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10791 StorePointer(&raw_ptr()->pattern_, pattern.raw()); | 10677 StorePointer(&raw_ptr()->pattern_, pattern.raw()); |
10792 } | 10678 } |
10793 | 10679 |
10794 | 10680 |
10795 void JSRegExp::set_num_bracket_expressions(intptr_t value) const { | 10681 void JSRegExp::set_num_bracket_expressions(intptr_t value) const { |
10796 raw_ptr()->num_bracket_expressions_ = Smi::New(value); | 10682 raw_ptr()->num_bracket_expressions_ = Smi::New(value); |
10797 } | 10683 } |
10798 | 10684 |
10799 | 10685 |
10800 RawJSRegExp* JSRegExp::New(intptr_t len, Heap::Space space) { | 10686 RawJSRegExp* JSRegExp::New(intptr_t len, Heap::Space space) { |
10801 const Class& cls = Class::Handle( | 10687 ASSERT(Isolate::Current()->object_store()->jsregexp_class() != |
10802 Isolate::Current()->object_store()->jsregexp_class()); | 10688 Class::null()); |
10803 JSRegExp& result = JSRegExp::Handle(); | 10689 JSRegExp& result = JSRegExp::Handle(); |
10804 { | 10690 { |
10805 RawObject* raw = Object::Allocate(cls, | 10691 RawObject* raw = Object::Allocate(JSRegExp::kInstanceKind, |
10806 JSRegExp::InstanceSize(len), | 10692 JSRegExp::InstanceSize(len), |
10807 space); | 10693 space); |
10808 NoGCScope no_gc; | 10694 NoGCScope no_gc; |
10809 result ^= raw; | 10695 result ^= raw; |
10810 result.set_type(kUnitialized); | 10696 result.set_type(kUnitialized); |
10811 result.set_flags(0); | 10697 result.set_flags(0); |
10812 result.SetLength(len); | 10698 result.SetLength(len); |
10813 } | 10699 } |
10814 return result.raw(); | 10700 return result.raw(); |
10815 } | 10701 } |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10875 const String& str = String::Handle(pattern()); | 10761 const String& str = String::Handle(pattern()); |
10876 const char* format = "JSRegExp: pattern=%s flags=%s"; | 10762 const char* format = "JSRegExp: pattern=%s flags=%s"; |
10877 intptr_t len = OS::SNPrint(NULL, 0, format, str.ToCString(), Flags()); | 10763 intptr_t len = OS::SNPrint(NULL, 0, format, str.ToCString(), Flags()); |
10878 char* chars = reinterpret_cast<char*>( | 10764 char* chars = reinterpret_cast<char*>( |
10879 Isolate::Current()->current_zone()->Allocate(len + 1)); | 10765 Isolate::Current()->current_zone()->Allocate(len + 1)); |
10880 OS::SNPrint(chars, (len + 1), format, str.ToCString(), Flags()); | 10766 OS::SNPrint(chars, (len + 1), format, str.ToCString(), Flags()); |
10881 return chars; | 10767 return chars; |
10882 } | 10768 } |
10883 | 10769 |
10884 } // namespace dart | 10770 } // namespace dart |
OLD | NEW |