// Formatted problems:
//
// pkg/front_end/testcases/regress/issue_31299.dart:18:12: Error: Too many positional arguments: 0 allowed, but 2 found.
// Try removing the extra positional arguments.
//   new A.foo(1, 2);
//            ^
// pkg/front_end/testcases/regress/issue_31299.dart:10:3: Context: Found this candidate, but the arguments don't match.
//   A.foo() : m = 2;
//   ^^^
//
// pkg/front_end/testcases/regress/issue_31299.dart:15:14: Error: Too few positional arguments: 2 required, 0 given.
//   new A().foo();
//              ^

// Unhandled errors:
//
// pkg/front_end/testcases/regress/issue_31299.dart:15:14: Error: Too few positional arguments: 2 required, 0 given.
//   new A().foo();
//              ^

library;
import self as self;
import "dart:core" as core;

class A extends core::Object {
  field core::int m;
  constructor •() → self::A
    : self::A::m = 1, super core::Object::•()
    ;
  constructor foo() → self::A
    : self::A::m = 2, super core::Object::•()
    ;
  method foo(core::int a, core::int b) → core::int
    return a.{core::num::+}(b.{core::num::*}(this.{self::A::m}));
}
static method test() → dynamic {
  new self::A::•().{self::A::foo}();
  new self::A::•().{self::A::foo}(1, 2);
  new self::A::foo();
  invalid-expression "pkg/front_end/testcases/regress/issue_31299.dart:18:12: Error: Too many positional arguments: 0 allowed, but 2 found.
Try removing the extra positional arguments.
  new A.foo(1, 2);
           ^";
}
static method main() → dynamic {}
