Index: runtime/vm/dart_entry.h |
diff --git a/runtime/vm/dart_entry.h b/runtime/vm/dart_entry.h |
index c2e8f92b931e71a1c8b580dea310eaad848afa40..cddad0da2c105ebbaca8230d5c771232c92fb824 100644 |
--- a/runtime/vm/dart_entry.h |
+++ b/runtime/vm/dart_entry.h |
@@ -24,7 +24,8 @@ class RawObject; |
class RawString; |
class String; |
-// An arguments descriptor array consists of the total argument count; the |
+// An arguments descriptor array consists of the type argument vector length (0 |
+// if none); total argument count (not counting type argument vector); the |
// positional argument count; a sequence of (name, position) pairs, sorted |
// by name, for each named optional argument; and a terminating null to |
// simplify iterating in generated code. |
@@ -33,6 +34,7 @@ class ArgumentsDescriptor : public ValueObject { |
explicit ArgumentsDescriptor(const Array& array); |
// Accessors. |
+ intptr_t TypeArgsLen() const; |
intptr_t Count() const; |
intptr_t PositionalCount() const; |
intptr_t NamedCount() const { return Count() - PositionalCount(); } |
@@ -41,6 +43,7 @@ class ArgumentsDescriptor : public ValueObject { |
bool MatchesNameAt(intptr_t i, const String& other) const; |
// Generated code support. |
+ static intptr_t type_args_len_offset(); |
static intptr_t count_offset(); |
static intptr_t positional_count_offset(); |
static intptr_t first_named_entry_offset(); |
@@ -49,13 +52,19 @@ class ArgumentsDescriptor : public ValueObject { |
static intptr_t named_entry_size() { return kNamedEntrySize * kWordSize; } |
// Allocate and return an arguments descriptor. The first |
- // (count - optional_arguments_names.Length()) arguments are |
+ // (num_arguments - optional_arguments_names.Length()) arguments are |
// positional and the remaining ones are named optional arguments. |
- static RawArray* New(intptr_t count, const Array& optional_arguments_names); |
+ // The presence of a type argument vector as first argument (not counted in |
+ // num_arguments) is indicated by a non-zero type_args_len. |
+ static RawArray* New(intptr_t type_args_len, |
+ intptr_t num_arguments, |
+ const Array& optional_arguments_names); |
// Allocate and return an arguments descriptor that has no optional |
- // arguments. All arguments are positional. |
- static RawArray* New(intptr_t count); |
+ // arguments. All arguments are positional. The presence of a type argument |
+ // vector as first argument (not counted in num_arguments) is indicated |
+ // by a non-zero type_args_len. |
+ static RawArray* New(intptr_t type_args_len, intptr_t num_arguments); |
// Initialize the preallocated fixed length arguments descriptors cache. |
static void InitOnce(); |
@@ -64,7 +73,9 @@ class ArgumentsDescriptor : public ValueObject { |
private: |
// Absolute indexes into the array. |
+ // Keep these in sync with the constants in invocation_mirror_patch.dart. |
enum { |
+ kTypeArgsLenIndex, |
kCountIndex, |
kPositionalCountIndex, |
kFirstNamedEntryIndex, |
@@ -77,12 +88,13 @@ class ArgumentsDescriptor : public ValueObject { |
kNamedEntrySize, |
}; |
- static intptr_t LengthFor(intptr_t count) { |
+ static intptr_t LengthFor(intptr_t num_named_arguments) { |
// Add 1 for the terminating null. |
- return kFirstNamedEntryIndex + (kNamedEntrySize * count) + 1; |
+ return kFirstNamedEntryIndex + (kNamedEntrySize * num_named_arguments) + 1; |
} |
- static RawArray* NewNonCached(intptr_t count, bool canonicalize = true); |
+ static RawArray* NewNonCached(intptr_t num_arguments, |
+ bool canonicalize = true); |
// Used by Simulator to parse argument descriptors. |
static intptr_t name_index(intptr_t index) { |
@@ -120,7 +132,8 @@ class DartEntry : public AllStatic { |
// Invokes the specified instance function or static function. |
// The first argument of an instance function is the receiver. |
// On success, returns a RawInstance. On failure, a RawError. |
- // This is used when there are no named arguments in the call. |
+ // This is used when there is no type argument vector and |
+ // no named arguments in the call. |
static RawObject* InvokeFunction(const Function& function, |
const Array& arguments); |
@@ -134,7 +147,8 @@ class DartEntry : public AllStatic { |
// Invokes the closure object given as the first argument. |
// On success, returns a RawInstance. On failure, a RawError. |
- // This is used when there are no named arguments in the call. |
+ // This is used when there is no type argument vector and |
+ // no named arguments in the call. |
static RawObject* InvokeClosure(const Array& arguments); |
// Invokes the closure object given as the first argument. |