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

Unified Diff: runtime/vm/object.h

Issue 2799373002: Pass a second type argument vector to all type instantiation calls in the VM. (Closed)
Patch Set: addressed comments Created 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/locations.h ('k') | runtime/vm/object.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/object.h
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 4e27ea1a83573bbae47a5c40fb4418c1eeb08bdc..50c933ba1339162a1f493fdff568553a34e0747f 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -1596,10 +1596,12 @@ class TypeArguments : public Object {
}
// Check if this type argument vector would consist solely of DynamicType if
- // it was instantiated from a raw (null) instantiator, i.e. consider each type
- // parameter as it would be first instantiated from a vector of dynamic types.
+ // it was instantiated from both a raw (null) instantiator typearguments and
+ // a raw (null) function type arguments, i.e. consider each class type
+ // parameter and function type parameters as it would be first instantiated
+ // from a vector of dynamic types.
// Consider only a prefix of length 'len'.
- bool IsRawInstantiatedRaw(intptr_t len) const {
+ bool IsRawWhenInstantiatedFromRaw(intptr_t len) const {
return IsDynamicTypes(true, 0, len);
}
@@ -1680,10 +1682,12 @@ class TypeArguments : public Object {
// Return 'this' if this type argument vector is instantiated, i.e. if it does
// not refer to type parameters. Otherwise, return a new type argument vector
// where each reference to a type parameter is replaced with the corresponding
- // type of the instantiator type argument vector.
+ // type from the various type argument vectors (class instantiator, function,
+ // or parent functions via the current context).
// If bound_error is not NULL, it may be set to reflect a bound error.
RawTypeArguments* InstantiateFrom(
const TypeArguments& instantiator_type_arguments,
+ const TypeArguments& function_type_arguments,
Error* bound_error,
TrailPtr instantiation_trail,
TrailPtr bound_trail,
@@ -1693,6 +1697,7 @@ class TypeArguments : public Object {
// finalization at compile time.
RawTypeArguments* InstantiateAndCanonicalizeFrom(
const TypeArguments& instantiator_type_arguments,
+ const TypeArguments& function_type_arguments,
Error* bound_error) const;
// Return true if this type argument vector has cached instantiations.
@@ -1734,7 +1739,7 @@ class TypeArguments : public Object {
// Check if the subvector of length 'len' starting at 'from_index' of this
// type argument vector consists solely of DynamicType.
- // If raw_instantiated is true, consider each type parameter to be first
+ // If raw_instantiated is true, consider each class type parameter to be first
// instantiated from a vector of dynamic types.
bool IsDynamicTypes(bool raw_instantiated,
intptr_t from_index,
@@ -2203,6 +2208,7 @@ class Function : public Object {
// Return a new function with instantiated result and parameter types.
RawFunction* InstantiateSignatureFrom(
const TypeArguments& instantiator_type_arguments,
+ const TypeArguments& function_type_arguments,
Heap::Space space) const;
// Build a string of the form '(T, {B b, C c}) => R' representing the
@@ -5247,19 +5253,22 @@ class SubtypeTestCache : public Object {
kInstanceClassIdOrFunction = 0,
kInstanceTypeArguments = 1,
kInstantiatorTypeArguments = 2,
- kTestResult = 3,
- kTestEntryLength = 4,
+ kFunctionTypeArguments = 3,
+ kTestResult = 4,
+ kTestEntryLength = 5,
};
intptr_t NumberOfChecks() const;
void AddCheck(const Object& instance_class_id_or_function,
const TypeArguments& instance_type_arguments,
const TypeArguments& instantiator_type_arguments,
+ const TypeArguments& function_type_arguments,
const Bool& test_result) const;
void GetCheck(intptr_t ix,
Object* instance_class_id_or_function,
TypeArguments* instance_type_arguments,
TypeArguments* instantiator_type_arguments,
+ TypeArguments* function_type_arguments,
Bool* test_result) const;
static RawSubtypeTestCache* New();
@@ -5494,9 +5503,11 @@ class Instance : public Object {
virtual RawTypeArguments* GetTypeArguments() const;
virtual void SetTypeArguments(const TypeArguments& value) const;
- // Check if the type of this instance is a subtype of the given type.
- bool IsInstanceOf(const AbstractType& type,
- const TypeArguments& type_instantiator,
+ // Check if the type of this instance is a subtype of the given other type.
+ // The type argument vectors are used to instantiate the other type if needed.
+ bool IsInstanceOf(const AbstractType& other,
+ const TypeArguments& other_instantiator_type_arguments,
+ const TypeArguments& other_function_type_arguments,
Error* bound_error) const;
bool IsValidNativeIndex(int index) const {
@@ -5693,11 +5704,13 @@ class AbstractType : public Instance {
// Check if this type represents a function type.
virtual bool IsFunctionType() const { return false; }
- // Instantiate this type using the given type argument vector.
+ // Instantiate this type using the given type argument vectors and possibly
+ // the current context.
// Return a new type, or return 'this' if it is already instantiated.
// If bound_error is not NULL, it may be set to reflect a bound error.
virtual RawAbstractType* InstantiateFrom(
const TypeArguments& instantiator_type_arguments,
+ const TypeArguments& function_type_arguments,
Error* bound_error,
TrailPtr instantiation_trail,
TrailPtr bound_trail,
@@ -5913,6 +5926,7 @@ class Type : public AbstractType {
}
virtual RawAbstractType* InstantiateFrom(
const TypeArguments& instantiator_type_arguments,
+ const TypeArguments& function_type_arguments,
Error* bound_error,
TrailPtr instantiation_trail,
TrailPtr bound_trail,
@@ -6049,6 +6063,7 @@ class TypeRef : public AbstractType {
virtual bool IsRecursive() const { return true; }
virtual RawTypeRef* InstantiateFrom(
const TypeArguments& instantiator_type_arguments,
+ const TypeArguments& function_type_arguments,
Error* bound_error,
TrailPtr instantiation_trail,
TrailPtr bound_trail,
@@ -6134,6 +6149,7 @@ class TypeParameter : public AbstractType {
virtual bool IsRecursive() const { return false; }
virtual RawAbstractType* InstantiateFrom(
const TypeArguments& instantiator_type_arguments,
+ const TypeArguments& function_type_arguments,
Error* bound_error,
TrailPtr instantiation_trail,
TrailPtr bound_trail,
@@ -6235,6 +6251,7 @@ class BoundedType : public AbstractType {
virtual bool IsRecursive() const;
virtual RawAbstractType* InstantiateFrom(
const TypeArguments& instantiator_type_arguments,
+ const TypeArguments& function_type_arguments,
Error* bound_error,
TrailPtr instantiation_trail,
TrailPtr bound_trail,
« no previous file with comments | « runtime/vm/locations.h ('k') | runtime/vm/object.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698