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({)
        beginPattern({)
          handleRecordPattern((, 0)
        endPattern())
        handleIdentifier(x, expression)
        handleNoTypeArguments(;)
        handleNoArguments(;)
        handleSend(x, ;)
        handlePatternAssignment(=)
        handleExpressionStatement((, ;)
      endBlockFunctionBody(1, {, })
    endTopLevelMethod(void, null, })
  endTopLevelDeclaration(})
endCompilationUnit(1, )
