beginCompilationUnit(foo)
  beginMetadataStar(foo)
  endMetadataStar(0)
  beginTopLevelMember(foo)
    beginTopLevelMethod(, null)
      handleNoType()
      handleIdentifier(foo, topLevelFunctionDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.TopLevelMethod)
      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      handleLiteralInt(42)
      handleExpressionFunctionBody(=>, ;)
    endTopLevelMethod(foo, null, ;)
  endTopLevelDeclaration(bar)
  beginMetadataStar(bar)
  endMetadataStar(0)
  beginTopLevelMember(bar)
    beginTopLevelMethod(;, null)
      handleNoType(;)
      handleIdentifier(bar, topLevelFunctionDeclaration)
      beginTypeVariables(<)
        beginMetadataStar(T)
        endMetadataStar(0)
        handleIdentifier(T, typeVariableDeclaration)
        beginTypeVariable(T)
          handleTypeVariablesDefined(T, 1)
          handleNoType(T)
        endTypeVariable(>, 0, null, null)
      endTypeVariables(<, >)
      beginFormalParameters((, MemberKind.TopLevelMethod)
      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      handleLiteralInt(42)
      handleExpressionFunctionBody(=>, ;)
    endTopLevelMethod(bar, null, ;)
  endTopLevelDeclaration()
endCompilationUnit(2, )
