// Copyright (c) 2016, 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.md file.

class C<T, S> {
  foo(S s) => (T x) {
    T y = x;
    Object z = y;
    C<T, S> self = this;
    return z as T;
  };

  bar() {
    C<T, S> self = this;
  }

  baz() {
    return () => () => new C<T, S>();
  }

  factory C() {
    local() {
      C<T, S> self = new C<T, S>.internal();
      return self;
    }
    return local();
  }
  C.internal();
}

main(arguments) {
  print(new C<String, String>().foo(null)(arguments.first));
  dynamic c = new C<int, int>().baz()()();
  if (c is! C<int, int>) throw "$c fails type test 'is C<int, int>'";
  if (c is C<String, String>) {
    throw "$c passes type test 'is C<String, String>'";
  }
  print(c);
}
