Problems reported:

parser/error_recovery/bracket_mismatch_05:2:5: Expected ';' after this.
  {[1};
    ^

parser/error_recovery/bracket_mismatch_05:2:4: Can't find ']' to match '['.
  {[1};
   ^

beginCompilationUnit(void)
  beginMetadataStar(void)
  endMetadataStar(0)
  beginTopLevelMember(void)
    beginTopLevelMethod(UnmatchedToken([), null)
      handleVoidKeyword(void)
      handleIdentifier(foo, topLevelFunctionDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.TopLevelMethod)
      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      beginBlockFunctionBody({)
        beginBlock({, BlockKind(statement))
          handleNoTypeArguments([)
          handleLiteralInt(1)
          handleLiteralList(1, [, null, ])
          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
          handleExpressionStatement(;)
        endBlock(1, {, }, BlockKind(statement))
        handleEmptyStatement(;)
      endBlockFunctionBody(2, {, })
    endTopLevelMethod(void, null, })
  endTopLevelDeclaration()
  handleErrorToken(UnmatchedToken([))
  handleRecoverableError(Message[UnmatchedToken, Can't find ']' to match '['., null, {string: ], lexeme: [}], UnmatchedToken([), UnmatchedToken([))
endCompilationUnit(1, )
