| 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); | 
|  |