parseUnit(class)
  skipErrorTokens(class)
  listener: beginCompilationUnit(class)
  syntheticPreviousToken(class)
  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
    parseMetadataStar()
      listener: beginMetadataStar(class)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
      parseClassDeclarationModifiers(, class)
      parseClassOrNamedMixinApplication(null, class)
        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
        ensureIdentifier(class, classOrMixinDeclaration)
          listener: handleIdentifier(Foo, classOrMixinDeclaration)
        listener: handleNoTypeVariables({)
        listener: beginClassDeclaration(class, null, Foo)
        parseClass(Foo, class, class, Foo)
          parseClassHeaderOpt(Foo, class, class)
            parseClassExtendsOpt(Foo)
              listener: handleNoType(Foo)
              listener: handleClassExtends(null, 1)
            parseWithClauseOpt(Foo)
              listener: handleClassNoWithClause()
            parseClassOrMixinImplementsOpt(Foo)
              listener: handleClassOrMixinImplements(null, 0)
            listener: handleClassHeader(class, class, null)
          parseClassOrMixinOrExtensionBody(Foo, DeclarationKind.Class, Foo)
            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
            notEofOrValue(}, Foo)
            parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, Foo)
              parseMetadataStar({)
                listener: beginMetadataStar(Foo)
                listener: endMetadataStar(0)
              listener: beginMember()
              isReservedKeyword(()
              parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
                listener: handleNoType({)
                ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                  listener: handleIdentifier(Foo, methodDeclaration)
                parseQualifiedRestOpt(Foo, methodDeclarationContinuation)
                parseMethodTypeVar(Foo)
                  listener: handleNoTypeVariables(()
                parseGetterOrFormalParameters(Foo, Foo, false, MemberKind.NonStaticMethod)
                  parseFormalParameters(Foo, MemberKind.NonStaticMethod)
                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
                parseInitializersOpt())
                  listener: handleNoInitializers()
                parseAsyncModifierOpt())
                  listener: handleAsyncModifier(null, null)
                  inPlainSync()
                inPlainSync()
                parseFunctionBody(), false, true)
                  ensureBlock(), Instance of 'Template<(Token) => Message>', null)
                    reportRecoverableError(/, Message[ExpectedFunctionBody, Expected a function body, but got '/'., null, {lexeme: /}])
                      listener: handleRecoverableError(Message[ExpectedFunctionBody, Expected a function body, but got '/'., null, {lexeme: /}], /, /)
                    insertBlock())
                      rewriter()
                      rewriter()
                  listener: handleInvalidFunctionBody({)
                listener: endClassConstructor(null, Foo, (, null, })
              listener: endMember()
            notEofOrValue(}, /)
            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, Foo)
              parseMetadataStar(})
                listener: beginMetadataStar(/)
                listener: endMetadataStar(0)
              listener: beginMember()
              recoverFromInvalidMember(}, }, null, null, null, null, null, null, }, Instance of 'NoType', null, DeclarationKind.Class, Foo)
                parseInvalidOperatorDeclaration(}, null, null, null, null, null, null, }, DeclarationKind.Class, Foo)
                  reportRecoverableError(/, MissingOperatorKeyword)
                    listener: handleRecoverableError(MissingOperatorKeyword, /, /)
                  rewriter()
                  parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, operator, DeclarationKind.Class, Foo, false)
                    listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
                    listener: handleNoType(})
                    parseOperatorName(})
                      listener: handleOperatorName(operator, /)
                    parseMethodTypeVar(/)
                      listener: handleNoTypeVariables(:)
                    parseGetterOrFormalParameters(/, operator, false, MemberKind.NonStaticMethod)
                      missingParameterMessage(MemberKind.NonStaticMethod)
                      reportRecoverableError(/, MissingMethodParameters)
                        listener: handleRecoverableError(MissingMethodParameters, /, /)
                      rewriter()
                      parseFormalParametersRest((, MemberKind.NonStaticMethod)
                        listener: beginFormalParameters((, MemberKind.NonStaticMethod)
                        listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
                    parseInitializersOpt())
                      parseInitializers(:)
                        listener: beginInitializers(:)
                        parseInitializer(:)
                          listener: beginInitializer(super)
                          parseSuperInitializerExpression(:)
                            parseInitializerExpressionRest(:)
                              parseExpression(:)
                                parsePrecedenceExpression(:, 1, true)
                                  parseUnaryExpression(:, true)
                                    parsePrimary(:, expression)
                                      parseSuperExpression(:, expression)
                                        listener: handleSuperExpression(super, expression)
                                        listener: handleNoTypeArguments(()
                                        parseArguments(super)
                                          parseArgumentsRest(()
                                            listener: beginArguments(()
                                            listener: endArguments(0, (, ))
                                        listener: handleSend(super, {)
                              listener: endInitializer({)
                        listener: endInitializers(1, :, {)
                    parseAsyncModifierOpt())
                      listener: handleAsyncModifier(null, null)
                      inPlainSync()
                    inPlainSync()
                    parseFunctionBody(), false, true)
                      listener: beginBlockFunctionBody({)
                      notEofOrValue(}, })
                      listener: endBlockFunctionBody(0, {, })
                    reportRecoverableError(operator, ConstructorWithWrongName)
                      listener: handleRecoverableError(ConstructorWithWrongName, /, /)
                    listener: endClassConstructor(null, operator, (, :, })
                  listener: endMember()
            notEofOrValue(}, Foo)
            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, Foo)
              parseMetadataStar(})
                listener: beginMetadataStar(Foo)
                listener: endMetadataStar(0)
              listener: beginMember()
              isReservedKeyword(()
              parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
                listener: handleNoType(})
                ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                  listener: handleIdentifier(Foo, methodDeclaration)
                parseQualifiedRestOpt(Foo, methodDeclarationContinuation)
                parseMethodTypeVar(Foo)
                  listener: handleNoTypeVariables(()
                parseGetterOrFormalParameters(Foo, Foo, false, MemberKind.NonStaticMethod)
                  parseFormalParameters(Foo, MemberKind.NonStaticMethod)
                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
                parseInitializersOpt())
                  listener: handleNoInitializers()
                parseAsyncModifierOpt())
                  listener: handleAsyncModifier(null, null)
                  inPlainSync()
                inPlainSync()
                parseFunctionBody(), false, true)
                  ensureBlock(), Instance of 'Template<(Token) => Message>', null)
                    reportRecoverableError(., Message[ExpectedFunctionBody, Expected a function body, but got '.'., null, {lexeme: .}])
                      listener: handleRecoverableError(Message[ExpectedFunctionBody, Expected a function body, but got '.'., null, {lexeme: .}], ., .)
                    insertBlock())
                      rewriter()
                      rewriter()
                  listener: handleInvalidFunctionBody({)
                listener: endClassConstructor(null, Foo, (, null, })
              listener: endMember()
            notEofOrValue(}, .)
            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, Foo)
              parseMetadataStar(})
                listener: beginMetadataStar(.)
                listener: endMetadataStar(0)
              listener: beginMember()
              recoverFromInvalidMember(}, }, null, null, null, null, null, null, }, Instance of 'NoType', null, DeclarationKind.Class, Foo)
                reportRecoverableErrorWithToken(., Instance of 'Template<(Token) => Message>')
                  listener: handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got '.'., null, {lexeme: .}], ., .)
                listener: handleInvalidMember(.)
                listener: endMember()
            notEofOrValue(}, /)
            parseClassOrMixinOrExtensionMemberImpl(., DeclarationKind.Class, Foo)
              parseMetadataStar(.)
                listener: beginMetadataStar(/)
                listener: endMetadataStar(0)
              listener: beginMember()
              recoverFromInvalidMember(., ., null, null, null, null, null, null, ., Instance of 'NoType', null, DeclarationKind.Class, Foo)
                parseInvalidOperatorDeclaration(., null, null, null, null, null, null, ., DeclarationKind.Class, Foo)
                  reportRecoverableError(/, MissingOperatorKeyword)
                    listener: handleRecoverableError(MissingOperatorKeyword, /, /)
                  rewriter()
                  parseMethod(., null, null, null, null, null, null, ., Instance of 'NoType', null, operator, DeclarationKind.Class, Foo, false)
                    listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
                    listener: handleNoType(.)
                    parseOperatorName(.)
                      listener: handleOperatorName(operator, /)
                    parseMethodTypeVar(/)
                      listener: handleNoTypeVariables(:)
                    parseGetterOrFormalParameters(/, operator, false, MemberKind.NonStaticMethod)
                      missingParameterMessage(MemberKind.NonStaticMethod)
                      reportRecoverableError(/, MissingMethodParameters)
                        listener: handleRecoverableError(MissingMethodParameters, /, /)
                      rewriter()
                      parseFormalParametersRest((, MemberKind.NonStaticMethod)
                        listener: beginFormalParameters((, MemberKind.NonStaticMethod)
                        listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
                    parseInitializersOpt())
                      parseInitializers(:)
                        listener: beginInitializers(:)
                        parseInitializer(:)
                          listener: beginInitializer(super)
                          parseSuperInitializerExpression(:)
                            parseInitializerExpressionRest(:)
                              parseExpression(:)
                                parsePrecedenceExpression(:, 1, true)
                                  parseUnaryExpression(:, true)
                                    parsePrimary(:, expression)
                                      parseSuperExpression(:, expression)
                                        listener: handleSuperExpression(super, expression)
                                        listener: handleNoTypeArguments(()
                                        parseArguments(super)
                                          parseArgumentsRest(()
                                            listener: beginArguments(()
                                            listener: endArguments(0, (, ))
                                        listener: handleSend(super, {)
                              listener: endInitializer({)
                        listener: endInitializers(1, :, {)
                    parseAsyncModifierOpt())
                      listener: handleAsyncModifier(null, null)
                      inPlainSync()
                    inPlainSync()
                    parseFunctionBody(), false, true)
                      listener: beginBlockFunctionBody({)
                      notEofOrValue(}, })
                      listener: endBlockFunctionBody(0, {, })
                    reportRecoverableError(operator, ConstructorWithWrongName)
                      listener: handleRecoverableError(ConstructorWithWrongName, /, /)
                    listener: endClassConstructor(null, operator, (, :, })
                  listener: endMember()
            notEofOrValue(}, foo)
            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, Foo)
              parseMetadataStar(})
                listener: beginMetadataStar(foo)
                listener: endMetadataStar(0)
              listener: beginMember()
              isReservedKeyword(()
              parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, foo, DeclarationKind.Class, Foo, false)
                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
                listener: handleNoType(})
                ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                  listener: handleIdentifier(foo, methodDeclaration)
                parseQualifiedRestOpt(foo, methodDeclarationContinuation)
                parseMethodTypeVar(foo)
                  listener: handleNoTypeVariables(()
                parseGetterOrFormalParameters(foo, foo, false, MemberKind.NonStaticMethod)
                  parseFormalParameters(foo, MemberKind.NonStaticMethod)
                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
                parseInitializersOpt())
                  listener: handleNoInitializers()
                parseAsyncModifierOpt())
                  listener: handleAsyncModifier(null, null)
                  inPlainSync()
                inPlainSync()
                parseFunctionBody(), false, true)
                  ensureBlock(), Instance of 'Template<(Token) => Message>', null)
                    reportRecoverableError(/, Message[ExpectedFunctionBody, Expected a function body, but got '/'., null, {lexeme: /}])
                      listener: handleRecoverableError(Message[ExpectedFunctionBody, Expected a function body, but got '/'., null, {lexeme: /}], /, /)
                    insertBlock())
                      rewriter()
                      rewriter()
                  listener: handleInvalidFunctionBody({)
                listener: endClassMethod(null, foo, (, null, })
              listener: endMember()
            notEofOrValue(}, /)
            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, Foo)
              parseMetadataStar(})
                listener: beginMetadataStar(/)
                listener: endMetadataStar(0)
              listener: beginMember()
              recoverFromInvalidMember(}, }, null, null, null, null, null, null, }, Instance of 'NoType', null, DeclarationKind.Class, Foo)
                parseInvalidOperatorDeclaration(}, null, null, null, null, null, null, }, DeclarationKind.Class, Foo)
                  reportRecoverableError(/, MissingOperatorKeyword)
                    listener: handleRecoverableError(MissingOperatorKeyword, /, /)
                  rewriter()
                  parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, operator, DeclarationKind.Class, Foo, false)
                    listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
                    listener: handleNoType(})
                    parseOperatorName(})
                      listener: handleOperatorName(operator, /)
                    parseMethodTypeVar(/)
                      listener: handleNoTypeVariables(:)
                    parseGetterOrFormalParameters(/, operator, false, MemberKind.NonStaticMethod)
                      missingParameterMessage(MemberKind.NonStaticMethod)
                      reportRecoverableError(/, MissingMethodParameters)
                        listener: handleRecoverableError(MissingMethodParameters, /, /)
                      rewriter()
                      parseFormalParametersRest((, MemberKind.NonStaticMethod)
                        listener: beginFormalParameters((, MemberKind.NonStaticMethod)
                        listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
                    parseInitializersOpt())
                      parseInitializers(:)
                        listener: beginInitializers(:)
                        parseInitializer(:)
                          listener: beginInitializer(super)
                          parseSuperInitializerExpression(:)
                            parseInitializerExpressionRest(:)
                              parseExpression(:)
                                parsePrecedenceExpression(:, 1, true)
                                  parseUnaryExpression(:, true)
                                    parsePrimary(:, expression)
                                      parseSuperExpression(:, expression)
                                        listener: handleSuperExpression(super, expression)
                                        listener: handleNoTypeArguments(()
                                        parseArguments(super)
                                          parseArgumentsRest(()
                                            listener: beginArguments(()
                                            listener: endArguments(0, (, ))
                                        listener: handleSend(super, {)
                              listener: endInitializer({)
                        listener: endInitializers(1, :, {)
                    parseAsyncModifierOpt())
                      listener: handleAsyncModifier(null, null)
                      inPlainSync()
                    inPlainSync()
                    parseFunctionBody(), false, true)
                      listener: beginBlockFunctionBody({)
                      notEofOrValue(}, })
                      listener: endBlockFunctionBody(0, {, })
                    reportRecoverableError(operator, ConstructorWithWrongName)
                      listener: handleRecoverableError(ConstructorWithWrongName, /, /)
                    listener: endClassConstructor(null, operator, (, :, })
                  listener: endMember()
            notEofOrValue(}, foo)
            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, Foo)
              parseMetadataStar(})
                listener: beginMetadataStar(foo)
                listener: endMetadataStar(0)
              listener: beginMember()
              isReservedKeyword(()
              parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, foo, DeclarationKind.Class, Foo, false)
                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
                listener: handleNoType(})
                ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                  listener: handleIdentifier(foo, methodDeclaration)
                parseQualifiedRestOpt(foo, methodDeclarationContinuation)
                parseMethodTypeVar(foo)
                  listener: handleNoTypeVariables(()
                parseGetterOrFormalParameters(foo, foo, false, MemberKind.NonStaticMethod)
                  parseFormalParameters(foo, MemberKind.NonStaticMethod)
                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
                parseInitializersOpt())
                  listener: handleNoInitializers()
                parseAsyncModifierOpt())
                  listener: handleAsyncModifier(null, null)
                  inPlainSync()
                inPlainSync()
                parseFunctionBody(), false, true)
                  ensureBlock(), Instance of 'Template<(Token) => Message>', null)
                    reportRecoverableError(., Message[ExpectedFunctionBody, Expected a function body, but got '.'., null, {lexeme: .}])
                      listener: handleRecoverableError(Message[ExpectedFunctionBody, Expected a function body, but got '.'., null, {lexeme: .}], ., .)
                    insertBlock())
                      rewriter()
                      rewriter()
                  listener: handleInvalidFunctionBody({)
                listener: endClassMethod(null, foo, (, null, })
              listener: endMember()
            notEofOrValue(}, .)
            parseClassOrMixinOrExtensionMemberImpl(}, DeclarationKind.Class, Foo)
              parseMetadataStar(})
                listener: beginMetadataStar(.)
                listener: endMetadataStar(0)
              listener: beginMember()
              recoverFromInvalidMember(}, }, null, null, null, null, null, null, }, Instance of 'NoType', null, DeclarationKind.Class, Foo)
                reportRecoverableErrorWithToken(., Instance of 'Template<(Token) => Message>')
                  listener: handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got '.'., null, {lexeme: .}], ., .)
                listener: handleInvalidMember(.)
                listener: endMember()
            notEofOrValue(}, /)
            parseClassOrMixinOrExtensionMemberImpl(., DeclarationKind.Class, Foo)
              parseMetadataStar(.)
                listener: beginMetadataStar(/)
                listener: endMetadataStar(0)
              listener: beginMember()
              recoverFromInvalidMember(., ., null, null, null, null, null, null, ., Instance of 'NoType', null, DeclarationKind.Class, Foo)
                parseInvalidOperatorDeclaration(., null, null, null, null, null, null, ., DeclarationKind.Class, Foo)
                  reportRecoverableError(/, MissingOperatorKeyword)
                    listener: handleRecoverableError(MissingOperatorKeyword, /, /)
                  rewriter()
                  parseMethod(., null, null, null, null, null, null, ., Instance of 'NoType', null, operator, DeclarationKind.Class, Foo, false)
                    listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
                    listener: handleNoType(.)
                    parseOperatorName(.)
                      listener: handleOperatorName(operator, /)
                    parseMethodTypeVar(/)
                      listener: handleNoTypeVariables(:)
                    parseGetterOrFormalParameters(/, operator, false, MemberKind.NonStaticMethod)
                      missingParameterMessage(MemberKind.NonStaticMethod)
                      reportRecoverableError(/, MissingMethodParameters)
                        listener: handleRecoverableError(MissingMethodParameters, /, /)
                      rewriter()
                      parseFormalParametersRest((, MemberKind.NonStaticMethod)
                        listener: beginFormalParameters((, MemberKind.NonStaticMethod)
                        listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
                    parseInitializersOpt())
                      parseInitializers(:)
                        listener: beginInitializers(:)
                        parseInitializer(:)
                          listener: beginInitializer(super)
                          parseSuperInitializerExpression(:)
                            parseInitializerExpressionRest(:)
                              parseExpression(:)
                                parsePrecedenceExpression(:, 1, true)
                                  parseUnaryExpression(:, true)
                                    parsePrimary(:, expression)
                                      parseSuperExpression(:, expression)
                                        listener: handleSuperExpression(super, expression)
                                        listener: handleNoTypeArguments(()
                                        parseArguments(super)
                                          parseArgumentsRest(()
                                            listener: beginArguments(()
                                            listener: endArguments(0, (, ))
                                        listener: handleSend(super, {)
                              listener: endInitializer({)
                        listener: endInitializers(1, :, {)
                    parseAsyncModifierOpt())
                      listener: handleAsyncModifier(null, null)
                      inPlainSync()
                    inPlainSync()
                    parseFunctionBody(), false, true)
                      listener: beginBlockFunctionBody({)
                      notEofOrValue(}, })
                      listener: endBlockFunctionBody(0, {, })
                    reportRecoverableError(operator, ConstructorWithWrongName)
                      listener: handleRecoverableError(ConstructorWithWrongName, /, /)
                    listener: endClassConstructor(null, operator, (, :, })
                  listener: endMember()
            notEofOrValue(}, })
            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 10, {, })
          listener: endClassDeclaration(class, })
  listener: endTopLevelDeclaration()
  reportAllErrorTokens(class)
  listener: endCompilationUnit(1, )
