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: beginClassOrNamedMixinApplicationPrelude(class)
        ensureIdentifier(class, classOrMixinDeclaration)
          listener: handleIdentifier(A, classOrMixinDeclaration)
        listener: handleNoTypeVariables({)
        listener: beginClassDeclaration(class, null, A)
        parseClass(A, class, class, A)
          parseClassHeaderOpt(A, class, class)
            parseClassExtendsOpt(A)
              listener: handleNoType(A)
              listener: handleClassExtends(null)
            parseWithClauseOpt(A)
              listener: handleClassNoWithClause()
            parseClassOrMixinImplementsOpt(A)
              listener: handleClassOrMixinImplements(null, 0)
            listener: handleClassHeader(class, class, null)
          parseClassOrMixinOrExtensionBody(A, DeclarationKind.Class, A)
            listener: beginClassOrMixinBody(DeclarationKind.Class, {)
            notEofOrValue(}, co)
            parseClassOrMixinOrExtensionMemberImpl({, DeclarationKind.Class, A)
              parseMetadataStar({)
                listener: beginMetadataStar(co)
                listener: endMetadataStar(0)
              listener: beginMember()
              parseInvalidOperatorDeclaration({, null, null, null, null, null, {, DeclarationKind.Class, A)
                reportRecoverableError(<, MissingOperatorKeyword)
                  listener: handleRecoverableError(MissingOperatorKeyword, <, <)
                rewriter()
                parseMethod({, null, null, null, null, null, {, Instance of 'SimpleType', null, operator, DeclarationKind.Class, A)
                  listener: beginMethod(null, null, null, null, null, operator)
                  listener: handleIdentifier(co, typeReference)
                  listener: handleNoTypeArguments(operator)
                  listener: handleType(co, null)
                  parseOperatorName(co)
                    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())
                    listener: handleNoInitializers()
                  parseAsyncModifierOpt())
                    listener: handleAsyncModifier(null, null)
                    inPlainSync()
                  inPlainSync()
                  parseFunctionBody(), false, true)
                    listener: beginBlockFunctionBody({)
                    notEofOrValue(}, })
                    listener: endBlockFunctionBody(0, {, })
                  listener: endClassMethod(null, co, (, null, })
                listener: endMember()
            notEofOrValue(}, })
            listener: endClassOrMixinBody(DeclarationKind.Class, 1, {, })
          listener: endClassDeclaration(class, })
  listener: endTopLevelDeclaration()
  reportAllErrorTokens(class)
  listener: endCompilationUnit(1, )
