// Formatted problems:
//
// pkg/front_end/testcases/rasta/parser_error.dart:10:7: Error: Expected an identifier, but got '?'.
//   if (?b) return b;  /// 01: compile-time error
//       ^
//
// pkg/front_end/testcases/rasta/parser_error.dart:10:9: Error: Expected ':' before this.
//   if (?b) return b;  /// 01: compile-time error
//         ^
//
// pkg/front_end/testcases/rasta/parser_error.dart:10:9: Error: Expected an identifier, but got ')'.
//   if (?b) return b;  /// 01: compile-time error
//         ^

// Unhandled errors:
//
// pkg/front_end/testcases/rasta/parser_error.dart:10:7: Error: Expected an identifier, but got '?'.
//   if (?b) return b;  /// 01: compile-time error
//       ^
//
// pkg/front_end/testcases/rasta/parser_error.dart:10:9: Error: Expected ':' before this.
//   if (?b) return b;  /// 01: compile-time error
//         ^
//
// pkg/front_end/testcases/rasta/parser_error.dart:10:9: Error: Expected an identifier, but got ')'.
//   if (?b) return b;  /// 01: compile-time error
//         ^

library;
import self as self;
import "dart:core" as core;
import "package:expect/expect.dart" as exp;

static method test(dynamic a, {dynamic b = null, dynamic c = null}) → core::int {
  if((invalid-expression "pkg/front_end/testcases/rasta/parser_error.dart:10:7: Error: This couldn't be parsed.
  if (?b) return b;  /// 01: compile-time error
      ^" as{TypeError} core::bool ?{dynamic} b : invalid-expression "pkg/front_end/testcases/rasta/parser_error.dart:10:9: Error: This couldn't be parsed.
  if (?b) return b;  /// 01: compile-time error
        ^") as{TypeError} core::bool)
    return b as{TypeError} core::int;
  return a.+(b).+(c) as{TypeError} core::int;
}
static method main() → dynamic {
  exp::Expect::equals(6, self::test(1, b: 2, c: 3));
}
