| Index: runtime/lib/invocation_mirror_patch.dart
|
| diff --git a/runtime/lib/invocation_mirror_patch.dart b/runtime/lib/invocation_mirror_patch.dart
|
| index 7a1422efa0712b9b51d2607ac1c67a792e741c10..619fb68637fb4df7ca35ac01ea0759178e0cdfff 100644
|
| --- a/runtime/lib/invocation_mirror_patch.dart
|
| +++ b/runtime/lib/invocation_mirror_patch.dart
|
| @@ -25,6 +25,12 @@ class _InvocationMirror implements Invocation {
|
| static const int _CALL_BITS = 3;
|
| static const int _CALL_MASK = (1 << _CALL_BITS) - 1;
|
|
|
| + // ArgumentsDescriptor layout. Keep in sync with enum in dart_entry.h.
|
| + static const int _TYPE_ARGS_LEN = 0;
|
| + static const int _COUNT = 1;
|
| + static const int _POSITIONAL_COUNT = 2;
|
| + static const int _FIRST_NAMED_ENTRY = 3;
|
| +
|
| // Internal representation of the invocation mirror.
|
| final String _functionName;
|
| final List _argumentsDescriptor;
|
| @@ -60,7 +66,7 @@ class _InvocationMirror implements Invocation {
|
|
|
| List get positionalArguments {
|
| if (_positionalArguments == null) {
|
| - int numPositionalArguments = _argumentsDescriptor[1];
|
| + int numPositionalArguments = _argumentsDescriptor[_POSITIONAL_COUNT];
|
| // Don't count receiver.
|
| if (numPositionalArguments == 1) {
|
| return _positionalArguments = const [];
|
| @@ -74,16 +80,17 @@ class _InvocationMirror implements Invocation {
|
|
|
| Map<Symbol, dynamic> get namedArguments {
|
| if (_namedArguments == null) {
|
| - int numArguments = _argumentsDescriptor[0] - 1; // Exclude receiver.
|
| - int numPositionalArguments = _argumentsDescriptor[1] - 1;
|
| + int numArguments = _argumentsDescriptor[_COUNT] - 1; // Exclude receiver.
|
| + int numPositionalArguments = _argumentsDescriptor[_POSITIONAL_COUNT] - 1;
|
| int numNamedArguments = numArguments - numPositionalArguments;
|
| if (numNamedArguments == 0) {
|
| return _namedArguments = const {};
|
| }
|
| _namedArguments = new Map<Symbol, dynamic>();
|
| for (int i = 0; i < numNamedArguments; i++) {
|
| - String arg_name = _argumentsDescriptor[2 + 2 * i];
|
| - var arg_value = _arguments[_argumentsDescriptor[3 + 2 * i]];
|
| + int namedEntryIndex = _FIRST_NAMED_ENTRY + 2 * i;
|
| + String arg_name = _argumentsDescriptor[namedEntryIndex];
|
| + var arg_value = _arguments[_argumentsDescriptor[namedEntryIndex + 1]];
|
| _namedArguments[new internal.Symbol.unvalidated(arg_name)] = arg_value;
|
| }
|
| _namedArguments = new Map.unmodifiable(_namedArguments);
|
|
|