beginCompilationUnit(f)
  beginMetadataStar(f)
  endMetadataStar(0)
  beginTopLevelMember(f)
    beginTopLevelMethod(, null)
      handleNoType()
      handleIdentifier(f, topLevelFunctionDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.TopLevelMethod)
      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      beginBlockFunctionBody({)
        handleIdentifier(foo, expression)
        handleNoTypeArguments(!)
        handleNoArguments(!)
        handleSend(foo, !)
        handleNonNullAssertExpression(!)
        handleIdentifier(bar, expressionContinuation)
        handleNoTypeArguments(!)
        handleNoArguments(!)
        handleSend(bar, !)
        handleEndingBinaryExpression(.)
        handleNonNullAssertExpression(!)
        handleIdentifier(arg, expression)
        handleNoTypeArguments(])
        handleNoArguments(])
        handleSend(arg, ])
        handleIndexedExpression(null, [, ])
        handleNonNullAssertExpression(!)
        handleIdentifier(arg2, expression)
        handleNoTypeArguments(])
        handleNoArguments(])
        handleSend(arg2, ])
        handleIndexedExpression(null, [, ])
        handleExpressionStatement(;)
      endBlockFunctionBody(1, {, })
    endTopLevelMethod(f, null, })
  endTopLevelDeclaration()
endCompilationUnit(1, )
