// Copyright (c) 2021, 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.

/// @assertion Constructor tear-off feature also contain a fix for the following
///
/// test(Object o) {
///   var isInt = o is int;
///   if (isInt) {
///     o.isEven; // ERROR: `isEven` not defined for type `Object`
///   }
/// }
/// See https://github.com/dart-lang/language/issues/1785
///
/// @description Checks that flow analysis works if the boolean variable has an
/// implicit type
/// @author sgrekhov@unipro.ru

// SharedOptions=--enable-experiment=constructor-tearoffs

test1(Object o) {
  var isInt = o is int;
  if (isInt) {
    o.isEven;
  }
}

test2(Object o) {
  var isInt;
  isInt = o is int;
  if (isInt) {
    o.isEven;
  }
}

test3(Object o) {
  dynamic isInt = o is int;
  if (isInt) {
    o.isEven;
  }
}

main() {
  test1(42);
  test2(42);
  test3(42);
}
