anchor.diff:    @override
     js_ast.Expression visitSuperPropertyGet(SuperPropertyGet node) {
       var target = node.interfaceTarget;
  -    var jsTarget = _emitSuperTarget(target);
       if (_reifyTearoff(target)) {
  -      return runtimeCall('bind(this, #, #)', [jsTarget.selector, jsTarget]);
  -    }
  -    return jsTarget;
  +      if (_superAllowed) {
  +        var jsTarget = _emitSuperTarget(target);
  +        return runtimeCall('bind(this, #, #)', [jsTarget.selector, jsTarget]);
  +      } else {
  +        return _emitSuperTearoff(target);
  +      }
  +    }
  +    return _emitSuperTarget(target);
     }
   
     @override
  
positive.code:       }
      });
      return js_ast.PropertyAccess(js_ast.This(), jsMethod.name);
    }
  
    /// If [e] is a [TypeLiteral] or a [TypeLiteralConstant] expression, return
  
negative.code: 
      // If we can't emit `super` in this context, generate a helper that does it
      // for us, and call the helper.
      //
      // NOTE: This is intended to help in the cases of calling a `super` getter,
      // setter, or method. For the case of tearing off a `super` method in
      // contexts where `super` isn't allowed, see [_emitSuperTearoff].
      var name = member.name.text;
      var jsMethod = _superHelpers.putIfAbsent(name, () {
        var isAccessor = member is Procedure ? member.isAccessor : true;
  