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

// Imported by deferred_class_test.dart.

library deferred_class_library2;

class MyClass {
  const MyClass();

  foo(x) {
    print('MyClass.foo($x)');
    return (x - 3) ~/ 2;
  }
}

class Constant {
  final value;
  const Constant(this.value);

  operator ==(other) => other is Constant && value == other.value;
  get hashCode => 0;
}

const C1 = const Constant(499);
const C2 = const [const Constant(99)];

foo([x = const Constant(42)]) => x;
bar() => const Constant(777);

class Gee {
  get value => c.value;
  final c;

  Gee([this.c = const Constant(111)]);
  const Gee.n321([this.c = const Constant(321)]);
  Gee.n135({arg = const Constant(135)}) : this.c = arg;
  const Gee.n246({arg = const Constant(246)}) : this.c = arg;
  const Gee.n888() : this.c = const Constant(888);
  const Gee.constant(this.c);
}

class Gee2 extends Gee {
  Gee2() : super(const Constant(979));
  const Gee2.n321() : super.n321();
  const Gee2.n151() : super.constant(const Constant(151));
  const Gee2.n888() : super.n888();
}
