// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// @dart = 2.9

// Verify that local functions capture `this` if their arguments refer to
// type parameters from the enclosing class.

import "package:expect/expect.dart";

typedef void B<T>(T v);

class MyFisk {}

class MyHest {}

class A<T> {
  var value;

  A(B<T> x) {
    // This function does not capture `this` explicitly, however it needs
    // to capture it in order to access T. Verify that we do it correctly.
    // If `this` is not captured then foo turns into (B<dynamic>) -> Null
    // which means that foo(x) would throw if T != dynamic.
    f(B<T> v) {}

    f(x);
  }

  foo<U>(B<T> x, B<U> y) {
    // This function does not capture `this` explicitly, verify that it still
    // can access `T`.
    f(B<T> v, B<U> y) {}

    f(x, y);
  }
}

void main() {
  new A<MyFisk>((MyFisk v) {});
  new A<MyFisk>((MyFisk v) {}).foo<MyHest>((MyFisk v) {}, (MyHest v) {});
}
