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({)
        beginMetadataStar(var)
        endMetadataStar(0)
        handleNoType(var)
        beginVariablesDeclaration(a, null, var)
          handleIdentifier(a, localVariableDeclaration)
          beginInitializedIdentifier(a)
            handleNoVariableInitializer(a)
          endInitializedIdentifier(a)
          handleIdentifier(b, localVariableDeclaration)
          beginInitializedIdentifier(b)
            handleNoVariableInitializer(b)
          endInitializedIdentifier(b)
          handleIdentifier(c, localVariableDeclaration)
          beginInitializedIdentifier(c)
            handleNoVariableInitializer(c)
          endInitializedIdentifier(c)
        endVariablesDeclaration(3, ;)
        handleIdentifier(a, expression)
        handleNoTypeArguments(?.[)
        handleNoArguments(?.[)
        handleSend(a, ?.[)
        handleIdentifier(b, expression)
        handleNoTypeArguments(])
        handleNoArguments(])
        handleSend(b, ])
        handleIndexedExpression(null, ?.[, ])
        handleIdentifier(c, expression)
        handleNoTypeArguments(;)
        handleNoArguments(;)
        handleSend(c, ;)
        handleAssignmentExpression(=)
        handleExpressionStatement(;)
        handleIdentifier(a, expression)
        handleNoTypeArguments(?)
        handleNoArguments(?)
        handleSend(a, ?)
        handleIdentifier(b, expression)
        handleNoTypeArguments(])
        handleNoArguments(])
        handleSend(b, ])
        handleIndexedExpression(?, [, ])
        handleIdentifier(c, expression)
        handleNoTypeArguments(;)
        handleNoArguments(;)
        handleSend(c, ;)
        handleAssignmentExpression(=)
        handleExpressionStatement(;)
      endBlockFunctionBody(3, {, })
    endTopLevelMethod(f, null, })
  endTopLevelDeclaration()
endCompilationUnit(1, )
