beginCompilationUnit(main)
  beginMetadataStar(main)
  endMetadataStar(0)
  beginTopLevelMember(main)
    beginTopLevelMethod(, null)
      handleNoType()
      handleIdentifier(main, topLevelFunctionDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.TopLevelMethod)
      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      beginBlockFunctionBody({)
        beginSwitchStatement(switch)
          handleIdentifier(a, expression)
          handleNoTypeArguments())
          handleNoArguments())
          handleSend(a, ))
          handleParenthesizedCondition(()
          beginSwitchBlock({)
            beginCaseExpression(case)
              handleIdentifier(b, expression)
              handleNoTypeArguments(?)
              handleNoArguments(?)
              handleSend(b, ?)
              beginConditionalExpression(?)
                handleNoTypeArguments([)
                handleIdentifier(c, expression)
                handleNoTypeArguments(])
                handleNoArguments(])
                handleSend(c, ])
                handleLiteralList(1, [, null, ])
                handleConditionalExpressionColon()
                handleIdentifier(d, expression)
                handleNoTypeArguments(:)
                handleNoArguments(:)
                handleSend(d, :)
              endConditionalExpression(?, :)
            endCaseExpression(:)
            handleCaseMatch(case, :)
            beginSwitchCase(0, 1, case)
              handleIdentifier(e, expression)
              handleNoTypeArguments(;)
              handleNoArguments(;)
              handleSend(e, ;)
              handleExpressionStatement(;)
            endSwitchCase(0, 1, null, null, 1, case, })
          endSwitchBlock(1, {, })
        endSwitchStatement(switch, })
      endBlockFunctionBody(1, {, })
    endTopLevelMethod(main, null, })
  endTopLevelDeclaration()
endCompilationUnit(1, )
