beginCompilationUnit(void)
  beginMetadataStar(void)
  endMetadataStar(0)
  beginTopLevelMember(void)
    beginTopLevelMethod(, null, null)
      handleVoidKeyword(void)
      handleIdentifier(f, topLevelFunctionDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.TopLevelMethod)
        beginMetadataStar(x)
        endMetadataStar(0)
        beginFormalParameter(x, MemberKind.TopLevelMethod, null, null, null)
          handleNoType(()
          handleIdentifier(x, formalParameterDeclaration)
          handleFormalParameterWithoutValue())
        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      beginBlockFunctionBody({)
        beginSwitchStatement(switch)
          handleIdentifier(x, expression)
          handleNoTypeArguments())
          handleNoArguments())
          handleSend(x, ))
          handleParenthesizedCondition((, null, null)
          beginSwitchBlock({)
            beginCaseExpression(case)
              handleNoTypeArguments([)
              handleLiteralNull(null)
              handleRelationalPattern(==)
              handleRestPattern(..., true)
              handleListPattern(1, [, ])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              handleNoTypeArguments([)
              handleLiteralNull(null)
              handleRelationalPattern(!=)
              handleRestPattern(..., true)
              handleListPattern(1, [, ])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              handleNoTypeArguments([)
              handleLiteralInt(0)
              handleRelationalPattern(<)
              handleRestPattern(..., true)
              handleListPattern(1, [, ])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              handleNoTypeArguments([)
              handleLiteralInt(0)
              handleRelationalPattern(>)
              handleRestPattern(..., true)
              handleListPattern(1, [, ])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              handleNoTypeArguments([)
              handleLiteralInt(0)
              handleRelationalPattern(<=)
              handleRestPattern(..., true)
              handleListPattern(1, [, ])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              handleNoTypeArguments([)
              handleLiteralInt(0)
              handleRelationalPattern(>=)
              handleRestPattern(..., true)
              handleListPattern(1, [, ])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              handleNoTypeArguments([)
              beginConstantPattern(null)
                handleLiteralInt(0)
              endConstantPattern(null)
              handleRestPattern(..., true)
              handleListPattern(1, [, ])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              handleNoTypeArguments([)
              beginConstantPattern(null)
                handleLiteralDouble(0.0)
              endConstantPattern(null)
              handleRestPattern(..., true)
              handleListPattern(1, [, ])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              handleNoTypeArguments([)
              beginConstantPattern(null)
                handleLiteralInt(0x0)
              endConstantPattern(null)
              handleRestPattern(..., true)
              handleListPattern(1, [, ])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              handleNoTypeArguments([)
              beginConstantPattern(null)
                handleLiteralNull(null)
              endConstantPattern(null)
              handleRestPattern(..., true)
              handleListPattern(1, [, ])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              handleNoTypeArguments([)
              beginConstantPattern(null)
                handleLiteralBool(false)
              endConstantPattern(null)
              handleRestPattern(..., true)
              handleListPattern(1, [, ])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              handleNoTypeArguments([)
              beginConstantPattern(null)
                handleLiteralBool(true)
              endConstantPattern(null)
              handleRestPattern(..., true)
              handleListPattern(1, [, ])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              handleNoTypeArguments([)
              beginConstantPattern(null)
                beginLiteralString('foo')
                endLiteralString(0, ])
              endConstantPattern(null)
              handleRestPattern(..., true)
              handleListPattern(1, [, ])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              handleNoTypeArguments([)
              beginConstantPattern(null)
                handleIdentifier(x, expression)
                handleNoTypeArguments(])
                handleNoArguments(])
                handleSend(x, ])
              endConstantPattern(null)
              handleRestPattern(..., true)
              handleListPattern(1, [, ])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              handleNoTypeArguments([)
              beginConstantPattern(const)
                handleIdentifier(List, expression)
                handleNoTypeArguments(()
                beginArguments(()
                endArguments(0, (, ))
                handleSend(List, ])
              endConstantPattern(const)
              handleRestPattern(..., true)
              handleListPattern(1, [, ])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              handleNoTypeArguments([)
              handleNoType(var)
              handleDeclaredVariablePattern(var, x, false)
              handleRestPattern(..., true)
              handleListPattern(1, [, ])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              handleNoTypeArguments([)
              handleNoType(final)
              handleDeclaredVariablePattern(final, x, false)
              handleRestPattern(..., true)
              handleListPattern(1, [, ])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              handleNoTypeArguments([)
              handleIdentifier(List, typeReference)
              handleNoTypeArguments(x)
              handleType(List, null)
              handleDeclaredVariablePattern(null, x, false)
              handleRestPattern(..., true)
              handleListPattern(1, [, ])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              handleNoTypeArguments([)
              handleNoType(_)
              handleWildcardPattern(null, _)
              handleRestPattern(..., true)
              handleListPattern(1, [, ])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              handleNoTypeArguments([)
              handleNoType(_)
              handleWildcardPattern(null, _)
              handleParenthesizedPattern(()
              handleRestPattern(..., true)
              handleListPattern(1, [, ])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              handleNoTypeArguments([)
              handleNoTypeArguments([)
              handleNoType(_)
              handleWildcardPattern(null, _)
              handleListPattern(1, [, ])
              handleRestPattern(..., true)
              handleListPattern(1, [, ])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              handleNoTypeArguments([)
              handleNoTypeArguments([])
              handleListPattern(0, [, ])
              handleRestPattern(..., true)
              handleListPattern(1, [, ])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              handleNoTypeArguments([)
              beginTypeArguments(<)
                handleIdentifier(int, typeReference)
                handleNoTypeArguments(>)
                handleType(int, null)
              endTypeArguments(1, <, >)
              handleListPattern(0, [, ])
              handleRestPattern(..., true)
              handleListPattern(1, [, ])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              handleNoTypeArguments([)
              handleNoTypeArguments({)
              handleMapPattern(0, {, })
              handleRestPattern(..., true)
              handleListPattern(1, [, ])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              handleNoTypeArguments([)
              handleNoTypeArguments(()
              handleObjectPatternFields(0, (, ))
              handleObjectPattern(List, null, null)
              handleRestPattern(..., true)
              handleListPattern(1, [, ])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginSwitchCase(0, 25, case)
              handleBreakStatement(false, break, ;)
            endSwitchCase(0, 25, null, null, 1, case, })
          endSwitchBlock(1, {, })
        endSwitchStatement(switch, })
      endBlockFunctionBody(1, {, })
    endTopLevelMethod(void, null, })
  endTopLevelDeclaration()
endCompilationUnit(1, )
