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