beginCompilationUnit(Object)
  beginMetadataStar(Object)
  endMetadataStar(0)
  beginTopLevelMember(Object)
    beginTopLevelMethod(, null, null)
      handleIdentifier(Object, typeReference)
      handleNoTypeArguments(?)
      handleType(Object, ?)
      handleIdentifier(foo, topLevelFunctionDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.TopLevelMethod)
        beginMetadataStar(int)
        endMetadataStar(0)
        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
          handleIdentifier(int, typeReference)
          handleNoTypeArguments(i)
          handleType(int, null)
          handleIdentifier(i, formalParameterDeclaration)
          handleFormalParameterWithoutValue())
        endFormalParameter(null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      beginLiteralString("42")
      endLiteralString(0, ;)
      handleExpressionFunctionBody(=>, ;)
    endTopLevelMethod(Object, null, ;)
  endTopLevelDeclaration(Object)
  beginMetadataStar(Object)
  endMetadataStar(0)
  beginTopLevelMember(Object)
    beginTopLevelMethod(;, null, null)
      handleIdentifier(Object, typeReference)
      handleNoTypeArguments(?)
      handleType(Object, ?)
      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)
        beginMetadataStar(T)
        endMetadataStar(0)
        beginFormalParameter(T, MemberKind.TopLevelMethod, null, null, null)
          handleIdentifier(T, typeReference)
          handleNoTypeArguments(t)
          handleType(T, null)
          handleIdentifier(t, formalParameterDeclaration)
          handleFormalParameterWithoutValue())
        endFormalParameter(null, null, null, t, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      handleLiteralInt(42)
      handleExpressionFunctionBody(=>, ;)
    endTopLevelMethod(Object, null, ;)
  endTopLevelDeclaration(main)
  beginMetadataStar(main)
  endMetadataStar(0)
  beginTopLevelMember(main)
    beginTopLevelMethod(;, null, null)
      handleNoType(;)
      handleIdentifier(main, topLevelFunctionDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.TopLevelMethod)
      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      beginBlockFunctionBody({)
        beginMetadataStar(Function)
        endMetadataStar(0)
        handleIdentifier(Function, typeReference)
        handleNoTypeArguments(?)
        handleType(Function, ?)
        beginVariablesDeclaration(f1, null, null)
          handleIdentifier(f1, localVariableDeclaration)
          beginInitializedIdentifier(f1)
            beginVariableInitializer(=)
              handleIdentifier(foo, expression)
              handleNoTypeArguments(;)
              handleNoArguments(;)
              handleSend(foo, ;)
            endVariableInitializer(=)
          endInitializedIdentifier(f1)
        endVariablesDeclaration(1, ;)
        handleIdentifier(f1, expression)
        handleNoTypeArguments(!)
        handleNoArguments(!)
        handleSend(f1, !)
        handleNonNullAssertExpression(!)
        handleNoTypeArguments(()
        beginArguments(()
          handleLiteralInt(42)
        endArguments(1, (, ))
        handleSend((, ))
        handleExpressionStatement(;)
        beginMetadataStar(Function)
        endMetadataStar(0)
        handleIdentifier(Function, typeReference)
        handleNoTypeArguments(f2)
        handleType(Function, null)
        beginVariablesDeclaration(f2, null, null)
          handleIdentifier(f2, localVariableDeclaration)
          beginInitializedIdentifier(f2)
            beginVariableInitializer(=)
              handleIdentifier(bar, expression)
              handleNoTypeArguments(;)
              handleNoArguments(;)
              handleSend(bar, ;)
            endVariableInitializer(=)
          endInitializedIdentifier(f2)
        endVariablesDeclaration(1, ;)
        beginParenthesizedExpressionOrRecordLiteral(()
          handleIdentifier(f2, expression)
          handleNoTypeArguments(!)
          handleNoArguments(!)
          handleSend(f2, !)
          handleNonNullAssertExpression(!)
        endParenthesizedExpression(()
        beginTypeArguments(<)
          handleIdentifier(int, typeReference)
          handleNoTypeArguments(>)
          handleType(int, null)
        endTypeArguments(1, <, >)
        beginArguments(()
          handleLiteralInt(42)
        endArguments(1, (, ))
        handleSend((, ))
        handleExpressionStatement(;)
      endBlockFunctionBody(4, {, })
    endTopLevelMethod(main, null, })
  endTopLevelDeclaration()
endCompilationUnit(3, )
