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, f)
        listener: beginTopLevelMethod(, null)
        listener: handleVoidKeyword(void)
        ensureIdentifier(void, topLevelFunctionDeclaration)
          listener: handleIdentifier(f, topLevelFunctionDeclaration)
        parseMethodTypeVar(f)
          listener: handleNoTypeVariables(()
        parseGetterOrFormalParameters(f, f, false, MemberKind.TopLevelMethod)
          parseFormalParameters(f, MemberKind.TopLevelMethod)
            parseFormalParametersRest((, MemberKind.TopLevelMethod)
              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(dynamic)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(dynamic, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(dynamic, typeReference)
                listener: handleNoTypeArguments(sample)
                listener: handleType(dynamic, null)
                ensureIdentifier(dynamic, formalParameterDeclaration)
                  listener: handleIdentifier(sample, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, sample, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, if)
          parseStatement({)
            parseStatementX({)
              parseIfStatement({)
                listener: beginIfStatement(if)
                ensureParenthesizedCondition(if)
                  parseExpressionInParenthesisRest(()
                    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(sample, expression)
                                                listener: handleNoTypeArguments(.)
                                                parseArgumentsOpt(sample)
                                                  listener: handleNoArguments(.)
                                                listener: handleSend(sample, .)
                                        parsePrimary(., expressionContinuation)
                                          parseSendOrFunctionLiteral(., expressionContinuation)
                                            parseSend(., expressionContinuation)
                                              ensureIdentifier(., expressionContinuation)
                                                listener: handleIdentifier(value, expressionContinuation)
                                              listener: handleNoTypeArguments(!)
                                              parseArgumentsOpt(value)
                                                listener: handleNoArguments(!)
                                              listener: handleSend(value, !)
                                        listener: endBinaryExpression(.)
                                        listener: handleNonNullAssertExpression(!)
                                    ensureCloseParen(!, ()
                                listener: handleParenthesizedExpression(()
                        listener: beginBinaryExpression(<)
                        parsePrecedenceExpression(<, 9, true)
                          parseUnaryExpression(<, true)
                            parsePrimary(<, expression)
                              parseLiteralInt(<)
                                listener: handleLiteralInt(10)
                        listener: endBinaryExpression(<)
                    ensureCloseParen(10, ()
                  listener: handleParenthesizedCondition(()
                listener: beginThenStatement({)
                parseStatement())
                  parseStatementX())
                    parseBlock(), BlockKind(statement))
                      ensureBlock(), null, null)
                      listener: beginBlock({, BlockKind(statement))
                      notEofOrValue(}, print)
                      parseStatement({)
                        parseStatementX({)
                          parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
                            looksLikeLocalFunction(print)
                            parseExpressionStatement({)
                              parseExpression({)
                                parsePrecedenceExpression({, 1, true)
                                  parseUnaryExpression({, true)
                                    parsePrimary({, expression)
                                      parseSendOrFunctionLiteral({, expression)
                                        looksLikeFunctionBody(;)
                                        parseSend({, expression)
                                          ensureIdentifier({, expression)
                                            listener: handleIdentifier(print, expression)
                                          listener: handleNoTypeArguments(()
                                          parseArgumentsOpt(print)
                                            parseArguments(print)
                                              parseArgumentsRest(()
                                                listener: beginArguments(()
                                                parseExpression(()
                                                  parsePrecedenceExpression((, 1, true)
                                                    parseUnaryExpression((, true)
                                                      parsePrimary((, expression)
                                                        parseLiteralString(()
                                                          parseSingleLiteralString(()
                                                            listener: beginLiteralString('thing!')
                                                            listener: endLiteralString(0, ))
                                                listener: endArguments(1, (, ))
                                          listener: handleSend(print, ;)
                              ensureSemicolon())
                              listener: handleExpressionStatement(;)
                      notEofOrValue(}, })
                      listener: endBlock(1, {, }, BlockKind(statement))
                listener: endThenStatement(})
                listener: endIfStatement(if, null)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(1, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration()
  reportAllErrorTokens(void)
  listener: endCompilationUnit(1, )
