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

/// This is a regression test from issue #29310. The global type-inferrer does
/// tracing of closures including allocated classes that implement a `call`
/// method. We incorrectly considered also classes with invoked factory
/// constructors, even if those were only abstract interfaces or mixins that
/// weren't actually allocated explicitly.
library regression_29130;

main() {
  new B();
  new C();
}

class A {
  call() {}
}

// interface scenario: we shouldn't trace B
abstract class B implements A {
  factory B() => DummyB();
}

class DummyB implements B {
  call() {}
}

// mixin scenario: we should trace C, but we should trace _C
abstract class C implements A {
  factory C() => new D();
}

class D = A with C;
