library;
//
// Problems in library:
//
// pkg/front_end/testcases/control_flow_collection.dart:8:7: Error: Unexpected token 'if'.
//       if (oracle()) 2,
//       ^^
//
// pkg/front_end/testcases/control_flow_collection.dart:9:7: Error: Unexpected token 'if'.
//       if (oracle()) 3 else -1,
//       ^^
//
// pkg/front_end/testcases/control_flow_collection.dart:10:21: Error: Unexpected token 'if'.
//       if (oracle()) if (oracle()) 4,
//                     ^^
//
// pkg/front_end/testcases/control_flow_collection.dart:10:7: Error: Unexpected token 'if'.
//       if (oracle()) if (oracle()) 4,
//       ^^
//
// pkg/front_end/testcases/control_flow_collection.dart:11:7: Error: Unexpected token 'for'.
//       for (int i in <int>[5, 6, 7]) i,
//       ^^^
//
// pkg/front_end/testcases/control_flow_collection.dart:12:38: Error: Unexpected token 'if'.
//       for (int i in <int>[8, 9, 10]) if (oracle()) i,
//                                      ^^
//
// pkg/front_end/testcases/control_flow_collection.dart:12:7: Error: Unexpected token 'for'.
//       for (int i in <int>[8, 9, 10]) if (oracle()) i,
//       ^^^
//
// pkg/front_end/testcases/control_flow_collection.dart:13:7: Error: Unexpected token 'for'.
//       for (int i = 11; i <= 14; ++i) i,
//       ^^^
//
// pkg/front_end/testcases/control_flow_collection.dart:17:7: Error: Unexpected token 'if'.
//       if (oracle()) 2,
//       ^^
//
// pkg/front_end/testcases/control_flow_collection.dart:18:7: Error: Unexpected token 'if'.
//       if (oracle()) 3 else -1,
//       ^^
//
// pkg/front_end/testcases/control_flow_collection.dart:19:21: Error: Unexpected token 'if'.
//       if (oracle()) if (oracle()) 4,
//                     ^^
//
// pkg/front_end/testcases/control_flow_collection.dart:19:7: Error: Unexpected token 'if'.
//       if (oracle()) if (oracle()) 4,
//       ^^
//
// pkg/front_end/testcases/control_flow_collection.dart:20:7: Error: Unexpected token 'for'.
//       for (int i in <int>[5, 6, 7]) i,
//       ^^^
//
// pkg/front_end/testcases/control_flow_collection.dart:21:38: Error: Unexpected token 'if'.
//       for (int i in <int>[8, 9, 10]) if (oracle()) i,
//                                      ^^
//
// pkg/front_end/testcases/control_flow_collection.dart:21:7: Error: Unexpected token 'for'.
//       for (int i in <int>[8, 9, 10]) if (oracle()) i,
//       ^^^
//
// pkg/front_end/testcases/control_flow_collection.dart:22:7: Error: Unexpected token 'for'.
//       for (int i = 11; i <= 14; ++i) i,
//       ^^^
//
// pkg/front_end/testcases/control_flow_collection.dart:26:7: Error: Unexpected token 'if'.
//       if (oracle()) 2: 2,
//       ^^
//
// pkg/front_end/testcases/control_flow_collection.dart:27:7: Error: Unexpected token 'if'.
//       if (oracle()) 3: 3 else -1: -1,
//       ^^
//
// pkg/front_end/testcases/control_flow_collection.dart:28:21: Error: Unexpected token 'if'.
//       if (oracle()) if (oracle()) 4: 4,
//                     ^^
//
// pkg/front_end/testcases/control_flow_collection.dart:28:7: Error: Unexpected token 'if'.
//       if (oracle()) if (oracle()) 4: 4,
//       ^^
//
// pkg/front_end/testcases/control_flow_collection.dart:29:7: Error: Unexpected token 'for'.
//       for (int i in <int>[5, 6, 7]) i: i,
//       ^^^
//
// pkg/front_end/testcases/control_flow_collection.dart:30:38: Error: Unexpected token 'if'.
//       for (int i in <int>[8, 9, 10]) if (oracle()) i: i,
//                                      ^^
//
// pkg/front_end/testcases/control_flow_collection.dart:30:7: Error: Unexpected token 'for'.
//       for (int i in <int>[8, 9, 10]) if (oracle()) i: i,
//       ^^^
//
// pkg/front_end/testcases/control_flow_collection.dart:31:7: Error: Unexpected token 'for'.
//       for (int i = 11; i <= 14; ++i) i: i,
//       ^^^
//
import self as self;
import "dart:core" as core;

static method main() → dynamic {
  final dynamic aList = <core::int>[1];
  final dynamic aSet = <core::int>{1};
  final dynamic aMap = <core::int, core::int>{1: 1};
  core::print(aList);
  core::print(aSet);
  core::print(aMap);
}
static method oracle() → dynamic
  return true;
