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

// Dart test for testing access to private fields.

class LibOther3 {
  static accessFieldA3(var a) => a.fieldA;
  static accessFieldB3(var b) => b._fieldB;
  static int c_field1b(c) => c._field1;
  static int c_field2b(c) => c._field2;
}

class AImported extends AExposed {
  AImported() : super();
  getFieldA() => fieldA;
}

class C2 extends C1 {
  int _field1;
  C2() : super(), _field1 = 99;

  field1b() => _field1;
}

class C4 extends C3 {
  int _field2;
  C4() : super(), _field2 = 1024;

  field2b() => _field2;
  field1d() => _field1;
}
