beginCompilationUnit(method1)
  beginMetadataStar(method1)
  endMetadataStar(0)
  beginTopLevelMember(method1)
    beginTopLevelMethod(, null, null)
      handleNoType()
      handleIdentifier(method1, topLevelFunctionDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.TopLevelMethod)
        beginMetadataStar(o)
        endMetadataStar(0)
        beginFormalParameter(o, MemberKind.TopLevelMethod, null, null, null)
          handleNoType(()
          handleIdentifier(o, formalParameterDeclaration)
          handleFormalParameterWithoutValue())
        endFormalParameter(null, null, null, o, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      beginSwitchExpression(switch)
        handleIdentifier(o, expression)
        handleNoTypeArguments())
        handleNoArguments())
        handleSend(o, ))
        handleParenthesizedCondition((, null, null)
        beginSwitchExpressionBlock({)
          beginSwitchExpressionCase()
            beginPattern({)
              handleIdentifier(int, typeReference)
              handleNoTypeArguments(a)
              handleType(int, null)
              handleDeclaredVariablePattern(final, a, false)
            endPattern(a)
            handleSwitchExpressionCasePattern(a)
            beginLiteralString('working')
            endLiteralString(0, ,)
          endSwitchExpressionCase(null, =>, 'working')
          beginSwitchExpressionCase()
            beginPattern(,)
              handleIdentifier(String, typeReference)
              handleNoTypeArguments(a)
              handleType(String, null)
              handleDeclaredVariablePattern(final, a, false)
            endPattern(a)
            handleSwitchExpressionCasePattern(a)
            beginLiteralString('working')
            endLiteralString(0, ,)
          endSwitchExpressionCase(null, =>, 'working')
          beginSwitchExpressionCase()
            beginPattern(,)
              beginRecordType(()
              endRecordType((, null, 0, false)
              handleDeclaredVariablePattern(final, a, false)
            endPattern(a)
            handleSwitchExpressionCasePattern(a)
            beginLiteralString('working')
            endLiteralString(0, ,)
          endSwitchExpressionCase(null, =>, 'working')
          beginSwitchExpressionCase()
            beginPattern(,)
              beginRecordType(()
                beginRecordTypeEntry()
                  beginMetadataStar(int)
                  endMetadataStar(0)
                  handleIdentifier(int, typeReference)
                  handleNoTypeArguments(,)
                  handleType(int, null)
                  handleNoName(,)
                endRecordTypeEntry()
                beginRecordTypeEntry()
                  beginMetadataStar(String)
                  endMetadataStar(0)
                  handleIdentifier(String, typeReference)
                  handleNoTypeArguments())
                  handleType(String, null)
                  handleNoName())
                endRecordTypeEntry()
              endRecordType((, null, 2, false)
              handleDeclaredVariablePattern(final, a, false)
            endPattern(a)
            handleSwitchExpressionCasePattern(a)
            beginLiteralString('working')
            endLiteralString(0, ,)
          endSwitchExpressionCase(null, =>, 'working')
          beginSwitchExpressionCase()
            beginPattern(,)
              handleIdentifier(int, typeReference)
              handleNoTypeArguments(a)
              handleType(int, null)
              handleDeclaredVariablePattern(final, a, false)
              handleNullCheckPattern(?)
            endPattern(?)
            handleSwitchExpressionCasePattern(?)
            beginLiteralString('working')
            endLiteralString(0, ,)
          endSwitchExpressionCase(null, =>, 'working')
          beginSwitchExpressionCase()
            beginPattern(,)
              handleIdentifier(String, typeReference)
              handleNoTypeArguments(a)
              handleType(String, null)
              handleDeclaredVariablePattern(final, a, false)
              handleNullCheckPattern(?)
            endPattern(?)
            handleSwitchExpressionCasePattern(?)
            beginLiteralString('working')
            endLiteralString(0, ,)
          endSwitchExpressionCase(null, =>, 'working')
          beginSwitchExpressionCase()
            beginPattern(,)
              beginRecordType(()
              endRecordType((, null, 0, false)
              handleDeclaredVariablePattern(final, a, false)
              handleNullCheckPattern(?)
            endPattern(?)
            handleSwitchExpressionCasePattern(?)
            beginLiteralString('working')
            endLiteralString(0, ,)
          endSwitchExpressionCase(null, =>, 'working')
          beginSwitchExpressionCase()
            beginPattern(,)
              beginRecordType(()
                beginRecordTypeEntry()
                  beginMetadataStar(int)
                  endMetadataStar(0)
                  handleIdentifier(int, typeReference)
                  handleNoTypeArguments(,)
                  handleType(int, null)
                  handleNoName(,)
                endRecordTypeEntry()
                beginRecordTypeEntry()
                  beginMetadataStar(String)
                  endMetadataStar(0)
                  handleIdentifier(String, typeReference)
                  handleNoTypeArguments())
                  handleType(String, null)
                  handleNoName())
                endRecordTypeEntry()
              endRecordType((, null, 2, false)
              handleDeclaredVariablePattern(final, a, false)
              handleNullCheckPattern(?)
            endPattern(?)
            handleSwitchExpressionCasePattern(?)
            beginLiteralString('working')
            endLiteralString(0, ,)
          endSwitchExpressionCase(null, =>, 'working')
          beginSwitchExpressionCase()
            beginPattern(,)
              handleNoName(()
              beginPattern(:)
                beginRecordType(()
                endRecordType((, null, 0, false)
                handleDeclaredVariablePattern(final, a, false)
              endPattern(a)
              handlePatternField(:)
              handleRecordPattern((, 1)
            endPattern())
            handleSwitchExpressionCasePattern())
            beginLiteralString('working')
            endLiteralString(0, ,)
          endSwitchExpressionCase(null, =>, 'working')
          beginSwitchExpressionCase()
            beginPattern(,)
              handleNoName(()
              beginPattern(:)
                beginRecordType(()
                  beginRecordTypeEntry()
                    beginMetadataStar(int)
                    endMetadataStar(0)
                    handleIdentifier(int, typeReference)
                    handleNoTypeArguments(,)
                    handleType(int, null)
                    handleNoName(,)
                  endRecordTypeEntry()
                  beginRecordTypeEntry()
                    beginMetadataStar(String)
                    endMetadataStar(0)
                    handleIdentifier(String, typeReference)
                    handleNoTypeArguments())
                    handleType(String, null)
                    handleNoName())
                  endRecordTypeEntry()
                endRecordType((, null, 2, false)
                handleDeclaredVariablePattern(final, a, false)
              endPattern(a)
              handlePatternField(:)
              handleRecordPattern((, 1)
            endPattern())
            handleSwitchExpressionCasePattern())
            beginLiteralString('working')
            endLiteralString(0, ,)
          endSwitchExpressionCase(null, =>, 'working')
          beginSwitchExpressionCase()
            beginPattern(,)
              handleNoName(()
              beginPattern(:)
                handleIdentifier(int, typeReference)
                handleNoTypeArguments(a)
                handleType(int, null)
                handleDeclaredVariablePattern(final, a, false)
                handleNullCheckPattern(?)
              endPattern(?)
              handlePatternField(:)
              handleRecordPattern((, 1)
            endPattern())
            handleSwitchExpressionCasePattern())
            beginLiteralString('working')
            endLiteralString(0, ,)
          endSwitchExpressionCase(null, =>, 'working')
          beginSwitchExpressionCase()
            beginPattern(,)
              handleNoName(()
              beginPattern(:)
                handleIdentifier(String, typeReference)
                handleNoTypeArguments(a)
                handleType(String, null)
                handleDeclaredVariablePattern(final, a, false)
                handleNullCheckPattern(?)
              endPattern(?)
              handlePatternField(:)
              handleRecordPattern((, 1)
            endPattern())
            handleSwitchExpressionCasePattern())
            beginLiteralString('working')
            endLiteralString(0, ,)
          endSwitchExpressionCase(null, =>, 'working')
          beginSwitchExpressionCase()
            beginPattern(,)
              handleNoName(()
              beginPattern(:)
                beginRecordType(()
                endRecordType((, null, 0, false)
                handleDeclaredVariablePattern(final, a, false)
                handleNullCheckPattern(?)
              endPattern(?)
              handlePatternField(:)
              handleRecordPattern((, 1)
            endPattern())
            handleSwitchExpressionCasePattern())
            beginLiteralString('working')
            endLiteralString(0, ,)
          endSwitchExpressionCase(null, =>, 'working')
          beginSwitchExpressionCase()
            beginPattern(,)
              handleNoName(()
              beginPattern(:)
                beginRecordType(()
                  beginRecordTypeEntry()
                    beginMetadataStar(int)
                    endMetadataStar(0)
                    handleIdentifier(int, typeReference)
                    handleNoTypeArguments(,)
                    handleType(int, null)
                    handleNoName(,)
                  endRecordTypeEntry()
                  beginRecordTypeEntry()
                    beginMetadataStar(String)
                    endMetadataStar(0)
                    handleIdentifier(String, typeReference)
                    handleNoTypeArguments())
                    handleType(String, null)
                    handleNoName())
                  endRecordTypeEntry()
                endRecordType((, null, 2, false)
                handleDeclaredVariablePattern(final, a, false)
                handleNullCheckPattern(?)
              endPattern(?)
              handlePatternField(:)
              handleRecordPattern((, 1)
            endPattern())
            handleSwitchExpressionCasePattern())
            beginLiteralString('working')
            endLiteralString(0, ,)
          endSwitchExpressionCase(null, =>, 'working')
          beginSwitchExpressionCase()
            beginPattern(,)
              handleNoType(_)
              handleWildcardPattern(null, _)
            endPattern(_)
            handleSwitchExpressionCasePattern(_)
            beginLiteralString('')
            endLiteralString(0, ,)
          endSwitchExpressionCase(null, =>, '')
        endSwitchExpressionBlock(15, {, })
      endSwitchExpression(switch, })
      handleExpressionFunctionBody(=>, ;)
    endTopLevelMethod(method1, null, ;)
  endTopLevelDeclaration(method2)
  beginMetadataStar(method2)
  endMetadataStar(0)
  beginTopLevelMember(method2)
    beginTopLevelMethod(;, null, null)
      handleNoType(;)
      handleIdentifier(method2, topLevelFunctionDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.TopLevelMethod)
        beginMetadataStar(o)
        endMetadataStar(0)
        beginFormalParameter(o, MemberKind.TopLevelMethod, null, null, null)
          handleNoType(()
          handleIdentifier(o, formalParameterDeclaration)
          handleFormalParameterWithoutValue())
        endFormalParameter(null, null, null, o, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      beginSwitchExpression(switch)
        handleIdentifier(o, expression)
        handleNoTypeArguments())
        handleNoArguments())
        handleSend(o, ))
        handleParenthesizedCondition((, null, null)
        beginSwitchExpressionBlock({)
          beginSwitchExpressionCase()
            beginPattern({)
              handleIdentifier(int, typeReference)
              handleNoTypeArguments(async)
              handleType(int, null)
              handleDeclaredVariablePattern(final, async, false)
            endPattern(async)
            handleSwitchExpressionCasePattern(async)
            beginLiteralString('working')
            endLiteralString(0, ,)
          endSwitchExpressionCase(null, =>, 'working')
          beginSwitchExpressionCase()
            beginPattern(,)
              handleIdentifier(String, typeReference)
              handleNoTypeArguments(async)
              handleType(String, null)
              handleDeclaredVariablePattern(final, async, false)
            endPattern(async)
            handleSwitchExpressionCasePattern(async)
            beginLiteralString('working')
            endLiteralString(0, ,)
          endSwitchExpressionCase(null, =>, 'working')
          beginSwitchExpressionCase()
            beginPattern(,)
              beginRecordType(()
              endRecordType((, null, 0, false)
              handleDeclaredVariablePattern(final, async, false)
            endPattern(async)
            handleSwitchExpressionCasePattern(async)
            beginLiteralString('working')
            endLiteralString(0, ,)
          endSwitchExpressionCase(null, =>, 'working')
          beginSwitchExpressionCase()
            beginPattern(,)
              beginRecordType(()
                beginRecordTypeEntry()
                  beginMetadataStar(int)
                  endMetadataStar(0)
                  handleIdentifier(int, typeReference)
                  handleNoTypeArguments(,)
                  handleType(int, null)
                  handleNoName(,)
                endRecordTypeEntry()
                beginRecordTypeEntry()
                  beginMetadataStar(String)
                  endMetadataStar(0)
                  handleIdentifier(String, typeReference)
                  handleNoTypeArguments())
                  handleType(String, null)
                  handleNoName())
                endRecordTypeEntry()
              endRecordType((, null, 2, false)
              handleDeclaredVariablePattern(final, async, false)
            endPattern(async)
            handleSwitchExpressionCasePattern(async)
            beginLiteralString('working')
            endLiteralString(0, ,)
          endSwitchExpressionCase(null, =>, 'working')
          beginSwitchExpressionCase()
            beginPattern(,)
              handleIdentifier(int, typeReference)
              handleNoTypeArguments(async)
              handleType(int, null)
              handleDeclaredVariablePattern(final, async, false)
              handleNullCheckPattern(?)
            endPattern(?)
            handleSwitchExpressionCasePattern(?)
            beginLiteralString('working')
            endLiteralString(0, ,)
          endSwitchExpressionCase(null, =>, 'working')
          beginSwitchExpressionCase()
            beginPattern(,)
              handleIdentifier(String, typeReference)
              handleNoTypeArguments(async)
              handleType(String, null)
              handleDeclaredVariablePattern(final, async, false)
              handleNullCheckPattern(?)
            endPattern(?)
            handleSwitchExpressionCasePattern(?)
            beginLiteralString('working')
            endLiteralString(0, ,)
          endSwitchExpressionCase(null, =>, 'working')
          beginSwitchExpressionCase()
            beginPattern(,)
              beginRecordType(()
              endRecordType((, null, 0, false)
              handleDeclaredVariablePattern(final, async, false)
              handleNullCheckPattern(?)
            endPattern(?)
            handleSwitchExpressionCasePattern(?)
            beginLiteralString('working')
            endLiteralString(0, ,)
          endSwitchExpressionCase(null, =>, 'working')
          beginSwitchExpressionCase()
            beginPattern(,)
              beginRecordType(()
                beginRecordTypeEntry()
                  beginMetadataStar(int)
                  endMetadataStar(0)
                  handleIdentifier(int, typeReference)
                  handleNoTypeArguments(,)
                  handleType(int, null)
                  handleNoName(,)
                endRecordTypeEntry()
                beginRecordTypeEntry()
                  beginMetadataStar(String)
                  endMetadataStar(0)
                  handleIdentifier(String, typeReference)
                  handleNoTypeArguments())
                  handleType(String, null)
                  handleNoName())
                endRecordTypeEntry()
              endRecordType((, null, 2, false)
              handleDeclaredVariablePattern(final, async, false)
              handleNullCheckPattern(?)
            endPattern(?)
            handleSwitchExpressionCasePattern(?)
            beginLiteralString('working')
            endLiteralString(0, ,)
          endSwitchExpressionCase(null, =>, 'working')
          beginSwitchExpressionCase()
            beginPattern(,)
              handleNoName(()
              beginPattern(:)
                beginRecordType(()
                endRecordType((, null, 0, false)
                handleDeclaredVariablePattern(final, async, false)
              endPattern(async)
              handlePatternField(:)
              handleRecordPattern((, 1)
            endPattern())
            handleSwitchExpressionCasePattern())
            beginLiteralString('working')
            endLiteralString(0, ,)
          endSwitchExpressionCase(null, =>, 'working')
          beginSwitchExpressionCase()
            beginPattern(,)
              handleNoName(()
              beginPattern(:)
                beginRecordType(()
                  beginRecordTypeEntry()
                    beginMetadataStar(int)
                    endMetadataStar(0)
                    handleIdentifier(int, typeReference)
                    handleNoTypeArguments(,)
                    handleType(int, null)
                    handleNoName(,)
                  endRecordTypeEntry()
                  beginRecordTypeEntry()
                    beginMetadataStar(String)
                    endMetadataStar(0)
                    handleIdentifier(String, typeReference)
                    handleNoTypeArguments())
                    handleType(String, null)
                    handleNoName())
                  endRecordTypeEntry()
                endRecordType((, null, 2, false)
                handleDeclaredVariablePattern(final, async, false)
              endPattern(async)
              handlePatternField(:)
              handleRecordPattern((, 1)
            endPattern())
            handleSwitchExpressionCasePattern())
            beginLiteralString('working')
            endLiteralString(0, ,)
          endSwitchExpressionCase(null, =>, 'working')
          beginSwitchExpressionCase()
            beginPattern(,)
              handleNoName(()
              beginPattern(:)
                handleIdentifier(int, typeReference)
                handleNoTypeArguments(async)
                handleType(int, null)
                handleDeclaredVariablePattern(final, async, false)
                handleNullCheckPattern(?)
              endPattern(?)
              handlePatternField(:)
              handleRecordPattern((, 1)
            endPattern())
            handleSwitchExpressionCasePattern())
            beginLiteralString('working')
            endLiteralString(0, ,)
          endSwitchExpressionCase(null, =>, 'working')
          beginSwitchExpressionCase()
            beginPattern(,)
              handleNoName(()
              beginPattern(:)
                handleIdentifier(String, typeReference)
                handleNoTypeArguments(async)
                handleType(String, null)
                handleDeclaredVariablePattern(final, async, false)
                handleNullCheckPattern(?)
              endPattern(?)
              handlePatternField(:)
              handleRecordPattern((, 1)
            endPattern())
            handleSwitchExpressionCasePattern())
            beginLiteralString('working')
            endLiteralString(0, ,)
          endSwitchExpressionCase(null, =>, 'working')
          beginSwitchExpressionCase()
            beginPattern(,)
              handleNoName(()
              beginPattern(:)
                beginRecordType(()
                endRecordType((, null, 0, false)
                handleDeclaredVariablePattern(final, async, false)
                handleNullCheckPattern(?)
              endPattern(?)
              handlePatternField(:)
              handleRecordPattern((, 1)
            endPattern())
            handleSwitchExpressionCasePattern())
            beginLiteralString('working')
            endLiteralString(0, ,)
          endSwitchExpressionCase(null, =>, 'working')
          beginSwitchExpressionCase()
            beginPattern(,)
              handleNoName(()
              beginPattern(:)
                beginRecordType(()
                  beginRecordTypeEntry()
                    beginMetadataStar(int)
                    endMetadataStar(0)
                    handleIdentifier(int, typeReference)
                    handleNoTypeArguments(,)
                    handleType(int, null)
                    handleNoName(,)
                  endRecordTypeEntry()
                  beginRecordTypeEntry()
                    beginMetadataStar(String)
                    endMetadataStar(0)
                    handleIdentifier(String, typeReference)
                    handleNoTypeArguments())
                    handleType(String, null)
                    handleNoName())
                  endRecordTypeEntry()
                endRecordType((, null, 2, false)
                handleDeclaredVariablePattern(final, async, false)
                handleNullCheckPattern(?)
              endPattern(?)
              handlePatternField(:)
              handleRecordPattern((, 1)
            endPattern())
            handleSwitchExpressionCasePattern())
            beginLiteralString('working')
            endLiteralString(0, ,)
          endSwitchExpressionCase(null, =>, 'working')
          beginSwitchExpressionCase()
            beginPattern(,)
              handleNoType(_)
              handleWildcardPattern(null, _)
            endPattern(_)
            handleSwitchExpressionCasePattern(_)
            beginLiteralString('')
            endLiteralString(0, ,)
          endSwitchExpressionCase(null, =>, '')
        endSwitchExpressionBlock(15, {, })
      endSwitchExpression(switch, })
      handleExpressionFunctionBody(=>, ;)
    endTopLevelMethod(method2, null, ;)
  endTopLevelDeclaration(void)
  beginMetadataStar(void)
  endMetadataStar(0)
  beginTopLevelMember(void)
    beginTopLevelMethod(;, null, null)
      handleVoidKeyword(void)
      handleIdentifier(foo, topLevelFunctionDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.TopLevelMethod)
      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      beginBlockFunctionBody({)
        handleNoTypeVariables(()
        beginFunctionExpression(()
          beginFormalParameters((, MemberKind.Local)
          endFormalParameters(0, (, ), MemberKind.Local)
          handleAsyncModifier(async, null)
          handleIdentifier(print, expression)
          handleNoTypeArguments(()
          beginArguments(()
            beginLiteralString("async unnamed taking 0 parameters")
            endLiteralString(0, ))
          endArguments(1, (, ))
          handleSend(print, ;)
          handleExpressionFunctionBody(=>, null)
        endFunctionExpression((, ;)
        handleExpressionStatement(;)
        handleNoTypeVariables(()
        beginFunctionExpression(()
          beginFormalParameters((, MemberKind.Local)
            beginMetadataStar(int)
            endMetadataStar(0)
            beginFormalParameter(int, MemberKind.Local, null, null, null)
              handleIdentifier(int, typeReference)
              handleNoTypeArguments(x)
              handleType(int, null)
              handleIdentifier(x, formalParameterDeclaration)
              handleFormalParameterWithoutValue())
            endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.Local)
          endFormalParameters(1, (, ), MemberKind.Local)
          handleAsyncModifier(async, null)
          handleIdentifier(print, expression)
          handleNoTypeArguments(()
          beginArguments(()
            beginLiteralString("async unnamed taking 1 parameter")
            endLiteralString(0, ))
          endArguments(1, (, ))
          handleSend(print, ;)
          handleExpressionFunctionBody(=>, null)
        endFunctionExpression((, ;)
        handleExpressionStatement(;)
        handleNoTypeVariables(()
        beginFunctionExpression(()
          beginFormalParameters((, MemberKind.Local)
            beginMetadataStar(int)
            endMetadataStar(0)
            beginFormalParameter(int, MemberKind.Local, null, null, null)
              handleIdentifier(int, typeReference)
              handleNoTypeArguments(x)
              handleType(int, null)
              handleIdentifier(x, formalParameterDeclaration)
              handleFormalParameterWithoutValue(,)
            endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.Local)
            beginMetadataStar(int)
            endMetadataStar(0)
            beginFormalParameter(int, MemberKind.Local, null, null, null)
              handleIdentifier(int, typeReference)
              handleNoTypeArguments(y)
              handleType(int, null)
              handleIdentifier(y, formalParameterDeclaration)
              handleFormalParameterWithoutValue())
            endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.Local)
          endFormalParameters(2, (, ), MemberKind.Local)
          handleAsyncModifier(async, null)
          handleIdentifier(print, expression)
          handleNoTypeArguments(()
          beginArguments(()
            beginLiteralString("async unnamed taking 2 parameters")
            endLiteralString(0, ))
          endArguments(1, (, ))
          handleSend(print, ;)
          handleExpressionFunctionBody(=>, null)
        endFunctionExpression((, ;)
        handleExpressionStatement(;)
      endBlockFunctionBody(3, {, })
    endTopLevelMethod(void, null, })
  endTopLevelDeclaration()
endCompilationUnit(3, )
