# 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 deleting an instance method works, even when accessed through
  // super

  class A {
    m() {
      print('v2');
    }
  }
  class B extends A {
  <<<< ["instance is null","v1"]
    m() {
      print('v1');
    }
  ==== "v2"
  >>>>
  }
  class C extends B {
    m() {
      super.m();
    }
  }
  var instance;
  main() {
    if (instance == null) {
      print('instance is null');
      instance = new C();
    }
    instance.m();
  }
