/*
 * 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.
 */
/**
 * @assertion A library L exports a namespace, meaning that the declarations in
 * the namespace are made available to other libraries if they choose to import
 * L. The namespace that L exports is known as its exported namespace.
 * libraryExport:
 *   metadata export uri combinator* `;'
 * ;
 * @description Checks that it is not an error when the identifiers used with
 * show/hide combinators are also named 'hide' and 'show', and that filtering
 * the export namespace is done correctly.
 * @compile-error
 * @author rodionov
 */
import "syntax_t02_lib.dart";

main() {
  var x = show; // show is hidden, so expecting compile error
}
