Problems reported:

parser/error_recovery/bracket_mismatch_01:25:11: Place positional arguments before named arguments.
          D(),
          ^

parser/error_recovery/bracket_mismatch_01:26:11: Place positional arguments before named arguments.
          D(),
          ^

parser/error_recovery/bracket_mismatch_01:27:9: Place positional arguments before named arguments.
        ]),
        ^

parser/error_recovery/bracket_mismatch_01:27:9: Expected an identifier, but got ']'.
        ]),
        ^

parser/error_recovery/bracket_mismatch_01:27:9: Expected ')' before this.
        ]),
        ^

beginCompilationUnit(class)
  beginMetadataStar(class)
  endMetadataStar(0)
  beginClassOrNamedMixinApplicationPrelude(class)
    handleIdentifier(C, classOrMixinDeclaration)
    handleNoTypeVariables({)
    beginClassDeclaration(class, null, C)
      handleNoType(C)
      handleClassExtends(null, 1)
      handleClassNoWithClause()
      handleClassOrMixinImplements(null, 0)
      handleClassHeader(class, class, null)
      beginClassOrMixinBody(DeclarationKind.Class, {)
        beginMetadataStar(C)
        endMetadataStar(0)
        beginMember()
          beginMethod(null, null, null, null, null, C)
            handleNoType({)
            handleIdentifier(C, methodDeclaration)
            handleNoTypeVariables(()
            beginFormalParameters((, MemberKind.NonStaticMethod)
              beginOptionalFormalParameters({)
                beginMetadataStar(c)
                endMetadataStar(0)
                beginFormalParameter(c, MemberKind.NonStaticMethod, null, null, null)
                  handleNoType({)
                  handleIdentifier(c, formalParameterDeclaration)
                  handleFormalParameterWithoutValue(})
                endFormalParameter(null, null, c, null, null, FormalParameterKind.optionalNamed, MemberKind.NonStaticMethod)
              endOptionalFormalParameters(1, {, })
            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
            handleNoInitializers()
            handleAsyncModifier(null, null)
            handleEmptyFunctionBody(;)
          endClassConstructor(null, C, (, null, ;)
        endMember()
        beginMetadataStar(C)
        endMetadataStar(0)
        beginMember()
          beginMethod(null, null, null, null, null, m)
            handleIdentifier(C, typeReference)
            handleNoTypeArguments(m)
            handleType(C, null)
            handleIdentifier(m, methodDeclaration)
            handleNoTypeVariables(()
            beginFormalParameters((, MemberKind.NonStaticMethod)
            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
            handleNoInitializers()
            handleAsyncModifier(null, null)
            beginBlockFunctionBody({)
              beginReturnStatement(return)
                handleIdentifier(C, expression)
                handleNoTypeArguments(()
                beginArguments(()
                  handleIdentifier(c, namedArgumentReference)
                  handleNoTypeArguments([)
                  handleIdentifier(C, expression)
                  handleNoTypeArguments(()
                  beginArguments(()
                    handleIdentifier(c, namedArgumentReference)
                    handleNoTypeArguments([)
                    handleIdentifier(C, expression)
                    handleNoTypeArguments(()
                    beginArguments(()
                    endArguments(0, (, ))
                    handleSend(C, ,)
                    handleIdentifier(C, expression)
                    handleNoTypeArguments(()
                    beginArguments(()
                    endArguments(0, (, ))
                    handleSend(C, ,)
                    handleIdentifier(C, expression)
                    handleNoTypeArguments(()
                    beginArguments(()
                    endArguments(0, (, ))
                    handleSend(C, ,)
                    handleLiteralList(3, [, null, ])
                    handleNamedArgument(:)
                  endArguments(1, (, ))
                  handleSend(C, ,)
                  handleIdentifier(C, expression)
                  handleNoTypeArguments(()
                  beginArguments(()
                  endArguments(0, (, ))
                  handleSend(C, ,)
                  handleIdentifier(C, expression)
                  handleNoTypeArguments(()
                  beginArguments(()
                  endArguments(0, (, ))
                  handleSend(C, ,)
                  handleLiteralList(3, [, null, ])
                  handleNamedArgument(:)
                endArguments(1, (, ))
                handleSend(C, ;)
              endReturnStatement(true, return, ;)
            endBlockFunctionBody(1, {, })
          endClassMethod(null, C, (, null, })
        endMember()
      endClassOrMixinBody(DeclarationKind.Class, 2, {, })
    endClassDeclaration(class, })
  endTopLevelDeclaration(class)
  beginMetadataStar(class)
  endMetadataStar(0)
  beginClassOrNamedMixinApplicationPrelude(class)
    handleIdentifier(D, classOrMixinDeclaration)
    handleNoTypeVariables({)
    beginClassDeclaration(class, null, D)
      handleNoType(D)
      handleClassExtends(null, 1)
      handleClassNoWithClause()
      handleClassOrMixinImplements(null, 0)
      handleClassHeader(class, class, null)
      beginClassOrMixinBody(DeclarationKind.Class, {)
        beginMetadataStar(D)
        endMetadataStar(0)
        beginMember()
          beginMethod(null, null, null, null, null, D)
            handleNoType({)
            handleIdentifier(D, methodDeclaration)
            handleNoTypeVariables(()
            beginFormalParameters((, MemberKind.NonStaticMethod)
              beginOptionalFormalParameters({)
                beginMetadataStar(d)
                endMetadataStar(0)
                beginFormalParameter(d, MemberKind.NonStaticMethod, null, null, null)
                  handleNoType({)
                  handleIdentifier(d, formalParameterDeclaration)
                  handleFormalParameterWithoutValue(})
                endFormalParameter(null, null, d, null, null, FormalParameterKind.optionalNamed, MemberKind.NonStaticMethod)
              endOptionalFormalParameters(1, {, })
            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
            handleNoInitializers()
            handleAsyncModifier(null, null)
            handleEmptyFunctionBody(;)
          endClassConstructor(null, D, (, null, ;)
        endMember()
        beginMetadataStar(D)
        endMetadataStar(0)
        beginMember()
          beginMethod(null, null, null, null, null, m)
            handleIdentifier(D, typeReference)
            handleNoTypeArguments(m)
            handleType(D, null)
            handleIdentifier(m, methodDeclaration)
            handleNoTypeVariables(()
            beginFormalParameters((, MemberKind.NonStaticMethod)
            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
            handleNoInitializers()
            handleAsyncModifier(null, null)
            beginBlockFunctionBody({)
              beginReturnStatement(return)
                handleIdentifier(D, expression)
                handleNoTypeArguments(()
                beginArguments(()
                  handleIdentifier(d, namedArgumentReference)
                  handleNoTypeArguments([)
                  handleIdentifier(D, expression)
                  handleNoTypeArguments(()
                  beginArguments(()
                    handleIdentifier(d, namedArgumentReference)
                    handleIdentifier(D, expression)
                    handleNoTypeArguments(()
                    beginArguments(()
                    endArguments(0, (, ))
                    handleSend(D, ,)
                    handleNamedArgument(:)
                    handleRecoverableError(PositionalAfterNamedArgument, D, D)
                    handleIdentifier(D, expression)
                    handleNoTypeArguments(()
                    beginArguments(()
                    endArguments(0, (, ))
                    handleSend(D, ,)
                    handleRecoverableError(PositionalAfterNamedArgument, D, D)
                    handleIdentifier(D, expression)
                    handleNoTypeArguments(()
                    beginArguments(()
                    endArguments(0, (, ))
                    handleSend(D, ,)
                    handleRecoverableError(PositionalAfterNamedArgument, ], ])
                    handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ']'., Try inserting an identifier before ']'., {token: ]}], ], ])
                    handleIdentifier(, expression)
                    handleNoTypeArguments(])
                    handleNoArguments(])
                    handleSend(, ])
                    handleRecoverableError(Message[ExpectedButGot, Expected ')' before this., null, {string: )}], ], ])
                  endArguments(4, (, ))
                  handleSend(D, ,)
                  handleIdentifier(D, expression)
                  handleNoTypeArguments(()
                  beginArguments(()
                  endArguments(0, (, ))
                  handleSend(D, ,)
                  handleIdentifier(D, expression)
                  handleNoTypeArguments(()
                  beginArguments(()
                  endArguments(0, (, ))
                  handleSend(D, ,)
                  handleLiteralList(3, [, null, ])
                  handleNamedArgument(:)
                endArguments(1, (, ))
                handleSend(D, ;)
              endReturnStatement(true, return, ;)
            endBlockFunctionBody(1, {, })
          endClassMethod(null, D, (, null, })
        endMember()
      endClassOrMixinBody(DeclarationKind.Class, 2, {, })
    endClassDeclaration(class, })
  endTopLevelDeclaration()
endCompilationUnit(2, )
