Problems reported:

parser/patterns/assignedVariable_namedWhen:3:4: A variable assigned by a pattern assignment can't be named 'when'.
  (when) = x;
   ^^^^

beginCompilationUnit(void)
  beginMetadataStar(void)
  endMetadataStar(0)
  beginTopLevelMember(void)
    beginTopLevelMethod(, null, null)
      handleVoidKeyword(void)
      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(dynamic)
        endMetadataStar(0)
        handleIdentifier(dynamic, typeReference)
        handleNoTypeArguments(when)
        handleType(dynamic, null)
        beginVariablesDeclaration(when, null, null)
          handleIdentifier(when, localVariableDeclaration)
          beginInitializedIdentifier(when)
            handleNoVariableInitializer(when)
          endInitializedIdentifier(when)
        endVariablesDeclaration(1, ;)
        beginPattern(;)
          beginPattern(()
            handleRecoverableError(Message[IllegalPatternAssignmentVariableName, A variable assigned by a pattern assignment can't be named 'when'., Choose a different name., {lexeme: when}], when, when)
            handleAssignedVariablePattern(when)
          endPattern(when)
          handleParenthesizedPattern(()
        endPattern())
        handleIdentifier(x, expression)
        handleNoTypeArguments(;)
        handleNoArguments(;)
        handleSend(x, ;)
        handlePatternAssignment(=)
        handleExpressionStatement(;)
      endBlockFunctionBody(2, {, })
    endTopLevelMethod(void, null, })
  endTopLevelDeclaration()
endCompilationUnit(1, )
