beginCompilationUnit(void)
  beginMetadataStar(void)
  endMetadataStar(0)
  beginTopLevelMember(void)
    beginTopLevelMethod(, null)
      handleVoidKeyword(void)
      handleIdentifier(test, topLevelFunctionDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.TopLevelMethod)
        beginMetadataStar(C)
        endMetadataStar(0)
        beginFormalParameter(C, MemberKind.TopLevelMethod, null, null, null)
          handleIdentifier(C, typeReference)
          handleNoTypeArguments(x)
          handleType(C, null)
          handleIdentifier(x, formalParameterDeclaration)
          handleFormalParameterWithoutValue())
        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      beginBlockFunctionBody({)
        handleIdentifier(x, expression)
        handleNoTypeArguments(..)
        handleNoArguments(..)
        handleSend(x, ..)
        beginCascade(..)
          handleIdentifier(f, expressionContinuation)
          handleNoTypeArguments(()
          beginArguments(()
          endArguments(0, (, ))
          handleSend(f, .)
          handleEndingBinaryExpression(..)
          handleIdentifier(g, expressionContinuation)
          handleNoTypeArguments(()
          beginArguments(()
          endArguments(0, (, ))
          handleSend(g, [)
          handleEndingBinaryExpression(.)
          beginLiteralString('Hi!')
          endLiteralString(0, ])
          handleIndexedExpression(null, [, ])
        endCascade()
        beginCascade(..)
          handleIdentifier(h, expressionContinuation)
          handleNoTypeArguments(()
          beginArguments(()
          endArguments(0, (, ))
          handleSend(h, .)
          handleEndingBinaryExpression(..)
          handleIdentifier(y, expressionContinuation)
          handleNoTypeArguments(=)
          handleNoArguments(=)
          handleSend(y, =)
          handleEndingBinaryExpression(.)
          handleLiteralInt(2)
          handleAssignmentExpression(=)
        endCascade()
        handleExpressionStatement(;)
      endBlockFunctionBody(1, {, })
    endTopLevelMethod(void, null, })
  endTopLevelDeclaration()
endCompilationUnit(1, )
