library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:5:17: Error: A extension declaration must have a body, even if it is empty.
// Try adding an empty body.
// extension E1 on int show num {
//                 ^^^
//
// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:5:26: Error: A function declaration needs an explicit list of parameters.
// Try adding a parameter list to the function declaration.
// extension E1 on int show num {
//                          ^^^
//
// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:9:17: Error: A extension declaration must have a body, even if it is empty.
// Try adding an empty body.
// extension E2 on int show num hide ceil {
//                 ^^^
//
// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:9:26: Error: Expected ';' after this.
// extension E2 on int show num hide ceil {
//                          ^^^
//
// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:9:26: Error: 'num' is already declared in this scope.
// extension E2 on int show num hide ceil {
//                          ^^^
// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:5:26: Context: Previous declaration of 'num'.
// extension E1 on int show num {
//                          ^^^
//
// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:9:35: Error: A function declaration needs an explicit list of parameters.
// Try adding a parameter list to the function declaration.
// extension E2 on int show num hide ceil {
//                                   ^^^^
//
// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:14:17: Error: A extension declaration must have a body, even if it is empty.
// Try adding an empty body.
// extension E3 on int hide isEven {
//                 ^^^
//
// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:14:26: Error: A function declaration needs an explicit list of parameters.
// Try adding a parameter list to the function declaration.
// extension E3 on int hide isEven {
//                          ^^^^^^
//
// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:5:21: Error: Type 'show' not found.
// extension E1 on int show num {
//                     ^^^^
//
// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:9:21: Error: Type 'show' not found.
// extension E2 on int show num hide ceil {
//                     ^^^^
//
// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:9:30: Error: Type 'hide' not found.
// extension E2 on int show num hide ceil {
//                              ^^^^
//
// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:14:21: Error: Type 'hide' not found.
// extension E3 on int hide isEven {
//                     ^^^^
//
import self as self;
import "dart:core" as core;

extension E1 on core::int {
}
extension E2 on core::int {
}
extension E3 on core::int {
}
static method num() → invalid-type
  ;
static method ceil() → invalid-type
  ;
static method isEven() → invalid-type
  ;
static method main() → dynamic
  ;
