beginCompilationUnit(main)
  beginMetadataStar(main)
  endMetadataStar(0)
  beginTopLevelMember(main)
    beginTopLevelMethod(, null)
      handleNoType()
      handleIdentifier(main, topLevelFunctionDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.TopLevelMethod)
      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      beginBlockFunctionBody({)
        handleIdentifier(a, expression)
        handleNoTypeArguments(()
        beginArguments(()
          handleIdentifier(b, expression)
          handleNoTypeArguments(<)
          handleNoArguments(<)
          handleSend(b, <)
          beginBinaryExpression(<)
            handleIdentifier(c, expression)
            handleNoTypeArguments(,)
            handleNoArguments(,)
            handleSend(c, ,)
          endBinaryExpression(<)
          handleIdentifier(as, expression)
          handleNoTypeArguments(>)
          handleNoArguments(>)
          handleSend(as, >)
          beginBinaryExpression(>)
            handleLiteralInt(1)
            handleParenthesizedExpression(()
          endBinaryExpression(>)
        endArguments(2, (, ))
        handleSend(a, ;)
        handleExpressionStatement(;)
      endBlockFunctionBody(1, {, })
    endTopLevelMethod(main, null, })
  endTopLevelDeclaration()
endCompilationUnit(1, )
