| Index: runtime/lib/mirrors_impl.dart
 | 
| diff --git a/runtime/lib/mirrors_impl.dart b/runtime/lib/mirrors_impl.dart
 | 
| index f0d5aa9158ae2a1df04f7478315a9f9bc2d063de..e6208a9e220f288f35565e47f84cabdd03f46c05 100644
 | 
| --- a/runtime/lib/mirrors_impl.dart
 | 
| +++ b/runtime/lib/mirrors_impl.dart
 | 
| @@ -420,18 +420,21 @@ class _LocalClosureMirrorImpl extends _LocalInstanceMirrorImpl
 | 
|  class _LocalClassMirrorImpl extends _LocalObjectMirrorImpl
 | 
|      implements ClassMirror {
 | 
|    _LocalClassMirrorImpl(reflectee,
 | 
| -                        this._reflectedType,
 | 
| +                        reflectedType,
 | 
|                          String simpleName,
 | 
|                          this._isGeneric,
 | 
|                          this._isMixinTypedef,
 | 
|                          this._isGenericDeclaration)
 | 
|        : this._simpleName = _s(simpleName),
 | 
| +        this._reflectedType = reflectedType,
 | 
| +        this._instantiator = reflectedType,
 | 
|          super(reflectee);
 | 
|  
 | 
|    final Type _reflectedType;
 | 
|    final bool _isGeneric;
 | 
|    final bool _isMixinTypedef;
 | 
|    final bool _isGenericDeclaration;
 | 
| +  Type _instantiator;
 | 
|  
 | 
|    TypeMirror _instantiateInContextOf(declaration) => this;
 | 
|  
 | 
| @@ -493,6 +496,7 @@ class _LocalClassMirrorImpl extends _LocalObjectMirrorImpl
 | 
|          return null;
 | 
|        }
 | 
|        _trueSuperclassField = _Mirrors._reflectType(supertype);
 | 
| +      _trueSuperclassField._instantiator = _instantiator;
 | 
|      }
 | 
|      return _trueSuperclassField;
 | 
|    }
 | 
| @@ -503,7 +507,10 @@ class _LocalClassMirrorImpl extends _LocalObjectMirrorImpl
 | 
|    var _superinterfaces;
 | 
|    List<ClassMirror> get superinterfaces {
 | 
|      if (_superinterfaces == null) {
 | 
| -      _superinterfaces = _interfaces(_reflectee)
 | 
| +      _superinterfaces = isOriginalDeclaration
 | 
| +          ? _nativeInterfaces(_reflectedType)
 | 
| +          : _nativeInterfacesInstantiated(_reflectedType);
 | 
| +      _superinterfaces = _superinterfaces
 | 
|            .map((i) => _Mirrors._reflectType(i)).toList(growable:false);
 | 
|      }
 | 
|      return _superinterfaces;
 | 
| @@ -512,7 +519,7 @@ class _LocalClassMirrorImpl extends _LocalObjectMirrorImpl
 | 
|    get _mixinApplicationName {
 | 
|      var mixins = new List<ClassMirror>();
 | 
|      var klass = this;
 | 
| -    while (_computeMixin(klass._reflectee) != null) {
 | 
| +    while (_nativeMixin(klass._reflectedType) != null) {
 | 
|        mixins.add(klass.mixin);
 | 
|        klass = klass.superclass;
 | 
|      }
 | 
| @@ -526,9 +533,14 @@ class _LocalClassMirrorImpl extends _LocalObjectMirrorImpl
 | 
|    ClassMirror get mixin {
 | 
|      if (_mixin == null) {
 | 
|        if (_isMixinTypedef) {
 | 
| -        _mixin = _trueSuperclass.mixin;
 | 
| +        Type mixinType = isOriginalDeclaration
 | 
| +            ? _nativeMixin(_trueSuperclass._reflectedType)
 | 
| +            : _nativeMixinInstantiated(_trueSuperclass._reflectedType, _instantiator);
 | 
| +        _mixin = _Mirrors._reflectType(mixinType);
 | 
|        } else {
 | 
| -        var mixinType = _computeMixin(_reflectee);
 | 
| +        Type mixinType = isOriginalDeclaration
 | 
| +            ? _nativeMixin(_reflectedType)
 | 
| +            : _nativeMixinInstantiated(_reflectedType, _instantiator);
 | 
|          if (mixinType == null) {
 | 
|            // The reflectee is not a mixin application.
 | 
|            _mixin = this;
 | 
| @@ -709,12 +721,18 @@ class _LocalClassMirrorImpl extends _LocalObjectMirrorImpl
 | 
|    static _supertypeInstantiated(reflectedType)
 | 
|        native "ClassMirror_supertype_instantiated";
 | 
|  
 | 
| -  static _interfaces(reflectee)
 | 
| +  static _nativeInterfaces(reflectedType)
 | 
|        native "ClassMirror_interfaces";
 | 
|  
 | 
| -  static _computeMixin(reflectee)
 | 
| +  static _nativeInterfacesInstantiated(reflectedType)
 | 
| +      native "ClassMirror_interfaces_instantiated";
 | 
| +
 | 
| +  static _nativeMixin(reflectedType)
 | 
|        native "ClassMirror_mixin";
 | 
|  
 | 
| +  static _nativeMixinInstantiated(reflectedType, instantiator)
 | 
| +      native "ClassMirror_mixin_instantiated";
 | 
| +
 | 
|    _computeMembers(reflectee)
 | 
|        native "ClassMirror_members";
 | 
|  
 | 
| @@ -745,6 +763,8 @@ class _LocalFunctionTypeMirrorImpl extends _LocalClassMirrorImpl
 | 
|    _LocalFunctionTypeMirrorImpl(reflectee, reflectedType)
 | 
|        : super(reflectee, reflectedType, null, false, false, false);
 | 
|  
 | 
| +  bool get _isAnonymousMixinApplication => false;
 | 
| +
 | 
|    // FunctionTypeMirrors have a simpleName generated from their signature.
 | 
|    Symbol _simpleName = null;
 | 
|    Symbol get simpleName {
 | 
| @@ -869,6 +889,13 @@ class _LocalTypeVariableMirrorImpl extends _LocalDeclarationMirrorImpl
 | 
|  
 | 
|    String toString() => "TypeVariableMirror on '${_n(simpleName)}'";
 | 
|  
 | 
| +  operator ==(other) {
 | 
| +    return other is TypeVariableMirror 
 | 
| +        && simpleName == other.simpleName
 | 
| +        && owner == other.owner;
 | 
| +  }
 | 
| +  int get hashCode => simpleName.hashCode;
 | 
| +
 | 
|    static DeclarationMirror _TypeVariableMirror_owner(reflectee)
 | 
|        native "TypeVariableMirror_owner";
 | 
|  
 | 
| 
 |