// 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.

library lib1;

class ConstClass {
  final x;
  const ConstClass(this.x);
}

var x = const ConstClass(const ConstClass(1));

class C {
  static foo() {
    () {}(); // Hack to avoid inlining.
    return 1;
  }

  bar() {
    () {}(); // Hack to avoid inlining.
    return 1;
  }
}

class C1 {
  static var foo = const {};
  var bar = const {};
}

class C2 {
  static var foo = new Map<int, int>.from({1: 2});
  var bar = new Map<int, int>.from({1: 2});
}

class C3 {
  static final foo = const ConstClass(const ConstClass(1));
  final bar = const ConstClass(const ConstClass(1));
}

class C4 {
  static final foo = new Map<ConstClass, ConstClass>.from({x: x});
  final bar = new Map<ConstClass, ConstClass>.from({x: x});
}

class C5 {
  static const foo = const [
    const {1: 3}
  ];
  bar() {
    () {}(); // Hack to avoid inlining.
    return 1;
  }
}
