# Copyright (c) 2017, 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.

main.dart.patch: |
  // Test that a newly instantiated class is handled

  // TODO(ahe): How is this different from the other test with same comment?

  class A {
    get name => 'A.m';

    m() {
      print('Called $name');
    }
  }

  class B extends A {
    get name => 'B.m';
  }

  var instance;
  main() {
    if (instance == null) {
      print('instance is null');
      instance = new A();
  <<<< ["instance is null","Called A.m"]
  ==== ["Called B.m"]
    } else {
      instance = new B();
  >>>>
    }
    instance.m();
  }
