parseUnit(Logger)
  skipErrorTokens(Logger)
  listener: beginCompilationUnit(Logger)
  syntheticPreviousToken(Logger)
  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
    parseMetadataStar()
      listener: beginMetadataStar(Logger)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl()
      listener: beginTopLevelMember(Logger)
      parseTopLevelMethod(, null, null, , Instance of 'SimpleType', get, log, false)
        listener: beginTopLevelMethod(, null, null)
        listener: handleIdentifier(Logger, typeReference)
        listener: handleNoTypeArguments(get)
        listener: handleType(Logger, null)
        ensureIdentifierPotentiallyRecovered(get, topLevelFunctionDeclaration, false)
          listener: handleIdentifier(log, topLevelFunctionDeclaration)
        listener: handleNoTypeVariables(=>)
        parseGetterOrFormalParameters(log, log, true, MemberKind.TopLevelMethod)
          listener: handleNoFormalParameters(=>, MemberKind.TopLevelMethod)
        parseAsyncModifierOpt(log)
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        inPlainSync()
        parseFunctionBody(log, false, false)
          parseExpressionFunctionBody(=>, false)
            parseExpression(=>)
              parsePrecedenceExpression(=>, 1, true)
                parseUnaryExpression(=>, true)
                  parsePrimary(=>, expression)
                    parseSendOrFunctionLiteral(=>, expression)
                      parseSend(=>, expression)
                        isNextIdentifier(=>)
                        ensureIdentifier(=>, expression)
                          listener: handleIdentifier(Zone, expression)
                        listener: handleNoTypeArguments(.)
                        parseArgumentsOpt(Zone)
                          listener: handleNoArguments(.)
                        listener: handleSend(Zone, .)
                parsePrimary(., expressionContinuation)
                  parseSendOrFunctionLiteral(., expressionContinuation)
                    parseSend(., expressionContinuation)
                      isNextIdentifier(.)
                      ensureIdentifier(., expressionContinuation)
                        listener: handleIdentifier(current, expressionContinuation)
                      listener: handleNoTypeArguments([)
                      parseArgumentsOpt(current)
                        listener: handleNoArguments([)
                      listener: handleSend(current, [)
                listener: handleEndingBinaryExpression(.)
                parseArgumentOrIndexStar(current, Instance of 'NoTypeParamOrArg', false)
                  parseExpression([)
                    parsePrecedenceExpression([, 1, true)
                      parseUnaryExpression([, true)
                        parsePrimary([, expression)
                          parseSendOrFunctionLiteral([, expression)
                            parseSend([, expression)
                              isNextIdentifier([)
                              ensureIdentifier([, expression)
                                listener: handleIdentifier(logKey, expression)
                              listener: handleNoTypeArguments(])
                              parseArgumentsOpt(logKey)
                                listener: handleNoArguments(])
                              listener: handleSend(logKey, ])
                  listener: handleIndexedExpression(null, [, ])
                parseAsOperatorRest(])
                  listener: beginAsOperatorType(as)
                  computeTypeAfterIsOrAs(as)
                  listener: handleIdentifier(Logger, typeReference)
                  listener: handleNoTypeArguments(?)
                  listener: handleType(Logger, ?)
                  listener: endAsOperatorType(as)
                  listener: handleAsOperator(as)
                  skipChainedAsIsOperators(?)
                listener: beginBinaryExpression(??)
                parsePrecedenceExpression(??, 5, true)
                  parseUnaryExpression(??, true)
                    parsePrimary(??, expression)
                      parseSendOrFunctionLiteral(??, expression)
                        parseSend(??, expression)
                          isNextIdentifier(??)
                          ensureIdentifier(??, expression)
                            listener: handleIdentifier(_default, expression)
                          listener: handleNoTypeArguments(;)
                          parseArgumentsOpt(_default)
                            listener: handleNoArguments(;)
                          listener: handleSend(_default, ;)
                listener: endBinaryExpression(??)
            ensureSemicolon(_default)
            listener: handleExpressionFunctionBody(=>, ;)
            inGenerator()
        listener: endTopLevelMethod(Logger, get, ;)
  listener: endTopLevelDeclaration()
  reportAllErrorTokens(Logger)
  listener: endCompilationUnit(1, )
