beginCompilationUnit(f)
  beginMetadataStar(f)
  endMetadataStar(0)
  beginTopLevelMember(f)
    beginTopLevelMethod(, null, null)
      handleNoType()
      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)
      beginSwitchExpression(switch)
        handleIdentifier(x, expression)
        handleNoTypeArguments())
        handleNoArguments())
        handleSend(x, ))
        handleParenthesizedCondition((, null, null)
        beginSwitchExpressionBlock({)
          beginSwitchExpressionCase()
            handleIdentifier(int, typeReference)
            handleNoTypeArguments(_)
            handleType(int, null)
            handleVariablePattern(null, _, false)
            handleSwitchExpressionCasePattern(_)
            handleLiteralInt(0)
          endSwitchExpressionCase(null, =>, 0)
          beginSwitchExpressionCase()
            handleNoType(,)
            handleVariablePattern(null, _, false)
            handleSwitchExpressionCasePattern(_)
            handleLiteralInt(1)
          endSwitchExpressionCase(null, =>, 1)
        endSwitchExpressionBlock(2, {, })
      endSwitchExpression(switch, })
      handleExpressionFunctionBody(=>, ;)
    endTopLevelMethod(f, null, ;)
  endTopLevelDeclaration()
endCompilationUnit(1, )
