parseUnit(void)
  skipErrorTokens(void)
  listener: beginCompilationUnit(void)
  syntheticPreviousToken(void)
  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
    parseMetadataStar()
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl()
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(, null, null)
        listener: handleVoidKeyword(void)
        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
          listener: handleIdentifier(test, topLevelFunctionDeclaration)
        parseMethodTypeVar(test)
          listener: handleNoTypeVariables(()
        parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
          parseFormalParameters(test, MemberKind.TopLevelMethod)
            parseFormalParametersRest((, MemberKind.TopLevelMethod)
              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(C)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(C, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(C, typeReference)
                listener: handleNoTypeArguments(x)
                listener: handleType(C, null)
                ensureIdentifier(C, formalParameterDeclaration)
                  listener: handleIdentifier(x, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, x)
          parseStatement({)
            parseStatementX({)
              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
                looksLikeLocalFunction(x)
                parseExpressionStatement({)
                  parseExpression({)
                    parsePrecedenceExpression({, 1, true)
                      parseUnaryExpression({, true)
                        parsePrimary({, expression)
                          parseSendOrFunctionLiteral({, expression)
                            parseSend({, expression)
                              isNextIdentifier({)
                              ensureIdentifier({, expression)
                                listener: handleIdentifier(x, expression)
                              listener: handleNoTypeArguments(..)
                              parseArgumentsOpt(x)
                                listener: handleNoArguments(..)
                              listener: handleSend(x, ..)
                      parseCascadeExpression(x)
                        listener: beginCascade(..)
                        parseSend(.., expressionContinuation)
                          isNextIdentifier(..)
                          ensureIdentifier(.., expressionContinuation)
                            listener: handleIdentifier(f, expressionContinuation)
                          listener: handleNoTypeArguments(()
                          parseArgumentsOpt(f)
                            parseArguments(f)
                              parseArgumentsRest(()
                                listener: beginArguments(()
                                listener: endArguments(0, (, ))
                          listener: handleSend(f, .)
                        listener: handleEndingBinaryExpression(..)
                        parseSend(., expressionContinuation)
                          isNextIdentifier(.)
                          ensureIdentifier(., expressionContinuation)
                            listener: handleIdentifier(g, expressionContinuation)
                          listener: handleNoTypeArguments(()
                          parseArgumentsOpt(g)
                            parseArguments(g)
                              parseArgumentsRest(()
                                listener: beginArguments(()
                                listener: endArguments(0, (, ))
                          listener: handleSend(g, [)
                        listener: handleEndingBinaryExpression(.)
                        parseArgumentOrIndexStar(), Instance of 'NoTypeParamOrArg', false)
                          parseExpression([)
                            parsePrecedenceExpression([, 1, true)
                              parseUnaryExpression([, true)
                                parsePrimary([, expression)
                                  parseLiteralString([)
                                    parseSingleLiteralString([)
                                      listener: beginLiteralString('Hi!')
                                      listener: endLiteralString(0, ])
                          listener: handleIndexedExpression(null, [, ])
                        parseArgumentOrIndexStar(], Instance of 'NoTypeParamOrArg', false)
                        listener: endCascade()
                      parseCascadeExpression(])
                        listener: beginCascade(..)
                        parseSend(.., expressionContinuation)
                          isNextIdentifier(..)
                          ensureIdentifier(.., expressionContinuation)
                            listener: handleIdentifier(h, expressionContinuation)
                          listener: handleNoTypeArguments(()
                          parseArgumentsOpt(h)
                            parseArguments(h)
                              parseArgumentsRest(()
                                listener: beginArguments(()
                                listener: endArguments(0, (, ))
                          listener: handleSend(h, .)
                        listener: handleEndingBinaryExpression(..)
                        parseSend(., expressionContinuation)
                          isNextIdentifier(.)
                          ensureIdentifier(., expressionContinuation)
                            listener: handleIdentifier(y, expressionContinuation)
                          listener: handleNoTypeArguments(=)
                          parseArgumentsOpt(y)
                            listener: handleNoArguments(=)
                          listener: handleSend(y, =)
                        listener: handleEndingBinaryExpression(.)
                        parseArgumentOrIndexStar(y, Instance of 'NoTypeParamOrArg', false)
                        parseArgumentOrIndexStar(y, Instance of 'NoTypeParamOrArg', false)
                        parseExpressionWithoutCascade(=)
                          parsePrecedenceExpression(=, 1, false)
                            parseUnaryExpression(=, false)
                              parsePrimary(=, expression)
                                parseLiteralInt(=)
                                  listener: handleLiteralInt(2)
                        listener: handleAssignmentExpression(=)
                        listener: endCascade()
                  ensureSemicolon(2)
                  listener: handleExpressionStatement(;)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(1, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration()
  reportAllErrorTokens(void)
  listener: endCompilationUnit(1, )
