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, , Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(abstract)
                listener: handleType(int, null)
                ensureIdentifier(int, formalParameterDeclaration)
                  inPlainSync()
                  listener: handleIdentifier(abstract, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, abstract, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(as)
                listener: handleType(int, null)
                ensureIdentifier(int, formalParameterDeclaration)
                  inPlainSync()
                  listener: handleIdentifier(as, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, as, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleNoType(()
                ensureIdentifier((, formalParameterDeclaration)
                  listener: handleIdentifier(int, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue(assert)
                listener: endFormalParameter(null, null, int, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              ensureCloseParen(int, ()
                reportRecoverableError(assert, Message[ExpectedButGot, Expected ')' before this., null, {string: )}])
                  listener: handleRecoverableError(Message[ExpectedButGot, Expected ')' before this., null, {string: )}], assert, assert)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(async)
                listener: handleType(int, null)
                ensureIdentifier(int, formalParameterDeclaration)
                  inPlainSync()
                  listener: handleIdentifier(async, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, async, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(await)
                listener: handleType(int, null)
                ensureIdentifier(int, formalParameterDeclaration)
                  inPlainSync()
                  listener: handleIdentifier(await, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, await, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleNoType(()
                ensureIdentifier((, formalParameterDeclaration)
                  listener: handleIdentifier(int, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue(break)
                listener: endFormalParameter(null, null, int, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              ensureCloseParen(int, ()
                reportRecoverableError(break, Message[ExpectedButGot, Expected ')' before this., null, {string: )}])
                  listener: handleRecoverableError(Message[ExpectedButGot, Expected ')' before this., null, {string: )}], break, break)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleNoType(()
                ensureIdentifier((, formalParameterDeclaration)
                  listener: handleIdentifier(int, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue(case)
                listener: endFormalParameter(null, null, int, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              ensureCloseParen(int, ()
                reportRecoverableError(case, Message[ExpectedButGot, Expected ')' before this., null, {string: )}])
                  listener: handleRecoverableError(Message[ExpectedButGot, Expected ')' before this., null, {string: )}], case, case)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleNoType(()
                ensureIdentifier((, formalParameterDeclaration)
                  listener: handleIdentifier(int, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue(catch)
                listener: endFormalParameter(null, null, int, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              ensureCloseParen(int, ()
                reportRecoverableError(catch, Message[ExpectedButGot, Expected ')' before this., null, {string: )}])
                  listener: handleRecoverableError(Message[ExpectedButGot, Expected ')' before this., null, {string: )}], catch, catch)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleNoType(()
                ensureIdentifier((, formalParameterDeclaration)
                  listener: handleIdentifier(int, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue(class)
                listener: endFormalParameter(null, null, int, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              ensureCloseParen(int, ()
                reportRecoverableError(class, Message[ExpectedButGot, Expected ')' before this., null, {string: )}])
                  listener: handleRecoverableError(Message[ExpectedButGot, Expected ')' before this., null, {string: )}], class, class)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleNoType(()
                ensureIdentifier((, formalParameterDeclaration)
                  listener: handleIdentifier(int, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue(const)
                listener: endFormalParameter(null, null, int, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              ensureCloseParen(int, ()
                reportRecoverableError(const, Message[ExpectedButGot, Expected ')' before this., null, {string: )}])
                  listener: handleRecoverableError(Message[ExpectedButGot, Expected ')' before this., null, {string: )}], const, const)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleNoType(()
                ensureIdentifier((, formalParameterDeclaration)
                  listener: handleIdentifier(int, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue(continue)
                listener: endFormalParameter(null, null, int, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              ensureCloseParen(int, ()
                reportRecoverableError(continue, Message[ExpectedButGot, Expected ')' before this., null, {string: )}])
                  listener: handleRecoverableError(Message[ExpectedButGot, Expected ')' before this., null, {string: )}], continue, continue)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(covariant)
                listener: handleType(int, null)
                ensureIdentifier(int, formalParameterDeclaration)
                  inPlainSync()
                  listener: handleIdentifier(covariant, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, covariant, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleNoType(()
                ensureIdentifier((, formalParameterDeclaration)
                  listener: handleIdentifier(int, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue(default)
                listener: endFormalParameter(null, null, int, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              ensureCloseParen(int, ()
                reportRecoverableError(default, Message[ExpectedButGot, Expected ')' before this., null, {string: )}])
                  listener: handleRecoverableError(Message[ExpectedButGot, Expected ')' before this., null, {string: )}], default, default)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(deferred)
                listener: handleType(int, null)
                ensureIdentifier(int, formalParameterDeclaration)
                  inPlainSync()
                  listener: handleIdentifier(deferred, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, deferred, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleNoType(()
                ensureIdentifier((, formalParameterDeclaration)
                  listener: handleIdentifier(int, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue(do)
                listener: endFormalParameter(null, null, int, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              ensureCloseParen(int, ()
                reportRecoverableError(do, Message[ExpectedButGot, Expected ')' before this., null, {string: )}])
                  listener: handleRecoverableError(Message[ExpectedButGot, Expected ')' before this., null, {string: )}], do, do)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(dynamic)
                listener: handleType(int, null)
                ensureIdentifier(int, formalParameterDeclaration)
                  inPlainSync()
                  listener: handleIdentifier(dynamic, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, dynamic, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleNoType(()
                ensureIdentifier((, formalParameterDeclaration)
                  listener: handleIdentifier(int, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue(else)
                listener: endFormalParameter(null, null, int, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              ensureCloseParen(int, ()
                reportRecoverableError(else, Message[ExpectedButGot, Expected ')' before this., null, {string: )}])
                  listener: handleRecoverableError(Message[ExpectedButGot, Expected ')' before this., null, {string: )}], else, else)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleNoType(()
                ensureIdentifier((, formalParameterDeclaration)
                  listener: handleIdentifier(int, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue(enum)
                listener: endFormalParameter(null, null, int, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              ensureCloseParen(int, ()
                reportRecoverableError(enum, Message[ExpectedButGot, Expected ')' before this., null, {string: )}])
                  listener: handleRecoverableError(Message[ExpectedButGot, Expected ')' before this., null, {string: )}], enum, enum)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(export)
                listener: handleType(int, null)
                ensureIdentifier(int, formalParameterDeclaration)
                  inPlainSync()
                  listener: handleIdentifier(export, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, export, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleNoType(()
                ensureIdentifier((, formalParameterDeclaration)
                  listener: handleIdentifier(int, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue(extends)
                listener: endFormalParameter(null, null, int, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              ensureCloseParen(int, ()
                reportRecoverableError(extends, Message[ExpectedButGot, Expected ')' before this., null, {string: )}])
                  listener: handleRecoverableError(Message[ExpectedButGot, Expected ')' before this., null, {string: )}], extends, extends)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(extension)
                listener: handleType(int, null)
                ensureIdentifier(int, formalParameterDeclaration)
                  inPlainSync()
                  listener: handleIdentifier(extension, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, extension, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(external)
                listener: handleType(int, null)
                ensureIdentifier(int, formalParameterDeclaration)
                  inPlainSync()
                  listener: handleIdentifier(external, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, external, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(factory)
                listener: handleType(int, null)
                ensureIdentifier(int, formalParameterDeclaration)
                  inPlainSync()
                  listener: handleIdentifier(factory, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, factory, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleNoType(()
                ensureIdentifier((, formalParameterDeclaration)
                  listener: handleIdentifier(int, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue(false)
                listener: endFormalParameter(null, null, int, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              ensureCloseParen(int, ()
                reportRecoverableError(false, Message[ExpectedButGot, Expected ')' before this., null, {string: )}])
                  listener: handleRecoverableError(Message[ExpectedButGot, Expected ')' before this., null, {string: )}], false, false)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleNoType(()
                ensureIdentifier((, formalParameterDeclaration)
                  listener: handleIdentifier(int, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue(final)
                listener: endFormalParameter(null, null, int, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              ensureCloseParen(int, ()
                reportRecoverableError(final, Message[ExpectedButGot, Expected ')' before this., null, {string: )}])
                  listener: handleRecoverableError(Message[ExpectedButGot, Expected ')' before this., null, {string: )}], final, final)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleNoType(()
                ensureIdentifier((, formalParameterDeclaration)
                  listener: handleIdentifier(int, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue(finally)
                listener: endFormalParameter(null, null, int, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              ensureCloseParen(int, ()
                reportRecoverableError(finally, Message[ExpectedButGot, Expected ')' before this., null, {string: )}])
                  listener: handleRecoverableError(Message[ExpectedButGot, Expected ')' before this., null, {string: )}], finally, finally)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleNoType(()
                ensureIdentifier((, formalParameterDeclaration)
                  listener: handleIdentifier(int, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue(for)
                listener: endFormalParameter(null, null, int, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              ensureCloseParen(int, ()
                reportRecoverableError(for, Message[ExpectedButGot, Expected ')' before this., null, {string: )}])
                  listener: handleRecoverableError(Message[ExpectedButGot, Expected ')' before this., null, {string: )}], for, for)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(Function)
                listener: handleType(int, null)
                ensureIdentifier(int, formalParameterDeclaration)
                  inPlainSync()
                  listener: handleIdentifier(Function, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, Function, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(get)
                listener: handleType(int, null)
                ensureIdentifier(int, formalParameterDeclaration)
                  inPlainSync()
                  listener: handleIdentifier(get, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, get, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(hide)
                listener: handleType(int, null)
                ensureIdentifier(int, formalParameterDeclaration)
                  inPlainSync()
                  listener: handleIdentifier(hide, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, hide, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleNoType(()
                ensureIdentifier((, formalParameterDeclaration)
                  listener: handleIdentifier(int, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue(if)
                listener: endFormalParameter(null, null, int, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              ensureCloseParen(int, ()
                reportRecoverableError(if, Message[ExpectedButGot, Expected ')' before this., null, {string: )}])
                  listener: handleRecoverableError(Message[ExpectedButGot, Expected ')' before this., null, {string: )}], if, if)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(implements)
                listener: handleType(int, null)
                ensureIdentifier(int, formalParameterDeclaration)
                  inPlainSync()
                  listener: handleIdentifier(implements, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, implements, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(import)
                listener: handleType(int, null)
                ensureIdentifier(int, formalParameterDeclaration)
                  inPlainSync()
                  listener: handleIdentifier(import, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, import, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleNoType(()
                ensureIdentifier((, formalParameterDeclaration)
                  listener: handleIdentifier(int, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue(in)
                listener: endFormalParameter(null, null, int, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              ensureCloseParen(int, ()
                reportRecoverableError(in, Message[ExpectedButGot, Expected ')' before this., null, {string: )}])
                  listener: handleRecoverableError(Message[ExpectedButGot, Expected ')' before this., null, {string: )}], in, in)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(inout)
                listener: handleType(int, null)
                ensureIdentifier(int, formalParameterDeclaration)
                  inPlainSync()
                  listener: handleIdentifier(inout, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, inout, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(interface)
                listener: handleType(int, null)
                ensureIdentifier(int, formalParameterDeclaration)
                  inPlainSync()
                  listener: handleIdentifier(interface, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, interface, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleNoType(()
                ensureIdentifier((, formalParameterDeclaration)
                  listener: handleIdentifier(int, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue(is)
                listener: endFormalParameter(null, null, int, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              ensureCloseParen(int, ()
                reportRecoverableError(is, Message[ExpectedButGot, Expected ')' before this., null, {string: )}])
                  listener: handleRecoverableError(Message[ExpectedButGot, Expected ')' before this., null, {string: )}], is, is)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(late)
                listener: handleType(int, null)
                ensureIdentifier(int, formalParameterDeclaration)
                  inPlainSync()
                  listener: handleIdentifier(late, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, late, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(library)
                listener: handleType(int, null)
                ensureIdentifier(int, formalParameterDeclaration)
                  inPlainSync()
                  listener: handleIdentifier(library, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, library, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(mixin)
                listener: handleType(int, null)
                ensureIdentifier(int, formalParameterDeclaration)
                  inPlainSync()
                  listener: handleIdentifier(mixin, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, mixin, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(native)
                listener: handleType(int, null)
                ensureIdentifier(int, formalParameterDeclaration)
                  inPlainSync()
                  listener: handleIdentifier(native, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, native, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleNoType(()
                ensureIdentifier((, formalParameterDeclaration)
                  listener: handleIdentifier(int, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue(new)
                listener: endFormalParameter(null, null, int, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              ensureCloseParen(int, ()
                reportRecoverableError(new, Message[ExpectedButGot, Expected ')' before this., null, {string: )}])
                  listener: handleRecoverableError(Message[ExpectedButGot, Expected ')' before this., null, {string: )}], new, new)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleNoType(()
                ensureIdentifier((, formalParameterDeclaration)
                  listener: handleIdentifier(int, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue(null)
                listener: endFormalParameter(null, null, int, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              ensureCloseParen(int, ()
                reportRecoverableError(null, Message[ExpectedButGot, Expected ')' before this., null, {string: )}])
                  listener: handleRecoverableError(Message[ExpectedButGot, Expected ')' before this., null, {string: )}], null, null)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(of)
                listener: handleType(int, null)
                ensureIdentifier(int, formalParameterDeclaration)
                  inPlainSync()
                  listener: handleIdentifier(of, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, of, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(on)
                listener: handleType(int, null)
                ensureIdentifier(int, formalParameterDeclaration)
                  inPlainSync()
                  listener: handleIdentifier(on, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, on, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(operator)
                listener: handleType(int, null)
                ensureIdentifier(int, formalParameterDeclaration)
                  inPlainSync()
                  listener: handleIdentifier(operator, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, operator, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(out)
                listener: handleType(int, null)
                ensureIdentifier(int, formalParameterDeclaration)
                  inPlainSync()
                  listener: handleIdentifier(out, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, out, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(part)
                listener: handleType(int, null)
                ensureIdentifier(int, formalParameterDeclaration)
                  inPlainSync()
                  listener: handleIdentifier(part, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, part, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(patch)
                listener: handleType(int, null)
                ensureIdentifier(int, formalParameterDeclaration)
                  inPlainSync()
                  listener: handleIdentifier(patch, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, patch, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(required)
                listener: handleType(int, null)
                ensureIdentifier(int, formalParameterDeclaration)
                  inPlainSync()
                  listener: handleIdentifier(required, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, required, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleNoType(()
                ensureIdentifier((, formalParameterDeclaration)
                  listener: handleIdentifier(int, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue(rethrow)
                listener: endFormalParameter(null, null, int, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              ensureCloseParen(int, ()
                reportRecoverableError(rethrow, Message[ExpectedButGot, Expected ')' before this., null, {string: )}])
                  listener: handleRecoverableError(Message[ExpectedButGot, Expected ')' before this., null, {string: )}], rethrow, rethrow)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleNoType(()
                ensureIdentifier((, formalParameterDeclaration)
                  listener: handleIdentifier(int, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue(return)
                listener: endFormalParameter(null, null, int, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              ensureCloseParen(int, ()
                reportRecoverableError(return, Message[ExpectedButGot, Expected ')' before this., null, {string: )}])
                  listener: handleRecoverableError(Message[ExpectedButGot, Expected ')' before this., null, {string: )}], return, return)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(set)
                listener: handleType(int, null)
                ensureIdentifier(int, formalParameterDeclaration)
                  inPlainSync()
                  listener: handleIdentifier(set, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, set, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(show)
                listener: handleType(int, null)
                ensureIdentifier(int, formalParameterDeclaration)
                  inPlainSync()
                  listener: handleIdentifier(show, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, show, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(source)
                listener: handleType(int, null)
                ensureIdentifier(int, formalParameterDeclaration)
                  inPlainSync()
                  listener: handleIdentifier(source, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, source, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(static)
                listener: handleType(int, null)
                ensureIdentifier(int, formalParameterDeclaration)
                  inPlainSync()
                  listener: handleIdentifier(static, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, static, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleNoType(()
                ensureIdentifier((, formalParameterDeclaration)
                  listener: handleIdentifier(int, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue(super)
                listener: endFormalParameter(null, null, int, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              ensureCloseParen(int, ()
                reportRecoverableError(super, Message[ExpectedButGot, Expected ')' before this., null, {string: )}])
                  listener: handleRecoverableError(Message[ExpectedButGot, Expected ')' before this., null, {string: )}], super, super)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleNoType(()
                ensureIdentifier((, formalParameterDeclaration)
                  listener: handleIdentifier(int, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue(switch)
                listener: endFormalParameter(null, null, int, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              ensureCloseParen(int, ()
                reportRecoverableError(switch, Message[ExpectedButGot, Expected ')' before this., null, {string: )}])
                  listener: handleRecoverableError(Message[ExpectedButGot, Expected ')' before this., null, {string: )}], switch, switch)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(sync)
                listener: handleType(int, null)
                ensureIdentifier(int, formalParameterDeclaration)
                  inPlainSync()
                  listener: handleIdentifier(sync, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, sync, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                rewriteAndRecover(this, Message[ExpectedButGot, Expected '.' before this., null, {string: .}], .)
                  reportRecoverableError(), Message[ExpectedButGot, Expected '.' before this., null, {string: .}])
                    listener: handleRecoverableError(Message[ExpectedButGot, Expected '.' before this., null, {string: .}], ), ))
                  rewriter()
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(this)
                listener: handleType(int, null)
                ensureIdentifier(., fieldInitializer)
                  reportRecoverableErrorWithToken(), Instance of 'Template<(Token) => Message>')
                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., Try inserting an identifier before ')'., {lexeme: )}], ), ))
                  rewriter()
                  listener: handleIdentifier(, fieldInitializer)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(this, ., , null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleNoType(()
                ensureIdentifier((, formalParameterDeclaration)
                  listener: handleIdentifier(int, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue(throw)
                listener: endFormalParameter(null, null, int, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              ensureCloseParen(int, ()
                reportRecoverableError(throw, Message[ExpectedButGot, Expected ')' before this., null, {string: )}])
                  listener: handleRecoverableError(Message[ExpectedButGot, Expected ')' before this., null, {string: )}], throw, throw)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleNoType(()
                ensureIdentifier((, formalParameterDeclaration)
                  listener: handleIdentifier(int, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue(true)
                listener: endFormalParameter(null, null, int, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              ensureCloseParen(int, ()
                reportRecoverableError(true, Message[ExpectedButGot, Expected ')' before this., null, {string: )}])
                  listener: handleRecoverableError(Message[ExpectedButGot, Expected ')' before this., null, {string: )}], true, true)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleNoType(()
                ensureIdentifier((, formalParameterDeclaration)
                  listener: handleIdentifier(int, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue(try)
                listener: endFormalParameter(null, null, int, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              ensureCloseParen(int, ()
                reportRecoverableError(try, Message[ExpectedButGot, Expected ')' before this., null, {string: )}])
                  listener: handleRecoverableError(Message[ExpectedButGot, Expected ')' before this., null, {string: )}], try, try)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(typedef)
                listener: handleType(int, null)
                ensureIdentifier(int, formalParameterDeclaration)
                  inPlainSync()
                  listener: handleIdentifier(typedef, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, typedef, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleNoType(()
                ensureIdentifier((, formalParameterDeclaration)
                  listener: handleIdentifier(int, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue(var)
                listener: endFormalParameter(null, null, int, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              ensureCloseParen(int, ()
                reportRecoverableError(var, Message[ExpectedButGot, Expected ')' before this., null, {string: )}])
                  listener: handleRecoverableError(Message[ExpectedButGot, Expected ')' before this., null, {string: )}], var, var)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleNoType(()
                ensureIdentifier((, formalParameterDeclaration)
                  listener: handleIdentifier(int, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue(void)
                listener: endFormalParameter(null, null, int, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              ensureCloseParen(int, ()
                reportRecoverableError(void, Message[ExpectedButGot, Expected ')' before this., null, {string: )}])
                  listener: handleRecoverableError(Message[ExpectedButGot, Expected ')' before this., null, {string: )}], void, void)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleNoType(()
                ensureIdentifier((, formalParameterDeclaration)
                  listener: handleIdentifier(int, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue(while)
                listener: endFormalParameter(null, null, int, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              ensureCloseParen(int, ()
                reportRecoverableError(while, Message[ExpectedButGot, Expected ')' before this., null, {string: )}])
                  listener: handleRecoverableError(Message[ExpectedButGot, Expected ')' before this., null, {string: )}], while, while)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleNoType(()
                ensureIdentifier((, formalParameterDeclaration)
                  listener: handleIdentifier(int, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue(with)
                listener: endFormalParameter(null, null, int, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              ensureCloseParen(int, ()
                reportRecoverableError(with, Message[ExpectedButGot, Expected ')' before this., null, {string: )}])
                  listener: handleRecoverableError(Message[ExpectedButGot, Expected ')' before this., null, {string: )}], with, with)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
        listener: beginTopLevelMethod(}, 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.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(yield)
                listener: handleType(int, null)
                ensureIdentifier(int, formalParameterDeclaration)
                  inPlainSync()
                  listener: handleIdentifier(yield, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, yield, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration()
  reportAllErrorTokens(void)
  listener: endCompilationUnit(69, )
