Problems reported:

parser/error_recovery/bracket_mismatch_00:11:5: Expected an identifier, but got ']'.
    ])
    ^

parser/error_recovery/bracket_mismatch_00:11:5: Expected ')' before this.
    ])
    ^

beginCompilationUnit(void)
  beginMetadataStar(void)
  endMetadataStar(0)
  beginTopLevelMember(void)
    beginTopLevelMethod(, null)
      handleVoidKeyword(void)
      handleIdentifier(good, topLevelFunctionDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.TopLevelMethod)
      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      beginBlockFunctionBody({)
        handleNoTypeArguments([)
        handleNoTypeArguments([)
        handleLiteralList(0, [, null, ])
        handleParenthesizedExpression(()
        handleLiteralList(1, [, null, ])
        handleExpressionStatement(;)
      endBlockFunctionBody(1, {, })
    endTopLevelMethod(void, null, })
  endTopLevelDeclaration(void)
  beginMetadataStar(void)
  endMetadataStar(0)
  beginTopLevelMember(void)
    beginTopLevelMethod(}, null)
      handleVoidKeyword(void)
      handleIdentifier(bad, topLevelFunctionDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.TopLevelMethod)
      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      beginBlockFunctionBody({)
        handleNoTypeArguments([)
        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: )}], ], ])
        handleParenthesizedExpression(()
        handleLiteralList(1, [, null, ])
        handleExpressionStatement(;)
      endBlockFunctionBody(1, {, })
    endTopLevelMethod(void, null, })
  endTopLevelDeclaration()
endCompilationUnit(2, )
