anchor.diff:        while (baseType is TypeParameterType) {
           baseType = (baseType.element as TypeParameterElement).bound;
         }
  -      useExtension =
  -          baseType is InterfaceType && _isSymbolizedMember(baseType, name);
  +      useExtension = baseType is InterfaceType &&
  +          _isSymbolizedMember(baseType, name, alwaysSymbolizeNative);
       }
   
       return useExtension
  
positive.code:     JS.Expression result;
      if (member != null && member is MethodElement && !isStatic) {
        // Tear-off methods: explicitly bind it.
        if (isSuper) {
          result = _callHelper('bind(this, #, #.#)', [name, jsTarget, name]);
        } else if (_isObjectMemberCall(target, memberName)) {
          result = _callHelper('bind(#, #, #.#)',
              [jsTarget, _propertyName(memberName), _runtimeModule, memberName]);
        } else {
          result = _callHelper('bind(#, #)', [jsTarget, name]);
        }
      } else if (_isObjectMemberCall(target, memberName)) {
        result = _callHelper('#(#)', [memberName, jsTarget]);
  
negative.code:       // For instance members, we add implicit-this.
        // For method tear-offs, we ensure it's a bound method.
        var tearOff = element is MethodElement && !inInvocationContext(node);
        if (tearOff) {
          // To be safe always use the symbolized name when binding on a native
          // class as bind assumes the name will match the name class sigatures
          // which is symbolized for native classes.
          var safeName = _emitMemberName(name,
              isStatic: isStatic,
              type: type,
              element: element,
              alwaysSymbolizeNative: true);
          return _callHelper('bind(this, #)', safeName);
        }
        return js.call('this.#', member);
      }
  
  