| 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.
|
|
|