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, , Instance of 'SimpleType', get, log)
        listener: beginTopLevelMethod(, null)
        listener: handleIdentifier(Logger, typeReference)
        listener: handleNoTypeArguments(get)
        listener: handleType(Logger, null)
        ensureIdentifier(get, topLevelFunctionDeclaration)
          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)
                    parseParenthesizedExpressionOrFunctionLiteral(=>)
                      parseParenthesizedExpression(=>)
                        parseExpressionInParenthesis(=>)
                          parseExpressionInParenthesisRest(()
                            parseExpression(()
                              parsePrecedenceExpression((, 1, true)
                                parseUnaryExpression((, true)
                                  parsePrimary((, expression)
                                    parseSendOrFunctionLiteral((, expression)
                                      parseSend((, expression)
                                        ensureIdentifier((, expression)
                                          listener: handleIdentifier(Zone, expression)
                                        listener: handleNoTypeArguments(.)
                                        parseArgumentsOpt(Zone)
                                          listener: handleNoArguments(.)
                                        listener: handleSend(Zone, .)
                                parsePrimary(., expressionContinuation)
                                  parseSendOrFunctionLiteral(., expressionContinuation)
                                    parseSend(., expressionContinuation)
                                      ensureIdentifier(., expressionContinuation)
                                        listener: handleIdentifier(current, expressionContinuation)
                                      listener: handleNoTypeArguments([)
                                      parseArgumentsOpt(current)
                                        listener: handleNoArguments([)
                                      listener: handleSend(current, [)
                                listener: endBinaryExpression(.)
                                parseArgumentOrIndexStar(current, Instance of 'NoTypeParamOrArg', false)
                                  parseExpression([)
                                    parsePrecedenceExpression([, 1, true)
                                      parseUnaryExpression([, true)
                                        parsePrimary([, expression)
                                          parseSendOrFunctionLiteral([, expression)
                                            parseSend([, expression)
                                              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(?)
                            ensureCloseParen(?, ()
                        listener: handleParenthesizedExpression(()
                listener: beginBinaryExpression(??)
                parsePrecedenceExpression(??, 5, true)
                  parseUnaryExpression(??, true)
                    parsePrimary(??, expression)
                      parseSendOrFunctionLiteral(??, expression)
                        parseSend(??, expression)
                          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, )
