beginCompilationUnit(void)
  beginMetadataStar(void)
  endMetadataStar(0)
  beginTopLevelMember(void)
    beginTopLevelMethod(, null, null)
      handleVoidKeyword(void)
      handleIdentifier(f, topLevelFunctionDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.TopLevelMethod)
      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      beginBlockFunctionBody({)
        beginPattern({)
          handleNoTypeArguments([)
          beginPattern([)
            handleAssignedVariablePattern(a)
          endPattern(a)
          beginPattern(,)
            handleNoType(_)
            handleWildcardPattern(null, _)
          endPattern(_)
          handleListPattern(2, [, ])
        endPattern(])
        handleIdentifier(y, expression)
        handleNoTypeArguments(;)
        handleNoArguments(;)
        handleSend(y, ;)
        handlePatternAssignment(=)
        handleExpressionStatement([, ;)
      endBlockFunctionBody(1, {, })
    endTopLevelMethod(void, null, })
  endTopLevelDeclaration(})
endCompilationUnit(1, )
