Index: runtime/vm/object.cc |
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc |
index 49f99fc8624d1acca4ede11ff8c87bf825bcc0b0..587ddd51551b0888efe721cb84a216292b9c4f0f 100644 |
--- a/runtime/vm/object.cc |
+++ b/runtime/vm/object.cc |
@@ -117,13 +117,13 @@ Smi* Object::smi_illegal_cid_ = NULL; |
LanguageError* Object::snapshot_writer_error_ = NULL; |
LanguageError* Object::branch_offset_error_ = NULL; |
Array* Object::vm_isolate_snapshot_object_table_ = NULL; |
+Type* Object::dynamic_type_ = NULL; |
+Type* Object::void_type_ = NULL; |
RawObject* Object::null_ = reinterpret_cast<RawObject*>(RAW_NULL); |
RawClass* Object::class_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
RawClass* Object::dynamic_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
RawClass* Object::void_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
-RawType* Object::dynamic_type_ = reinterpret_cast<RawType*>(RAW_NULL); |
-RawType* Object::void_type_ = reinterpret_cast<RawType*>(RAW_NULL); |
RawClass* Object::unresolved_class_class_ = |
reinterpret_cast<RawClass*>(RAW_NULL); |
RawClass* Object::type_arguments_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
@@ -490,6 +490,8 @@ void Object::InitOnce(Isolate* isolate) { |
snapshot_writer_error_ = LanguageError::ReadOnlyHandle(); |
branch_offset_error_ = LanguageError::ReadOnlyHandle(); |
vm_isolate_snapshot_object_table_ = Array::ReadOnlyHandle(); |
+ dynamic_type_ = Type::ReadOnlyHandle(); |
+ void_type_ = Type::ReadOnlyHandle(); |
*null_object_ = Object::null(); |
*null_array_ = Array::null(); |
@@ -803,10 +805,10 @@ void Object::InitOnce(Isolate* isolate) { |
cls.set_is_finalized(); |
cls = dynamic_class_; |
- dynamic_type_ = Type::NewNonParameterizedType(cls); |
+ *dynamic_type_ = Type::NewNonParameterizedType(cls); |
cls = void_class_; |
- void_type_ = Type::NewNonParameterizedType(cls); |
+ *void_type_ = Type::NewNonParameterizedType(cls); |
// Allocate and initialize singleton true and false boolean objects. |
cls = Class::New<Bool>(); |
@@ -901,7 +903,7 @@ void Object::FinalizeVMIsolate(Isolate* isolate) { |
// Allocate the parameter arrays for method extractor types and names. |
*extractor_parameter_types_ = Array::New(1, Heap::kOld); |
- extractor_parameter_types_->SetAt(0, Type::Handle(Type::DynamicType())); |
+ extractor_parameter_types_->SetAt(0, Object::dynamic_type()); |
*extractor_parameter_names_ = Array::New(1, Heap::kOld); |
extractor_parameter_names_->SetAt(0, Symbols::This()); |
@@ -2744,12 +2746,12 @@ RawFunction* Class::CreateInvocationDispatcher(const String& target_name, |
invocation.set_parameter_names(Array::Handle(Array::New(desc.Count(), |
Heap::kOld))); |
// Receiver. |
- invocation.SetParameterTypeAt(0, Type::Handle(Type::DynamicType())); |
+ invocation.SetParameterTypeAt(0, Object::dynamic_type()); |
invocation.SetParameterNameAt(0, Symbols::This()); |
// Remaining positional parameters. |
intptr_t i = 1; |
for (; i < desc.PositionalCount(); i++) { |
- invocation.SetParameterTypeAt(i, Type::Handle(Type::DynamicType())); |
+ invocation.SetParameterTypeAt(i, Object::dynamic_type()); |
char name[64]; |
OS::SNPrint(name, 64, ":p%" Pd, i); |
invocation.SetParameterNameAt(i, String::Handle(Symbols::New(name))); |
@@ -2757,11 +2759,11 @@ RawFunction* Class::CreateInvocationDispatcher(const String& target_name, |
// Named parameters. |
for (; i < desc.Count(); i++) { |
- invocation.SetParameterTypeAt(i, Type::Handle(Type::DynamicType())); |
+ invocation.SetParameterTypeAt(i, Object::dynamic_type()); |
intptr_t index = i - desc.PositionalCount(); |
invocation.SetParameterNameAt(i, String::Handle(desc.NameAt(index))); |
} |
- invocation.set_result_type(Type::Handle(Type::DynamicType())); |
+ invocation.set_result_type(Object::dynamic_type()); |
invocation.set_is_debuggable(false); |
invocation.set_is_visible(false); |
invocation.set_is_reflectable(false); |
@@ -2799,7 +2801,7 @@ RawFunction* Function::CreateMethodExtractor(const String& getter_name) const { |
extractor.SetNumOptionalParameters(0, 0); |
extractor.set_parameter_types(Object::extractor_parameter_types()); |
extractor.set_parameter_names(Object::extractor_parameter_names()); |
- extractor.set_result_type(Type::Handle(Type::DynamicType())); |
+ extractor.set_result_type(Object::dynamic_type()); |
extractor.set_extracted_method_closure(closure_function); |
extractor.set_is_debuggable(false); |
@@ -3082,7 +3084,7 @@ static RawFunction* EvaluateHelper(const Class& cls, |
const Function& func = Function::Handle( |
Function::NewEvalFunction(cls, script, is_static)); |
- func.set_result_type(Type::Handle(Type::DynamicType())); |
+ func.set_result_type(Object::dynamic_type()); |
const intptr_t num_implicit_params = is_static ? 0 : 1; |
func.set_num_fixed_parameters(num_implicit_params + param_names.Length()); |
func.SetNumOptionalParameters(0, true); |
@@ -7687,7 +7689,7 @@ RawInstance* Field::AccessorClosure(bool make_setter) const { |
field_owner, |
this->token_pos()); |
closure_field.SetStaticValue(Instance::Cast(result), true); |
- closure_field.set_type(Type::Handle(Type::DynamicType())); |
+ closure_field.set_type(Object::dynamic_type()); |
field_owner.AddField(closure_field); |
return Instance::RawCast(result.raw()); |
@@ -9304,7 +9306,7 @@ void Library::AddMetadata(const Class& cls, |
false, // is_reflectable |
cls, |
token_pos)); |
- field.set_type(Type::Handle(Type::DynamicType())); |
+ field.set_type(Object::dynamic_type()); |
field.SetStaticValue(Array::empty_array(), true); |
GrowableObjectArray& metadata = |
GrowableObjectArray::Handle(this->metadata()); |
@@ -10817,7 +10819,7 @@ void Namespace::AddMetadata(intptr_t token_pos, const Class& owner_class) { |
false, // is_reflectable |
owner_class, |
token_pos)); |
- field.set_type(Type::Handle(Type::DynamicType())); |
+ field.set_type(Object::dynamic_type()); |
field.SetStaticValue(Array::empty_array(), true); |
set_metadata_field(field); |
owner_class.AddField(field); |
@@ -15523,12 +15525,12 @@ RawType* Type::NullType() { |
RawType* Type::DynamicType() { |
- return Object::dynamic_type(); |
+ return Object::dynamic_type().raw(); |
} |
RawType* Type::VoidType() { |
- return Object::void_type(); |
+ return Object::void_type().raw(); |
} |
@@ -15599,15 +15601,6 @@ RawType* Type::Function() { |
RawType* Type::NewNonParameterizedType(const Class& type_class) { |
ASSERT(type_class.NumTypeArguments() == 0); |
- if (type_class.raw() == Object::dynamic_class()) { |
- // If the dynamic type has not been setup in the VM isolate, then we need |
- // to allocate it here. |
- if (Object::dynamic_type() != reinterpret_cast<RawType*>(RAW_NULL)) { |
- ASSERT(Type::Handle(Object::dynamic_type()).IsFinalized()); |
- return Object::dynamic_type(); |
- } |
- ASSERT(Isolate::Current() == Dart::vm_isolate()); |
- } |
Type& type = Type::Handle(type_class.CanonicalType()); |
if (type.IsNull()) { |
const TypeArguments& no_type_arguments = TypeArguments::Handle(); |
@@ -15947,7 +15940,7 @@ RawAbstractType* Type::Canonicalize(TrailPtr trail) const { |
Type& type = Type::Handle(zone); |
const Class& cls = Class::Handle(zone, type_class()); |
if (cls.raw() == Object::dynamic_class() && (isolate != Dart::vm_isolate())) { |
- return Object::dynamic_type(); |
+ return Object::dynamic_type().raw(); |
} |
// Fast canonical lookup/registry for simple types. |
if (cls.NumTypeArguments() == 0) { |