| 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/become.h" | 10 #include "vm/become.h" |
| (...skipping 15637 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 15648 // Type is not parameterized. | 15648 // Type is not parameterized. |
| 15649 if (!type.IsCanonical()) { | 15649 if (!type.IsCanonical()) { |
| 15650 type ^= type.Canonicalize(); | 15650 type ^= type.Canonicalize(); |
| 15651 signature.SetSignatureType(type); | 15651 signature.SetSignatureType(type); |
| 15652 } | 15652 } |
| 15653 return type.raw(); | 15653 return type.raw(); |
| 15654 } | 15654 } |
| 15655 const Class& scope_cls = Class::Handle(type.type_class()); | 15655 const Class& scope_cls = Class::Handle(type.type_class()); |
| 15656 ASSERT(scope_cls.NumTypeArguments() > 0); | 15656 ASSERT(scope_cls.NumTypeArguments() > 0); |
| 15657 TypeArguments& type_arguments = TypeArguments::Handle(GetTypeArguments()); | 15657 TypeArguments& type_arguments = TypeArguments::Handle(GetTypeArguments()); |
| 15658 type = Type::New(scope_cls, type_arguments, TokenPosition::kNoSource); | 15658 type = Type::New( |
| 15659 scope_cls, type_arguments, TokenPosition::kNoSource, Heap::kNew); |
| 15659 type.set_signature(signature); | 15660 type.set_signature(signature); |
| 15660 type.SetIsFinalized(); | 15661 type.SetIsFinalized(); |
| 15661 type ^= type.Canonicalize(); | 15662 type ^= type.Canonicalize(); |
| 15662 return type.raw(); | 15663 return type.raw(); |
| 15663 } | 15664 } |
| 15664 Type& type = Type::Handle(); | 15665 Type& type = Type::Handle(); |
| 15665 if (!cls.IsGeneric()) { | 15666 if (!cls.IsGeneric()) { |
| 15666 type = cls.CanonicalType(); | 15667 type = cls.CanonicalType(); |
| 15667 } | 15668 } |
| 15668 if (type.IsNull()) { | 15669 if (type.IsNull()) { |
| (...skipping 1729 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 17398 } | 17399 } |
| 17399 } | 17400 } |
| 17400 | 17401 |
| 17401 // Check to see if the type got added to canonical list as part of the | 17402 // Check to see if the type got added to canonical list as part of the |
| 17402 // type arguments canonicalization. | 17403 // type arguments canonicalization. |
| 17403 SafepointMutexLocker ml(isolate->type_canonicalization_mutex()); | 17404 SafepointMutexLocker ml(isolate->type_canonicalization_mutex()); |
| 17404 CanonicalTypeSet table(zone, object_store->canonical_types()); | 17405 CanonicalTypeSet table(zone, object_store->canonical_types()); |
| 17405 type ^= table.GetOrNull(CanonicalTypeKey(*this)); | 17406 type ^= table.GetOrNull(CanonicalTypeKey(*this)); |
| 17406 if (type.IsNull()) { | 17407 if (type.IsNull()) { |
| 17407 // Add this Type into the canonical list of types. | 17408 // Add this Type into the canonical list of types. |
| 17408 type ^= raw(); | 17409 if (this->IsNew()) { |
| 17410 type ^= Object::Clone(*this, Heap::kOld); |
| 17411 } else { |
| 17412 type ^= this->raw(); |
| 17413 } |
| 17409 ASSERT(type.IsOld()); | 17414 ASSERT(type.IsOld()); |
| 17410 type.SetCanonical(); // Mark object as being canonical. | 17415 type.SetCanonical(); // Mark object as being canonical. |
| 17411 bool present = table.Insert(type); | 17416 bool present = table.Insert(type); |
| 17412 ASSERT(!present); | 17417 ASSERT(!present); |
| 17413 } | 17418 } |
| 17414 object_store->set_canonical_types(table.Release()); | 17419 object_store->set_canonical_types(table.Release()); |
| 17415 } | 17420 } |
| 17416 return type.raw(); | 17421 return type.raw(); |
| 17417 } | 17422 } |
| 17418 | 17423 |
| (...skipping 5611 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 23030 return UserTag::null(); | 23035 return UserTag::null(); |
| 23031 } | 23036 } |
| 23032 | 23037 |
| 23033 | 23038 |
| 23034 const char* UserTag::ToCString() const { | 23039 const char* UserTag::ToCString() const { |
| 23035 const String& tag_label = String::Handle(label()); | 23040 const String& tag_label = String::Handle(label()); |
| 23036 return tag_label.ToCString(); | 23041 return tag_label.ToCString(); |
| 23037 } | 23042 } |
| 23038 | 23043 |
| 23039 } // namespace dart | 23044 } // namespace dart |
| OLD | NEW |