Chromium Code Reviews| 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 "include/dart_api.h" | 7 #include "include/dart_api.h" |
| 8 #include "platform/assert.h" | 8 #include "platform/assert.h" |
| 9 #include "vm/assembler.h" | 9 #include "vm/assembler.h" |
| 10 #include "vm/cpu.h" | 10 #include "vm/cpu.h" |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 87 // These are initialized to a value that will force a illegal memory access if | 87 // These are initialized to a value that will force a illegal memory access if |
| 88 // they are being used. | 88 // they are being used. |
| 89 #if defined(RAW_NULL) | 89 #if defined(RAW_NULL) |
| 90 #error RAW_NULL should not be defined. | 90 #error RAW_NULL should not be defined. |
| 91 #endif | 91 #endif |
| 92 #define RAW_NULL kHeapObjectTag | 92 #define RAW_NULL kHeapObjectTag |
| 93 Object* Object::null_object_ = NULL; | 93 Object* Object::null_object_ = NULL; |
| 94 Array* Object::null_array_ = NULL; | 94 Array* Object::null_array_ = NULL; |
| 95 String* Object::null_string_ = NULL; | 95 String* Object::null_string_ = NULL; |
| 96 Instance* Object::null_instance_ = NULL; | 96 Instance* Object::null_instance_ = NULL; |
| 97 Function* Object::null_function_ = NULL; | |
| 97 TypeArguments* Object::null_type_arguments_ = NULL; | 98 TypeArguments* Object::null_type_arguments_ = NULL; |
| 98 Array* Object::empty_array_ = NULL; | 99 Array* Object::empty_array_ = NULL; |
| 99 Array* Object::zero_array_ = NULL; | 100 Array* Object::zero_array_ = NULL; |
| 100 ObjectPool* Object::empty_object_pool_ = NULL; | 101 ObjectPool* Object::empty_object_pool_ = NULL; |
| 101 PcDescriptors* Object::empty_descriptors_ = NULL; | 102 PcDescriptors* Object::empty_descriptors_ = NULL; |
| 102 LocalVarDescriptors* Object::empty_var_descriptors_ = NULL; | 103 LocalVarDescriptors* Object::empty_var_descriptors_ = NULL; |
| 103 ExceptionHandlers* Object::empty_exception_handlers_ = NULL; | 104 ExceptionHandlers* Object::empty_exception_handlers_ = NULL; |
| 104 Array* Object::extractor_parameter_types_ = NULL; | 105 Array* Object::extractor_parameter_types_ = NULL; |
| 105 Array* Object::extractor_parameter_names_ = NULL; | 106 Array* Object::extractor_parameter_names_ = NULL; |
| 106 Instance* Object::sentinel_ = NULL; | 107 Instance* Object::sentinel_ = NULL; |
| (...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 416 Smi::handle_vtable_ = fake_smi.vtable(); | 417 Smi::handle_vtable_ = fake_smi.vtable(); |
| 417 } | 418 } |
| 418 | 419 |
| 419 Heap* heap = isolate->heap(); | 420 Heap* heap = isolate->heap(); |
| 420 | 421 |
| 421 // Allocate the read only object handles here. | 422 // Allocate the read only object handles here. |
| 422 null_object_ = Object::ReadOnlyHandle(); | 423 null_object_ = Object::ReadOnlyHandle(); |
| 423 null_array_ = Array::ReadOnlyHandle(); | 424 null_array_ = Array::ReadOnlyHandle(); |
| 424 null_string_ = String::ReadOnlyHandle(); | 425 null_string_ = String::ReadOnlyHandle(); |
| 425 null_instance_ = Instance::ReadOnlyHandle(); | 426 null_instance_ = Instance::ReadOnlyHandle(); |
| 427 null_function_ = Function::ReadOnlyHandle(); | |
| 426 null_type_arguments_ = TypeArguments::ReadOnlyHandle(); | 428 null_type_arguments_ = TypeArguments::ReadOnlyHandle(); |
| 427 empty_array_ = Array::ReadOnlyHandle(); | 429 empty_array_ = Array::ReadOnlyHandle(); |
| 428 zero_array_ = Array::ReadOnlyHandle(); | 430 zero_array_ = Array::ReadOnlyHandle(); |
| 429 empty_object_pool_ = ObjectPool::ReadOnlyHandle(); | 431 empty_object_pool_ = ObjectPool::ReadOnlyHandle(); |
| 430 empty_descriptors_ = PcDescriptors::ReadOnlyHandle(); | 432 empty_descriptors_ = PcDescriptors::ReadOnlyHandle(); |
| 431 empty_var_descriptors_ = LocalVarDescriptors::ReadOnlyHandle(); | 433 empty_var_descriptors_ = LocalVarDescriptors::ReadOnlyHandle(); |
| 432 empty_exception_handlers_ = ExceptionHandlers::ReadOnlyHandle(); | 434 empty_exception_handlers_ = ExceptionHandlers::ReadOnlyHandle(); |
| 433 extractor_parameter_types_ = Array::ReadOnlyHandle(); | 435 extractor_parameter_types_ = Array::ReadOnlyHandle(); |
| 434 extractor_parameter_names_ = Array::ReadOnlyHandle(); | 436 extractor_parameter_names_ = Array::ReadOnlyHandle(); |
| 435 sentinel_ = Instance::ReadOnlyHandle(); | 437 sentinel_ = Instance::ReadOnlyHandle(); |
| 436 transition_sentinel_ = Instance::ReadOnlyHandle(); | 438 transition_sentinel_ = Instance::ReadOnlyHandle(); |
| 437 unknown_constant_ = Instance::ReadOnlyHandle(); | 439 unknown_constant_ = Instance::ReadOnlyHandle(); |
| 438 non_constant_ = Instance::ReadOnlyHandle(); | 440 non_constant_ = Instance::ReadOnlyHandle(); |
| 439 bool_true_ = Bool::ReadOnlyHandle(); | 441 bool_true_ = Bool::ReadOnlyHandle(); |
| 440 bool_false_ = Bool::ReadOnlyHandle(); | 442 bool_false_ = Bool::ReadOnlyHandle(); |
| 441 smi_illegal_cid_ = Smi::ReadOnlyHandle(); | 443 smi_illegal_cid_ = Smi::ReadOnlyHandle(); |
| 442 snapshot_writer_error_ = LanguageError::ReadOnlyHandle(); | 444 snapshot_writer_error_ = LanguageError::ReadOnlyHandle(); |
| 443 branch_offset_error_ = LanguageError::ReadOnlyHandle(); | 445 branch_offset_error_ = LanguageError::ReadOnlyHandle(); |
| 444 vm_isolate_snapshot_object_table_ = Array::ReadOnlyHandle(); | 446 vm_isolate_snapshot_object_table_ = Array::ReadOnlyHandle(); |
| 445 | 447 |
| 446 *null_object_ = Object::null(); | 448 *null_object_ = Object::null(); |
| 447 *null_array_ = Array::null(); | 449 *null_array_ = Array::null(); |
| 448 *null_string_ = String::null(); | 450 *null_string_ = String::null(); |
| 449 *null_instance_ = Instance::null(); | 451 *null_instance_ = Instance::null(); |
| 452 *null_function_ = Function::null(); | |
| 450 *null_type_arguments_ = TypeArguments::null(); | 453 *null_type_arguments_ = TypeArguments::null(); |
| 451 | 454 |
| 452 // Initialize the empty and zero array handles to null_ in order to be able to | 455 // Initialize the empty and zero array handles to null_ in order to be able to |
| 453 // check if the empty and zero arrays were allocated (RAW_NULL is not | 456 // check if the empty and zero arrays were allocated (RAW_NULL is not |
| 454 // available). | 457 // available). |
| 455 *empty_array_ = Array::null(); | 458 *empty_array_ = Array::null(); |
| 456 *zero_array_ = Array::null(); | 459 *zero_array_ = Array::null(); |
| 457 | 460 |
| 458 Class& cls = Class::Handle(); | 461 Class& cls = Class::Handle(); |
| 459 | 462 |
| (...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 762 Report::kBailout, | 765 Report::kBailout, |
| 763 Heap::kOld); | 766 Heap::kOld); |
| 764 | 767 |
| 765 ASSERT(!null_object_->IsSmi()); | 768 ASSERT(!null_object_->IsSmi()); |
| 766 ASSERT(!null_array_->IsSmi()); | 769 ASSERT(!null_array_->IsSmi()); |
| 767 ASSERT(null_array_->IsArray()); | 770 ASSERT(null_array_->IsArray()); |
| 768 ASSERT(!null_string_->IsSmi()); | 771 ASSERT(!null_string_->IsSmi()); |
| 769 ASSERT(null_string_->IsString()); | 772 ASSERT(null_string_->IsString()); |
| 770 ASSERT(!null_instance_->IsSmi()); | 773 ASSERT(!null_instance_->IsSmi()); |
| 771 ASSERT(null_instance_->IsInstance()); | 774 ASSERT(null_instance_->IsInstance()); |
| 775 ASSERT(!null_function_->IsSmi()); | |
| 776 ASSERT(null_function_->IsFunction()); | |
| 772 ASSERT(!null_type_arguments_->IsSmi()); | 777 ASSERT(!null_type_arguments_->IsSmi()); |
| 773 ASSERT(null_type_arguments_->IsTypeArguments()); | 778 ASSERT(null_type_arguments_->IsTypeArguments()); |
| 774 ASSERT(!empty_array_->IsSmi()); | 779 ASSERT(!empty_array_->IsSmi()); |
| 775 ASSERT(empty_array_->IsArray()); | 780 ASSERT(empty_array_->IsArray()); |
| 776 ASSERT(!zero_array_->IsSmi()); | 781 ASSERT(!zero_array_->IsSmi()); |
| 777 ASSERT(zero_array_->IsArray()); | 782 ASSERT(zero_array_->IsArray()); |
| 778 ASSERT(!empty_descriptors_->IsSmi()); | 783 ASSERT(!empty_descriptors_->IsSmi()); |
| 779 ASSERT(empty_descriptors_->IsPcDescriptors()); | 784 ASSERT(empty_descriptors_->IsPcDescriptors()); |
| 780 ASSERT(!empty_var_descriptors_->IsSmi()); | 785 ASSERT(!empty_var_descriptors_->IsSmi()); |
| 781 ASSERT(empty_var_descriptors_->IsLocalVarDescriptors()); | 786 ASSERT(empty_var_descriptors_->IsLocalVarDescriptors()); |
| (...skipping 6460 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 7242 } else { | 7247 } else { |
| 7243 result.SetOffset(0); | 7248 result.SetOffset(0); |
| 7244 } | 7249 } |
| 7245 result.set_is_final(is_final); | 7250 result.set_is_final(is_final); |
| 7246 result.set_is_const(is_const); | 7251 result.set_is_const(is_const); |
| 7247 result.set_is_reflectable(is_reflectable); | 7252 result.set_is_reflectable(is_reflectable); |
| 7248 result.set_is_double_initialized(false); | 7253 result.set_is_double_initialized(false); |
| 7249 result.set_owner(owner); | 7254 result.set_owner(owner); |
| 7250 result.set_token_pos(token_pos); | 7255 result.set_token_pos(token_pos); |
| 7251 result.set_has_initializer(false); | 7256 result.set_has_initializer(false); |
| 7252 result.set_initializer(Function::Handle()); | 7257 result.set_initializer(Object::null_function()); |
|
srdjan
2015/08/13 15:49:01
Is this necessary at all, since all data is initia
siva
2015/08/13 16:52:02
That is a good point, not sure why it was there in
| |
| 7253 result.set_is_unboxing_candidate(true); | 7258 result.set_is_unboxing_candidate(true); |
| 7254 result.set_guarded_cid(FLAG_use_field_guards ? kIllegalCid : kDynamicCid); | 7259 result.set_guarded_cid(FLAG_use_field_guards ? kIllegalCid : kDynamicCid); |
| 7255 result.set_is_nullable(FLAG_use_field_guards ? false : true); | 7260 result.set_is_nullable(FLAG_use_field_guards ? false : true); |
| 7256 result.set_guarded_list_length_in_object_offset(Field::kUnknownLengthOffset); | 7261 result.set_guarded_list_length_in_object_offset(Field::kUnknownLengthOffset); |
| 7257 // Presently, we only attempt to remember the list length for final fields. | 7262 // Presently, we only attempt to remember the list length for final fields. |
| 7258 if (is_final && FLAG_use_field_guards) { | 7263 if (is_final && FLAG_use_field_guards) { |
| 7259 result.set_guarded_list_length(Field::kUnknownFixedLength); | 7264 result.set_guarded_list_length(Field::kUnknownFixedLength); |
| 7260 } else { | 7265 } else { |
| 7261 result.set_guarded_list_length(Field::kNoFixedLength); | 7266 result.set_guarded_list_length(Field::kNoFixedLength); |
| 7262 } | 7267 } |
| (...skipping 14105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 21368 return tag_label.ToCString(); | 21373 return tag_label.ToCString(); |
| 21369 } | 21374 } |
| 21370 | 21375 |
| 21371 | 21376 |
| 21372 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { | 21377 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { |
| 21373 Instance::PrintJSONImpl(stream, ref); | 21378 Instance::PrintJSONImpl(stream, ref); |
| 21374 } | 21379 } |
| 21375 | 21380 |
| 21376 | 21381 |
| 21377 } // namespace dart | 21382 } // namespace dart |
| OLD | NEW |