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

// @dart = 2.9

// Regression test for dart2js issue 6639.

library inline_super_test;

import "package:expect/expect.dart";

part 'inline_super_part.dart';

// Long comment to ensure source positions in the following code are
// larger than the part file.  Best way to ensure that is to include
// the part as a comment:
//
// class Player extends LivingActor {
//   Player (deathCallback) : super(null, deathCallback);
// }

class Percept {}

class Actor {
  final percept;
  Actor(this.percept);
}

class LivingActor extends Actor {
  // The bug occurs when inlining the node [:new Percept():] into
  // [Actor]'s constructor.  When this inlining is being initiated
  // from [Player], we must take care to ensure that we know that we
  // are inlining from this location, and not [Player].
  LivingActor() : super(new Percept());
}

main() {
  Expect.isTrue(new Player().percept is Percept);
}
