Problems reported:

parser/patterns/patternVariableDeclarationStatement_disallowsLate:2:12: Expected an identifier, but got '('.
  late var (_) = x;
           ^

parser/patterns/patternVariableDeclarationStatement_disallowsLate:2:12: Expected ';' after this.
  late var (_) = x;
           ^

parser/patterns/patternVariableDeclarationStatement_disallowsLate:2:13: Expected ';' after this.
  late var (_) = x;
            ^

parser/patterns/patternVariableDeclarationStatement_disallowsLate:2:14: Expected an identifier, but got ')'.
  late var (_) = x;
             ^

parser/patterns/patternVariableDeclarationStatement_disallowsLate:2:13: Expected ';' after this.
  late var (_) = x;
            ^

parser/patterns/patternVariableDeclarationStatement_disallowsLate:2:14: Unexpected token ';'.
  late var (_) = x;
             ^

parser/patterns/patternVariableDeclarationStatement_disallowsLate:2:16: Expected an identifier, but got '='.
  late var (_) = x;
               ^

beginCompilationUnit(f)
  beginMetadataStar(f)
  endMetadataStar(0)
  beginTopLevelMember(f)
    beginTopLevelMethod(, null, null)
      handleNoType()
      handleIdentifier(f, topLevelFunctionDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.TopLevelMethod)
        beginMetadataStar(x)
        endMetadataStar(0)
        beginFormalParameter(x, MemberKind.TopLevelMethod, null, null, null)
          handleNoType(()
          handleIdentifier(x, formalParameterDeclaration)
          handleFormalParameterWithoutValue())
        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      beginBlockFunctionBody({)
        beginMetadataStar(late)
        endMetadataStar(0)
        handleNoType(var)
        beginVariablesDeclaration((, late, var)
          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
          handleIdentifier(, localVariableDeclaration)
          beginInitializedIdentifier()
            handleNoVariableInitializer()
          endInitializedIdentifier()
          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
        endVariablesDeclaration(1, ;)
        handleIdentifier(_, expression)
        handleNoTypeArguments())
        handleNoArguments())
        handleSend(_, ))
        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], _, _)
        handleExpressionStatement(;)
        handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., Try inserting an identifier before ')'., {lexeme: )}], ), ))
        handleIdentifier(, expression)
        handleNoTypeArguments())
        handleNoArguments())
        handleSend(, ))
        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], _, _)
        handleExpressionStatement(;)
        handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {lexeme: ;}], ), ))
        handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '='., Try inserting an identifier before '='., {lexeme: =}], =, =)
        handleIdentifier(, expression)
        handleNoTypeArguments(=)
        handleNoArguments(=)
        handleSend(, =)
        handleIdentifier(x, expression)
        handleNoTypeArguments(;)
        handleNoArguments(;)
        handleSend(x, ;)
        handleAssignmentExpression(=)
        handleExpressionStatement(;)
      endBlockFunctionBody(4, {, })
    endTopLevelMethod(f, null, })
  endTopLevelDeclaration()
endCompilationUnit(1, )
