// Copyright (c) 2011, 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 library10.dart;

import "library11.dart" as lib11;

class Library10 {
  Library10(this.fld);
  func() {
    return 2;
  }
  var fld;
  static static_func() {
    var result = 0;
    var obj = new lib11.Library11(4);
    result = obj.fld;
    Expect.equals(4, result);
    result += obj.func();
    Expect.equals(7, result);
    result += lib11.Library11.static_func();
    Expect.equals(9, result);
    result += lib11.Library11.static_fld;
    Expect.equals(10, result);
    Expect.equals(100, lib11.top_level11);
    Expect.equals(200, lib11.top_level_func11());
    return 3;
  }
  static var static_fld = 4;
}

const int top_level10 = 10;
top_level_func10() {
  return 20;
}
