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, f, false)
        listener: beginTopLevelMethod(, null, null)
        listener: handleVoidKeyword(void)
        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
          listener: handleIdentifier(f, topLevelFunctionDeclaration)
        parseMethodTypeVar(f)
          listener: handleNoTypeVariables(()
        parseGetterOrFormalParameters(f, f, false, MemberKind.TopLevelMethod)
          parseFormalParameters(f, MemberKind.TopLevelMethod)
            parseFormalParametersRest((, MemberKind.TopLevelMethod)
              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(x)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(x, MemberKind.TopLevelMethod, null, null, null)
                listener: handleNoType(()
                ensureIdentifier((, 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(}, for)
          parseStatement({)
            parseStatementX({)
              parseForStatement({, null)
                listener: beginForStatement(for)
                parseForLoopPartsStart(null, for, ForPartsContext(null))
                  parseExpressionStatementOrDeclaration((, ForPartsContext(null))
                    parseExpressionStatementOrDeclarationAfterModifiers(var, (, null, var, null, ForPartsContext(null))
                      skipOuterPattern(var)
                      listener: beginMetadataStar(var)
                      listener: endMetadataStar(0)
                      parsePattern(var, PatternContext.declaration, precedence: 1)
                        parsePrimaryPattern(var, PatternContext.declaration)
                          parseParenthesizedPatternOrRecordPattern(var, PatternContext.declaration)
                            parsePattern((, PatternContext.declaration, precedence: 1)
                              parsePrimaryPattern((, PatternContext.declaration)
                                parseVariablePattern((, PatternContext.declaration, typeInfo: Instance of 'NoType')
                                  listener: handleNoType(()
                                  listener: handleVariablePattern(null, a, false)
                            listener: handlePatternField(null)
                            parsePattern(,, PatternContext.declaration, precedence: 1)
                              parsePrimaryPattern(,, PatternContext.declaration)
                                parseVariablePattern(,, PatternContext.declaration, typeInfo: Instance of 'NoType')
                                  listener: handleNoType(,)
                                  listener: handleVariablePattern(null, b, false)
                            listener: handlePatternField(null)
                            ensureCloseParen(b, ()
                            listener: handleRecordPattern((, 2)
                parseForInRest(), null, for, var, null)
                  parseForInLoopPartsRest(), null, for, var, null)
                    listener: beginForInExpression(x)
                    parseExpression(in)
                      looksLikeOuterPatternEquals(in)
                        skipOuterPattern(in)
                          skipObjectPatternRest(x)
                      parsePrecedenceExpression(in, 1, true, ConstantPatternContext.none)
                        parseUnaryExpression(in, true, ConstantPatternContext.none)
                          parsePrimary(in, expression, ConstantPatternContext.none)
                            parseSendOrFunctionLiteral(in, expression)
                              parseSend(in, expression)
                                isNextIdentifier(in)
                                ensureIdentifier(in, expression)
                                  listener: handleIdentifier(x, expression)
                                listener: handleNoTypeArguments())
                                parseArgumentsOpt(x)
                                  listener: handleNoArguments())
                                listener: handleSend(x, ))
                    ensureCloseParen(x, ()
                    listener: endForInExpression())
                    listener: handleForInLoopParts(null, for, (, var, in)
                  listener: beginForInBody({)
                  parseStatement())
                    parseStatementX())
                      parseBlock(), BlockKind(statement))
                        ensureBlock(), null, null)
                        listener: beginBlock({, BlockKind(statement))
                        notEofOrValue(}, })
                        listener: endBlock(0, {, }, BlockKind(statement))
                  listener: endForInBody(})
                  listener: endForIn(})
          notEofOrValue(}, })
          listener: endBlockFunctionBody(1, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration()
  reportAllErrorTokens(void)
  listener: endCompilationUnit(1, )
