Problems reported:

parser/error_recovery/issue_38415.crash:1:15: Expected '[' before this.
f() { m(T<R(<Z
              ^...

parser/error_recovery/issue_38415.crash:1:15: Expected ';' after this.
f() { m(T<R(<Z
              ^...

parser/error_recovery/issue_38415.crash:1:12: Can't find ')' to match '('.
f() { m(T<R(<Z
           ^

parser/error_recovery/issue_38415.crash:1:10: Can't find '>' to match '<'.
f() { m(T<R(<Z
         ^

parser/error_recovery/issue_38415.crash:1:8: Can't find ')' to match '('.
f() { m(T<R(<Z
       ^

parser/error_recovery/issue_38415.crash:1:5: Can't find '}' to match '{'.
f() { m(T<R(<Z
    ^

beginCompilationUnit(f)
  beginMetadataStar(f)
  endMetadataStar(0)
  beginTopLevelMember(f)
    beginTopLevelMethod(UnmatchedToken({), null)
      handleNoType(UnmatchedToken({))
      handleIdentifier(f, topLevelFunctionDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.TopLevelMethod)
      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      beginBlockFunctionBody({)
        handleIdentifier(m, expression)
        handleNoTypeArguments(()
        beginArguments(()
          handleIdentifier(T, expression)
          handleNoTypeArguments(<)
          handleNoArguments(<)
          handleSend(T, <)
          beginBinaryExpression(<)
            handleIdentifier(R, expression)
            handleNoTypeArguments(()
            beginArguments(()
              beginTypeArguments(<)
                handleIdentifier(Z, typeReference)
                handleNoTypeArguments())
                handleType(Z, null)
              endTypeArguments(1, <, >)
              handleRecoverableError(Message[ExpectedButGot, Expected '[' before this., null, {string: [}], , )
              handleLiteralList(0, [, null, ])
            endArguments(1, (, ))
            handleSend(R, })
          endBinaryExpression(<)
        endArguments(1, (, ))
        handleSend(m, })
        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], , )
        handleExpressionStatement(;)
      endBlockFunctionBody(1, {, })
    endTopLevelMethod(f, null, })
  endTopLevelDeclaration()
  handleErrorToken(UnmatchedToken(())
  handleRecoverableError(Message[UnmatchedToken, Can't find ')' to match '('., null, {string: ), token: (}], UnmatchedToken((), UnmatchedToken(())
  handleErrorToken(UnmatchedToken(<))
  handleRecoverableError(Message[UnmatchedToken, Can't find '>' to match '<'., null, {string: >, token: <}], UnmatchedToken(<), UnmatchedToken(<))
  handleErrorToken(UnmatchedToken(())
  handleRecoverableError(Message[UnmatchedToken, Can't find ')' to match '('., null, {string: ), token: (}], UnmatchedToken((), UnmatchedToken(())
  handleErrorToken(UnmatchedToken({))
  handleRecoverableError(Message[UnmatchedToken, Can't find '}' to match '{'., null, {string: }, token: {}], UnmatchedToken({), UnmatchedToken({))
endCompilationUnit(1, )
