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({)
        beginParenthesizedExpressionOrRecordLiteral(()
          beginParenthesizedExpressionOrRecordLiteral(()
            handleIdentifier(foo, expression)
            handleNoTypeArguments(!)
            handleNoArguments(!)
            handleSend(foo, !)
            handleNonNullAssertExpression(!)
          endParenthesizedExpression(()
          handleIdentifier(bar, expressionContinuation)
          handleNoTypeArguments(!)
          handleNoArguments(!)
          handleSend(bar, !)
          handleEndingBinaryExpression(.)
          handleNonNullAssertExpression(!)
        endParenthesizedExpression(()
        handleIdentifier(arg, expression)
        handleNoTypeArguments(])
        handleNoArguments(])
        handleSend(arg, ])
        handleIndexedExpression(null, [, ])
        handleExpressionStatement(;)
      endBlockFunctionBody(1, {, })
    endTopLevelMethod(f, null, })
  endTopLevelDeclaration()
endCompilationUnit(1, )
