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