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

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

Issue 13132002: Version 0.4.3.5 (Closed) Base URL: http://dart.googlecode.com/svn/trunk/dart/
Patch Set: Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « runtime/vm/class_finalizer.cc ('k') | tests/language/f_bounded_quantification2_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/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/bigint_operations.h" 10 #include "vm/bigint_operations.h"
(...skipping 9161 matching lines...) Expand 10 before | Expand all | Expand 10 after
9172 if (!IsFinalized() || IsBeingFinalized() || IsMalformed()) { 9172 if (!IsFinalized() || IsBeingFinalized() || IsMalformed()) {
9173 // Most probably a malformed type. Do not fill up with "dynamic", 9173 // Most probably a malformed type. Do not fill up with "dynamic",
9174 // but use actual vector. 9174 // but use actual vector.
9175 num_type_params = num_args; 9175 num_type_params = num_args;
9176 } else { 9176 } else {
9177 ASSERT(num_args == 0); // Type is raw. 9177 ASSERT(num_args == 0); // Type is raw.
9178 // No need to fill up with "dynamic". 9178 // No need to fill up with "dynamic".
9179 num_type_params = 0; 9179 num_type_params = 0;
9180 } 9180 }
9181 } else { 9181 } else {
9182 first_type_param_index = num_args - num_type_params; 9182 // The actual type argument vector can be longer than necessary, because
9183 // of type optimizations.
9184 if (IsFinalized() && cls.is_finalized()) {
9185 first_type_param_index = cls.NumTypeArguments() - num_type_params;
9186 } else {
9187 first_type_param_index = num_args - num_type_params;
9188 }
9183 } 9189 }
9184 if (cls.IsSignatureClass()) { 9190 if (cls.IsSignatureClass()) {
9185 // We may be reporting an error about a malformed function type. In that 9191 // We may be reporting an error about a malformed function type. In that
9186 // case, avoid instantiating the signature, since it may lead to cycles. 9192 // case, avoid instantiating the signature, since it may lead to cycles.
9187 if (!IsFinalized() || IsBeingFinalized() || IsMalformed()) { 9193 if (!IsFinalized() || IsBeingFinalized() || IsMalformed()) {
9188 return class_name.raw(); 9194 return class_name.raw();
9189 } 9195 }
9190 // In order to avoid cycles, print the name of a typedef (non-canonical 9196 // In order to avoid cycles, print the name of a typedef (non-canonical
9191 // signature class) as a regular, possibly parameterized, class. 9197 // signature class) as a regular, possibly parameterized, class.
9192 if (cls.IsCanonicalSignatureClass()) { 9198 if (cls.IsCanonicalSignatureClass()) {
9193 const Function& signature_function = Function::Handle( 9199 const Function& signature_function = Function::Handle(
9194 cls.signature_function()); 9200 cls.signature_function());
9195 // Signature classes have no super type. 9201 // Signature classes have no super type, however, they take as many
9196 ASSERT(first_type_param_index == 0); 9202 // type arguments as the owner class of their signature function (if it
9203 // is non static and generic, see Class::NumTypeArguments()). Therefore,
9204 // first_type_param_index may be greater than 0 here.
9197 return signature_function.InstantiatedSignatureFrom(args, 9205 return signature_function.InstantiatedSignatureFrom(args,
9198 name_visibility); 9206 name_visibility);
9199 } 9207 }
9200 } 9208 }
9201 } else { 9209 } else {
9202 const UnresolvedClass& cls = UnresolvedClass::Handle(unresolved_class()); 9210 const UnresolvedClass& cls = UnresolvedClass::Handle(unresolved_class());
9203 class_name = cls.Name(); 9211 class_name = cls.Name();
9204 num_type_params = num_args; 9212 num_type_params = num_args;
9205 first_type_param_index = 0; 9213 first_type_param_index = 0;
9206 } 9214 }
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after
9541 ASSERT(IsFinalized()); 9549 ASSERT(IsFinalized());
9542 ASSERT(!IsInstantiated()); 9550 ASSERT(!IsInstantiated());
9543 // Return the uninstantiated type unchanged if malformed. No copy needed. 9551 // Return the uninstantiated type unchanged if malformed. No copy needed.
9544 if (IsMalformed()) { 9552 if (IsMalformed()) {
9545 return raw(); 9553 return raw();
9546 } 9554 }
9547 AbstractTypeArguments& type_arguments = 9555 AbstractTypeArguments& type_arguments =
9548 AbstractTypeArguments::Handle(arguments()); 9556 AbstractTypeArguments::Handle(arguments());
9549 type_arguments = type_arguments.InstantiateFrom(instantiator_type_arguments, 9557 type_arguments = type_arguments.InstantiateFrom(instantiator_type_arguments,
9550 malformed_error); 9558 malformed_error);
9559 // Note that the type class has to be resolved at this time, but not
9560 // necessarily finalized yet. We may be checking bounds at compile time.
9551 const Class& cls = Class::Handle(type_class()); 9561 const Class& cls = Class::Handle(type_class());
9552 ASSERT(cls.is_finalized());
9553 // This uninstantiated type is not modified, as it can be instantiated 9562 // This uninstantiated type is not modified, as it can be instantiated
9554 // with different instantiators. 9563 // with different instantiators.
9555 Type& instantiated_type = Type::Handle( 9564 Type& instantiated_type = Type::Handle(
9556 Type::New(cls, type_arguments, token_pos())); 9565 Type::New(cls, type_arguments, token_pos()));
9557 ASSERT(type_arguments.IsNull() || 9566 ASSERT(type_arguments.IsNull() ||
9558 (type_arguments.Length() == cls.NumTypeArguments())); 9567 (type_arguments.Length() == cls.NumTypeArguments()));
9559 instantiated_type.SetIsFinalized(); 9568 instantiated_type.SetIsFinalized();
9560 return instantiated_type.raw(); 9569 return instantiated_type.raw();
9561 } 9570 }
9562 9571
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
9727 } 9736 }
9728 9737
9729 9738
9730 void TypeParameter::set_is_finalized() const { 9739 void TypeParameter::set_is_finalized() const {
9731 ASSERT(!IsFinalized()); 9740 ASSERT(!IsFinalized());
9732 set_type_state(RawTypeParameter::kFinalizedUninstantiated); 9741 set_type_state(RawTypeParameter::kFinalizedUninstantiated);
9733 } 9742 }
9734 9743
9735 9744
9736 bool TypeParameter::Equals(const Instance& other) const { 9745 bool TypeParameter::Equals(const Instance& other) const {
9737 ASSERT(IsFinalized());
9738 if (raw() == other.raw()) { 9746 if (raw() == other.raw()) {
9739 return true; 9747 return true;
9740 } 9748 }
9741 if (!other.IsTypeParameter()) { 9749 if (!other.IsTypeParameter()) {
9742 return false; 9750 return false;
9743 } 9751 }
9744 const TypeParameter& other_type_param = TypeParameter::Cast(other); 9752 const TypeParameter& other_type_param = TypeParameter::Cast(other);
9745 ASSERT(other_type_param.IsFinalized()); 9753 ASSERT(other_type_param.IsFinalized());
9746 if (parameterized_class() != other_type_param.parameterized_class()) { 9754 if (parameterized_class() != other_type_param.parameterized_class()) {
9747 return false; 9755 return false;
9748 } 9756 }
9757 if (IsFinalized() != other_type_param.IsFinalized()) {
9758 return false;
9759 }
9749 if (index() != other_type_param.index()) { 9760 if (index() != other_type_param.index()) {
9750 return false; 9761 return false;
9751 } 9762 }
9752 return true; 9763 return true;
9753 } 9764 }
9754 9765
9755 9766
9756 void TypeParameter::set_parameterized_class(const Class& value) const { 9767 void TypeParameter::set_parameterized_class(const Class& value) const {
9757 // Set value may be null. 9768 // Set value may be null.
9758 StorePointer(&raw_ptr()->parameterized_class_, value.raw()); 9769 StorePointer(&raw_ptr()->parameterized_class_, value.raw());
(...skipping 3880 matching lines...) Expand 10 before | Expand all | Expand 10 after
13639 } 13650 }
13640 return result.raw(); 13651 return result.raw();
13641 } 13652 }
13642 13653
13643 13654
13644 const char* WeakProperty::ToCString() const { 13655 const char* WeakProperty::ToCString() const {
13645 return "_WeakProperty"; 13656 return "_WeakProperty";
13646 } 13657 }
13647 13658
13648 } // namespace dart 13659 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/class_finalizer.cc ('k') | tests/language/f_bounded_quantification2_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698