Problems reported:

parser/patterns/const_patterns:37:13: Only negation of a numeric literal is supported as a constant pattern.
      case -value: // Error
            ^^^^^

parser/patterns/const_patterns:39:13: Only negation of a numeric literal is supported as a constant pattern.
      case -local: // Error
            ^^^^^

parser/patterns/const_patterns:42:13: Only negation of a numeric literal is supported as a constant pattern.
      case -prefix.value: // Error
            ^^^^^^

parser/patterns/const_patterns:42:20: Only negation of a numeric literal is supported as a constant pattern.
      case -prefix.value: // Error
                   ^^^^^

parser/patterns/const_patterns:44:14: The binary operator + is not supported as a constant pattern.
      case 1 + 2: // Error
             ^

parser/patterns/const_patterns:45:14: The binary operator * is not supported as a constant pattern.
      case 1 * 2: // Error
             ^

parser/patterns/const_patterns:46:20: Expected ':' before this.
      case void fun() {}: // Error
                   ^

parser/patterns/const_patterns:46:24: Expected ';' after this.
      case void fun() {}: // Error
                       ^

parser/patterns/const_patterns:46:25: Expected an identifier, but got ':'.
      case void fun() {}: // Error
                        ^

parser/patterns/const_patterns:46:24: Expected ';' after this.
      case void fun() {}: // Error
                       ^

parser/patterns/const_patterns:46:25: Unexpected token ':'.
      case void fun() {}: // Error
                        ^

parser/patterns/const_patterns:47:12: `assert` can't be used as an expression.
      case assert(false): // Error
           ^^^^^^

parser/patterns/const_patterns:50:12: The unary operator ! is not supported as a constant pattern.
      case !false: // Error
           ^

parser/patterns/const_patterns:51:12: The unary operator ~ is not supported as a constant pattern.
      case ~0: // Error
           ^

parser/patterns/const_patterns:53:18: The expression can't be prefixed by 'const' to form a constant pattern.
      case const 0: // Error
                 ^

parser/patterns/const_patterns:54:18: The expression can't be prefixed by 'const' to form a constant pattern.
      case const 0x0: // Error
                 ^^^

parser/patterns/const_patterns:55:18: The expression can't be prefixed by 'const' to form a constant pattern.
      case const 0.5: // Error
                 ^^^

parser/patterns/const_patterns:56:18: The expression can't be prefixed by 'const' to form a constant pattern.
      case const true: // Error
                 ^^^^

parser/patterns/const_patterns:57:18: The expression can't be prefixed by 'const' to form a constant pattern.
      case const null: // Error
                 ^^^^

parser/patterns/const_patterns:58:18: The expression can't be prefixed by 'const' to form a constant pattern.
      case const -0: // Error
                 ^

parser/patterns/const_patterns:59:18: The expression can't be prefixed by 'const' to form a constant pattern.
      case const 'foo': // Error
                 ^^^^^

parser/patterns/const_patterns:60:18: The expression can't be prefixed by 'const' to form a constant pattern.
      case const #a: // Error
                 ^

parser/patterns/const_patterns:61:18: The expression can't be prefixed by 'const' to form a constant pattern.
      case const value: // Error
                 ^^^^^

parser/patterns/const_patterns:62:18: The expression can't be prefixed by 'const' to form a constant pattern.
      case const local: // Error
                 ^^^^^

parser/patterns/const_patterns:63:25: The expression can't be prefixed by 'const' to form a constant pattern.
      case const prefix.value: // Error
                        ^^^^^

parser/patterns/const_patterns:64:18: The expression can't be prefixed by 'const' to form a constant pattern.
      case const -prefix.value: // Error
                 ^

parser/patterns/const_patterns:65:31: The expression can't be prefixed by 'const' to form a constant pattern.
      case const prefix.Class.named: // Error
                              ^^^^^

parser/patterns/const_patterns:66:18: The expression can't be prefixed by 'const' to form a constant pattern.
      case const 1 + 2: // Error
                 ^

parser/patterns/const_patterns:66:18: The expression can't be prefixed by 'const' to form a constant pattern.
      case const 1 + 2: // Error
                 ^

parser/patterns/const_patterns:67:23: A function expression can't have a name.
      case const void fun() {}: // Error
                      ^^^

parser/patterns/const_patterns:68:18: `assert` can't be used as an expression.
      case const assert(false): // Error
                 ^^^^^^

parser/patterns/const_patterns:71:18: The unary operator ! is not supported as a constant pattern.
      case const !false: // Error
                 ^

parser/patterns/const_patterns:72:18: The unary operator ~ is not supported as a constant pattern.
      case const ~0: // Error
                 ^

parser/patterns/const_patterns:86:18: Duplicate 'const' keyword in constant expression.
      case const const Class(): // Error
                 ^^^^^

parser/patterns/const_patterns:87:18: Duplicate 'const' keyword in constant expression.
      case const const Class(0): // Error
                 ^^^^^

parser/patterns/const_patterns:88:18: Duplicate 'const' keyword in constant expression.
      case const const GenericClass(): // Error
                 ^^^^^

parser/patterns/const_patterns:89:18: Duplicate 'const' keyword in constant expression.
      case const const GenericClass(a: 0): // Error
                 ^^^^^

parser/patterns/const_patterns:90:18: Duplicate 'const' keyword in constant expression.
      case const const GenericClass<int>(): // Error
                 ^^^^^

parser/patterns/const_patterns:91:18: Duplicate 'const' keyword in constant expression.
      case const const GenericClass<int>(a: 0): // Error
                 ^^^^^

parser/patterns/const_patterns:92:18: Duplicate 'const' keyword in constant expression.
      case const const []: // Error
                 ^^^^^

parser/patterns/const_patterns:93:18: Duplicate 'const' keyword in constant expression.
      case const const <int>[]: // Error
                 ^^^^^

parser/patterns/const_patterns:94:18: Duplicate 'const' keyword in constant expression.
      case const const {}: // Error
                 ^^^^^

parser/patterns/const_patterns:95:18: Duplicate 'const' keyword in constant expression.
      case const const <int, String>{}: // Error
                 ^^^^^

parser/patterns/const_patterns:98:18: The empty record literal is not supported as a constant pattern.
      case const (): // Error
                 ^

parser/patterns/const_patterns:99:18: Duplicate 'const' keyword in constant expression.
      case const const (): // Error
                 ^^^^^

parser/patterns/const_patterns:105:24: This expression is not supported as a constant pattern.
      case GenericClass<int>: // Error
                       ^

parser/patterns/const_patterns:106:31: This expression is not supported as a constant pattern.
      case prefix.GenericClass<int>: // Error
                              ^

parser/patterns/const_patterns:107:24: This expression is not supported as a constant pattern.
      case GenericClass<int>.new: // Error
                       ^

parser/patterns/const_patterns:108:31: This expression is not supported as a constant pattern.
      case prefix.GenericClass<int>.new: // Error
                              ^

parser/patterns/const_patterns:109:30: This expression is not supported as a constant pattern.
      case const GenericClass<int>: // Error
                             ^

parser/patterns/const_patterns:110:37: This expression is not supported as a constant pattern.
      case const prefix.GenericClass<int>: // Error
                                    ^

beginCompilationUnit(import)
  beginMetadataStar(import)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(import)
    beginImport(import)
      beginLiteralString('const_patterns.dart')
      endLiteralString(0, as)
      beginConditionalUris(as)
      endConditionalUris(0)
      handleIdentifier(prefix, importPrefixDeclaration)
      handleImportPrefix(null, as)
      beginCombinators(;)
      endCombinators(0)
    endImport(import, null, ;)
  endTopLevelDeclaration(;)
  beginMetadataStar(const)
  endMetadataStar(0)
  beginTopLevelMember(const)
    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, const, ;)
      handleIdentifier(int, typeReference)
      handleNoTypeArguments(value)
      handleType(int, null)
      handleIdentifier(value, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleLiteralInt(42)
      endFieldInitializer(=, 42)
    endTopLevelFields(null, null, null, null, null, const, 1, const, ;)
  endTopLevelDeclaration(;)
  beginMetadataStar(void)
  endMetadataStar(0)
  beginTopLevelMember(void)
    beginTopLevelMethod(;, null, null)
      handleVoidKeyword(void)
      handleIdentifier(func, topLevelFunctionDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.TopLevelMethod)
      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      beginBlockFunctionBody({)
      endBlockFunctionBody(0, {, })
    endTopLevelMethod(void, null, })
  endTopLevelDeclaration(})
  beginMetadataStar(class)
  endMetadataStar(0)
  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
    handleIdentifier(Class, classOrMixinDeclaration)
    handleNoTypeVariables({)
    beginClassDeclaration(class, null, null, null, null, null, null, null, null, Class)
      handleNoType(Class)
      handleClassExtends(null, 1)
      handleClassNoWithClause()
      handleImplements(null, 0)
      handleClassHeader(class, class, null)
      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
        beginMetadataStar(const)
        endMetadataStar(0)
        beginMember()
          beginMethod(DeclarationKind.Class, null, null, null, null, const, null, Class)
            handleNoType(const)
            handleIdentifier(Class, methodDeclaration)
            handleNoTypeVariables(()
            beginFormalParameters((, MemberKind.NonStaticMethod)
              beginOptionalFormalParameters([)
                beginMetadataStar(a)
                endMetadataStar(0)
                beginFormalParameter(a, MemberKind.NonStaticMethod, null, null, null)
                  handleNoType([)
                  handleIdentifier(a, formalParameterDeclaration)
                  handleFormalParameterWithoutValue(])
                endFormalParameter(null, null, null, a, null, null, FormalParameterKind.optionalPositional, MemberKind.NonStaticMethod)
              endOptionalFormalParameters(1, [, ])
            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
            handleNoInitializers()
            handleAsyncModifier(null, null)
            handleEmptyFunctionBody(;)
          endClassConstructor(null, const, (, null, ;)
        endMember()
        beginMetadataStar(const)
        endMetadataStar(0)
        beginMember()
          beginMethod(DeclarationKind.Class, null, null, null, null, const, null, Class)
            handleNoType(const)
            handleIdentifier(Class, methodDeclaration)
            handleIdentifier(named, methodDeclarationContinuation)
            handleQualified(.)
            handleNoTypeVariables(()
            beginFormalParameters((, MemberKind.NonStaticMethod)
            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
            handleNoInitializers()
            handleAsyncModifier(null, null)
            handleEmptyFunctionBody(;)
          endClassConstructor(null, const, (, null, ;)
        endMember()
        beginMetadataStar(call)
        endMetadataStar(0)
        beginMember()
          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, call)
            handleNoType(;)
            handleIdentifier(call, methodDeclaration)
            handleNoTypeVariables(()
            beginFormalParameters((, MemberKind.NonStaticMethod)
            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
            handleNoInitializers()
            handleAsyncModifier(null, null)
            beginBlockFunctionBody({)
            endBlockFunctionBody(0, {, })
          endClassMethod(null, call, (, null, })
        endMember()
        beginMetadataStar(test)
        endMetadataStar(0)
        beginMember()
          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, test)
            handleNoType(})
            handleIdentifier(test, methodDeclaration)
            handleNoTypeVariables(()
            beginFormalParameters((, MemberKind.NonStaticMethod)
              beginMetadataStar(o)
              endMetadataStar(0)
              beginFormalParameter(o, MemberKind.NonStaticMethod, null, null, null)
                handleNoType(()
                handleIdentifier(o, formalParameterDeclaration)
                handleFormalParameterWithoutValue())
              endFormalParameter(null, null, null, o, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
            handleNoInitializers()
            handleAsyncModifier(async, null)
            beginBlockFunctionBody({)
              beginMetadataStar(const)
              endMetadataStar(0)
              handleIdentifier(dynamic, typeReference)
              handleNoTypeArguments(local)
              handleType(dynamic, null)
              beginVariablesDeclaration(local, null, const)
                handleIdentifier(local, localVariableDeclaration)
                beginInitializedIdentifier(local)
                  beginVariableInitializer(=)
                    handleLiteralInt(0)
                  endVariableInitializer(=)
                endInitializedIdentifier(local)
              endVariablesDeclaration(1, ;)
              beginMetadataStar(dynamic)
              endMetadataStar(0)
              handleIdentifier(dynamic, typeReference)
              handleNoTypeArguments(variable)
              handleType(dynamic, null)
              beginVariablesDeclaration(variable, null, null)
                handleIdentifier(variable, localVariableDeclaration)
                beginInitializedIdentifier(variable)
                  beginVariableInitializer(=)
                    handleLiteralInt(0)
                  endVariableInitializer(=)
                endInitializedIdentifier(variable)
              endVariablesDeclaration(1, ;)
              beginSwitchStatement(switch)
                handleIdentifier(o, expression)
                handleNoTypeArguments())
                handleNoArguments())
                handleSend(o, ))
                handleParenthesizedCondition((, null, null)
                beginSwitchBlock({)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(null)
                        handleLiteralBool(true)
                      endConstantPattern(null)
                    endPattern(true)
                    handleSwitchCaseNoWhenClause(true)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(null)
                        handleLiteralNull(null)
                      endConstantPattern(null)
                    endPattern(null)
                    handleSwitchCaseNoWhenClause(null)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(null)
                        handleThisExpression(this, expression)
                      endConstantPattern(null)
                    endPattern(this)
                    handleSwitchCaseNoWhenClause(this)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(null)
                        handleThisExpression(this, expression)
                        handleNoTypeArguments(()
                        beginArguments(()
                        endArguments(0, (, ))
                        handleSend(this, :)
                      endConstantPattern(null)
                    endPattern())
                    handleSwitchCaseNoWhenClause())
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(null)
                        handleSuperExpression(super, expression)
                        handleNoTypeArguments(()
                        beginArguments(()
                        endArguments(0, (, ))
                        handleSend(super, :)
                      endConstantPattern(null)
                    endPattern())
                    handleSwitchCaseNoWhenClause())
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(null)
                        handleLiteralInt(42)
                      endConstantPattern(null)
                    endPattern(42)
                    handleSwitchCaseNoWhenClause(42)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(null)
                        handleLiteralInt(42)
                        handleUnaryPrefixExpression(-)
                      endConstantPattern(null)
                    endPattern(42)
                    handleSwitchCaseNoWhenClause(42)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(null)
                        handleLiteralDouble(42.5)
                      endConstantPattern(null)
                    endPattern(42.5)
                    handleSwitchCaseNoWhenClause(42.5)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(null)
                        handleLiteralDouble(42.5)
                        handleUnaryPrefixExpression(-)
                      endConstantPattern(null)
                    endPattern(42.5)
                    handleSwitchCaseNoWhenClause(42.5)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(null)
                        beginLiteralString('foo')
                        endLiteralString(0, :)
                      endConstantPattern(null)
                    endPattern('foo')
                    handleSwitchCaseNoWhenClause('foo')
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(null)
                        beginLiteralString('foo')
                        endLiteralString(0, 'bar')
                        beginLiteralString('bar')
                        endLiteralString(0, :)
                        handleStringJuxtaposition(case, 2)
                      endConstantPattern(null)
                    endPattern('bar')
                    handleSwitchCaseNoWhenClause('bar')
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(null)
                        handleIdentifier(value, expression)
                        handleNoTypeArguments(:)
                        handleNoArguments(:)
                        handleSend(value, :)
                      endConstantPattern(null)
                    endPattern(value)
                    handleSwitchCaseNoWhenClause(value)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(null)
                        handleIdentifier(value, expression)
                        handleNoTypeArguments(!)
                        handleNoArguments(!)
                        handleSend(value, !)
                      endConstantPattern(null)
                      handleNullAssertPattern(!)
                    endPattern(!)
                    handleSwitchCaseNoWhenClause(!)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(null)
                        handleIdentifier(value, expression)
                        handleNoTypeArguments(?)
                        handleNoArguments(?)
                        handleSend(value, ?)
                      endConstantPattern(null)
                      handleNullCheckPattern(?)
                    endPattern(?)
                    handleSwitchCaseNoWhenClause(?)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(null)
                        handleIdentifier(value, expression)
                        handleNoTypeArguments(as)
                        handleNoArguments(as)
                        handleSend(value, as)
                      endConstantPattern(null)
                      beginAsOperatorType(as)
                        handleIdentifier(int, typeReference)
                        handleNoTypeArguments(:)
                        handleType(int, null)
                      endAsOperatorType(as)
                      handleCastPattern(as)
                    endPattern(int)
                    handleSwitchCaseNoWhenClause(int)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(null)
                        handleRecoverableError(InvalidConstantPatternNegation, value, value)
                        handleIdentifier(value, expression)
                        handleNoTypeArguments(:)
                        handleNoArguments(:)
                        handleSend(value, :)
                        handleUnaryPrefixExpression(-)
                      endConstantPattern(null)
                    endPattern(value)
                    handleSwitchCaseNoWhenClause(value)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(null)
                        handleIdentifier(local, expression)
                        handleNoTypeArguments(:)
                        handleNoArguments(:)
                        handleSend(local, :)
                      endConstantPattern(null)
                    endPattern(local)
                    handleSwitchCaseNoWhenClause(local)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(null)
                        handleRecoverableError(InvalidConstantPatternNegation, local, local)
                        handleIdentifier(local, expression)
                        handleNoTypeArguments(:)
                        handleNoArguments(:)
                        handleSend(local, :)
                        handleUnaryPrefixExpression(-)
                      endConstantPattern(null)
                    endPattern(local)
                    handleSwitchCaseNoWhenClause(local)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(null)
                        handleIdentifier(func, expression)
                        handleNoTypeArguments(:)
                        handleNoArguments(:)
                        handleSend(func, :)
                      endConstantPattern(null)
                    endPattern(func)
                    handleSwitchCaseNoWhenClause(func)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(null)
                        handleIdentifier(prefix, expression)
                        handleNoTypeArguments(.)
                        handleNoArguments(.)
                        handleSend(prefix, .)
                        handleIdentifier(value, expressionContinuation)
                        handleNoTypeArguments(:)
                        handleNoArguments(:)
                        handleSend(value, :)
                        handleEndingBinaryExpression(., value)
                      endConstantPattern(null)
                    endPattern(value)
                    handleSwitchCaseNoWhenClause(value)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(null)
                        handleRecoverableError(InvalidConstantPatternNegation, prefix, prefix)
                        handleIdentifier(prefix, expression)
                        handleNoTypeArguments(.)
                        handleNoArguments(.)
                        handleSend(prefix, .)
                        handleRecoverableError(InvalidConstantPatternNegation, value, value)
                        handleIdentifier(value, expressionContinuation)
                        handleNoTypeArguments(:)
                        handleNoArguments(:)
                        handleSend(value, :)
                        handleEndingBinaryExpression(., value)
                        handleUnaryPrefixExpression(-)
                      endConstantPattern(null)
                    endPattern(value)
                    handleSwitchCaseNoWhenClause(value)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(null)
                        handleIdentifier(prefix, expression)
                        handleNoTypeArguments(.)
                        handleNoArguments(.)
                        handleSend(prefix, .)
                        handleIdentifier(Class, expressionContinuation)
                        handleNoTypeArguments(.)
                        handleNoArguments(.)
                        handleSend(Class, .)
                        handleEndingBinaryExpression(., Class)
                        handleIdentifier(named, expressionContinuation)
                        handleNoTypeArguments(:)
                        handleNoArguments(:)
                        handleSend(named, :)
                        handleEndingBinaryExpression(., named)
                      endConstantPattern(null)
                    endPattern(named)
                    handleSwitchCaseNoWhenClause(named)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(null)
                        handleLiteralInt(1)
                        handleRecoverableError(Message[InvalidConstantPatternBinary, The binary operator + is not supported as a constant pattern., Try wrapping the expression in 'const ( ... )'., {name: +}], +, +)
                        beginBinaryExpression(+)
                          handleLiteralInt(2)
                        endBinaryExpression(+, 2)
                      endConstantPattern(null)
                    endPattern(2)
                    handleSwitchCaseNoWhenClause(2)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(null)
                        handleLiteralInt(1)
                        handleRecoverableError(Message[InvalidConstantPatternBinary, The binary operator * is not supported as a constant pattern., Try wrapping the expression in 'const ( ... )'., {name: *}], *, *)
                        beginBinaryExpression(*)
                          handleLiteralInt(2)
                        endBinaryExpression(*, 2)
                      endConstantPattern(null)
                    endPattern(2)
                    handleSwitchCaseNoWhenClause(2)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      handleVoidKeyword(void)
                      handleDeclaredVariablePattern(null, fun, false)
                    endPattern(fun)
                    handleSwitchCaseNoWhenClause(fun)
                    handleRecoverableError(Message[ExpectedButGot, Expected ':' before this., null, {string: :}], (, ()
                  endCaseExpression(case, null, :)
                  beginSwitchCase(0, 25, case)
                    handleNoTypeVariables(()
                    beginFunctionExpression(()
                      beginFormalParameters((, MemberKind.Local)
                      endFormalParameters(0, (, ), MemberKind.Local)
                      handleAsyncModifier(null, null)
                      beginBlockFunctionBody({)
                      endBlockFunctionBody(0, {, })
                    endFunctionExpression((, })
                    handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], }, })
                    handleExpressionStatement((, ;)
                    handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ':'., Try inserting an identifier before ':'., {lexeme: :}], :, :)
                    handleIdentifier(, expression)
                    handleNoTypeArguments(:)
                    handleNoArguments(:)
                    handleSend(, :)
                    handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], }, })
                    handleExpressionStatement(:, ;)
                    handleRecoverableError(Message[UnexpectedToken, Unexpected token ':'., null, {lexeme: :}], :, :)
                  endSwitchCase(0, 25, null, null, 2, case, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(null)
                        beginAssert(assert, Assert.Expression)
                          handleLiteralBool(false)
                          handleRecoverableError(AssertAsExpression, assert, assert)
                        endAssert(assert, Assert.Expression, (, null, ))
                      endConstantPattern(null)
                    endPattern())
                    handleSwitchCaseNoWhenClause())
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(null)
                        beginSwitchExpression(switch)
                          handleIdentifier(o, expression)
                          handleNoTypeArguments())
                          handleNoArguments())
                          handleSend(o, ))
                          handleParenthesizedCondition((, null, null)
                          beginSwitchExpressionBlock({)
                            beginSwitchExpressionCase()
                              beginPattern({)
                                handleNoType(_)
                                handleWildcardPattern(null, _)
                              endPattern(_)
                              handleSwitchExpressionCasePattern(_)
                              handleLiteralBool(true)
                            endSwitchExpressionCase(_, null, =>, true)
                          endSwitchExpressionBlock(1, {, })
                        endSwitchExpression(switch, })
                      endConstantPattern(null)
                    endPattern(})
                    handleSwitchCaseNoWhenClause(})
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(null)
                        beginAwaitExpression(await)
                          handleLiteralInt(0)
                        endAwaitExpression(await, 0)
                      endConstantPattern(null)
                    endPattern(0)
                    handleSwitchCaseNoWhenClause(0)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(null)
                        handleRecoverableError(Message[InvalidConstantPatternUnary, The unary operator ! is not supported as a constant pattern., Try wrapping the expression in 'const ( ... )'., {name: !}], !, !)
                        handleLiteralBool(false)
                        handleUnaryPrefixExpression(!)
                      endConstantPattern(null)
                    endPattern(false)
                    handleSwitchCaseNoWhenClause(false)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(null)
                        handleRecoverableError(Message[InvalidConstantPatternUnary, The unary operator ~ is not supported as a constant pattern., Try wrapping the expression in 'const ( ... )'., {name: ~}], ~, ~)
                        handleLiteralInt(0)
                        handleUnaryPrefixExpression(~)
                      endConstantPattern(null)
                    endPattern(0)
                    handleSwitchCaseNoWhenClause(0)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(null)
                        handleIdentifier(variable, expression)
                        handleNoTypeArguments(:)
                        handleNoArguments(:)
                        handleSend(variable, :)
                        handleUnaryPrefixAssignmentExpression(++)
                      endConstantPattern(null)
                    endPattern(variable)
                    handleSwitchCaseNoWhenClause(variable)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        handleRecoverableError(InvalidConstantPatternConstPrefix, 0, 0)
                        handleLiteralInt(0)
                      endConstantPattern(const)
                    endPattern(0)
                    handleSwitchCaseNoWhenClause(0)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        handleRecoverableError(InvalidConstantPatternConstPrefix, 0x0, 0x0)
                        handleLiteralInt(0x0)
                      endConstantPattern(const)
                    endPattern(0x0)
                    handleSwitchCaseNoWhenClause(0x0)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        handleRecoverableError(InvalidConstantPatternConstPrefix, 0.5, 0.5)
                        handleLiteralDouble(0.5)
                      endConstantPattern(const)
                    endPattern(0.5)
                    handleSwitchCaseNoWhenClause(0.5)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        handleRecoverableError(InvalidConstantPatternConstPrefix, true, true)
                        handleLiteralBool(true)
                      endConstantPattern(const)
                    endPattern(true)
                    handleSwitchCaseNoWhenClause(true)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        handleRecoverableError(InvalidConstantPatternConstPrefix, null, null)
                        handleLiteralNull(null)
                      endConstantPattern(const)
                    endPattern(null)
                    handleSwitchCaseNoWhenClause(null)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        handleRecoverableError(InvalidConstantPatternConstPrefix, -, -)
                        handleLiteralInt(0)
                        handleUnaryPrefixExpression(-)
                      endConstantPattern(const)
                    endPattern(0)
                    handleSwitchCaseNoWhenClause(0)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        handleRecoverableError(InvalidConstantPatternConstPrefix, 'foo', 'foo')
                        beginLiteralString('foo')
                        endLiteralString(0, :)
                      endConstantPattern(const)
                    endPattern('foo')
                    handleSwitchCaseNoWhenClause('foo')
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        handleRecoverableError(InvalidConstantPatternConstPrefix, #, #)
                        beginLiteralSymbol(#)
                          handleIdentifier(a, literalSymbol)
                        endLiteralSymbol(#, 1)
                      endConstantPattern(const)
                    endPattern(a)
                    handleSwitchCaseNoWhenClause(a)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        handleIdentifier(value, expression)
                        handleNoTypeArguments(:)
                        handleRecoverableError(InvalidConstantPatternConstPrefix, value, value)
                        handleNoArguments(:)
                        handleSend(value, :)
                      endConstantPattern(const)
                    endPattern(value)
                    handleSwitchCaseNoWhenClause(value)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        handleIdentifier(local, expression)
                        handleNoTypeArguments(:)
                        handleRecoverableError(InvalidConstantPatternConstPrefix, local, local)
                        handleNoArguments(:)
                        handleSend(local, :)
                      endConstantPattern(const)
                    endPattern(local)
                    handleSwitchCaseNoWhenClause(local)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        handleIdentifier(prefix, expression)
                        handleNoTypeArguments(.)
                        handleNoArguments(.)
                        handleSend(prefix, .)
                        handleIdentifier(value, expressionContinuation)
                        handleNoTypeArguments(:)
                        handleRecoverableError(InvalidConstantPatternConstPrefix, value, value)
                        handleNoArguments(:)
                        handleSend(value, :)
                        handleEndingBinaryExpression(., value)
                      endConstantPattern(const)
                    endPattern(value)
                    handleSwitchCaseNoWhenClause(value)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        handleRecoverableError(InvalidConstantPatternConstPrefix, -, -)
                        handleIdentifier(prefix, expression)
                        handleNoTypeArguments(.)
                        handleNoArguments(.)
                        handleSend(prefix, .)
                        handleIdentifier(value, expressionContinuation)
                        handleNoTypeArguments(:)
                        handleNoArguments(:)
                        handleSend(value, :)
                        handleEndingBinaryExpression(., value)
                        handleUnaryPrefixExpression(-)
                      endConstantPattern(const)
                    endPattern(value)
                    handleSwitchCaseNoWhenClause(value)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        handleIdentifier(prefix, expression)
                        handleNoTypeArguments(.)
                        handleNoArguments(.)
                        handleSend(prefix, .)
                        handleIdentifier(Class, expressionContinuation)
                        handleNoTypeArguments(.)
                        handleNoArguments(.)
                        handleSend(Class, .)
                        handleEndingBinaryExpression(., Class)
                        handleIdentifier(named, expressionContinuation)
                        handleNoTypeArguments(:)
                        handleRecoverableError(InvalidConstantPatternConstPrefix, named, named)
                        handleNoArguments(:)
                        handleSend(named, :)
                        handleEndingBinaryExpression(., named)
                      endConstantPattern(const)
                    endPattern(named)
                    handleSwitchCaseNoWhenClause(named)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        handleRecoverableError(InvalidConstantPatternConstPrefix, 1, 1)
                        handleLiteralInt(1)
                        handleRecoverableError(InvalidConstantPatternConstPrefix, 1, 1)
                        beginBinaryExpression(+)
                          handleLiteralInt(2)
                        endBinaryExpression(+, 2)
                      endConstantPattern(const)
                    endPattern(2)
                    handleSwitchCaseNoWhenClause(2)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        handleNoTypeVariables(()
                        beginNamedFunctionExpression(void)
                          handleVoidKeyword(void)
                          beginFunctionName(fun)
                            handleIdentifier(fun, localFunctionDeclaration)
                            handleRecoverableError(NamedFunctionExpression, fun, fun)
                          endFunctionName(void, ()
                          beginFormalParameters((, MemberKind.Local)
                          endFormalParameters(0, (, ), MemberKind.Local)
                          handleNoInitializers()
                          handleAsyncModifier(null, null)
                          beginBlockFunctionBody({)
                          endBlockFunctionBody(0, {, })
                        endNamedFunctionExpression(})
                      endConstantPattern(const)
                    endPattern(})
                    handleSwitchCaseNoWhenClause(})
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        beginAssert(assert, Assert.Expression)
                          handleLiteralBool(false)
                          handleRecoverableError(AssertAsExpression, assert, assert)
                        endAssert(assert, Assert.Expression, (, null, ))
                      endConstantPattern(const)
                    endPattern())
                    handleSwitchCaseNoWhenClause())
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        beginSwitchExpression(switch)
                          handleIdentifier(o, expression)
                          handleNoTypeArguments())
                          handleNoArguments())
                          handleSend(o, ))
                          handleParenthesizedCondition((, null, null)
                          beginSwitchExpressionBlock({)
                            beginSwitchExpressionCase()
                              beginPattern({)
                                handleNoType(_)
                                handleWildcardPattern(null, _)
                              endPattern(_)
                              handleSwitchExpressionCasePattern(_)
                              handleLiteralBool(true)
                            endSwitchExpressionCase(_, null, =>, true)
                          endSwitchExpressionBlock(1, {, })
                        endSwitchExpression(switch, })
                      endConstantPattern(const)
                    endPattern(})
                    handleSwitchCaseNoWhenClause(})
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        beginAwaitExpression(await)
                          handleLiteralInt(0)
                        endAwaitExpression(await, 0)
                      endConstantPattern(const)
                    endPattern(0)
                    handleSwitchCaseNoWhenClause(0)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        handleRecoverableError(Message[InvalidConstantPatternUnary, The unary operator ! is not supported as a constant pattern., Try wrapping the expression in 'const ( ... )'., {name: !}], !, !)
                        handleLiteralBool(false)
                        handleUnaryPrefixExpression(!)
                      endConstantPattern(const)
                    endPattern(false)
                    handleSwitchCaseNoWhenClause(false)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        handleRecoverableError(Message[InvalidConstantPatternUnary, The unary operator ~ is not supported as a constant pattern., Try wrapping the expression in 'const ( ... )'., {name: ~}], ~, ~)
                        handleLiteralInt(0)
                        handleUnaryPrefixExpression(~)
                      endConstantPattern(const)
                    endPattern(0)
                    handleSwitchCaseNoWhenClause(0)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        handleIdentifier(variable, expression)
                        handleNoTypeArguments(:)
                        handleNoArguments(:)
                        handleSend(variable, :)
                        handleUnaryPrefixAssignmentExpression(++)
                      endConstantPattern(const)
                    endPattern(variable)
                    handleSwitchCaseNoWhenClause(variable)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        handleIdentifier(Class, expression)
                        handleNoTypeArguments(()
                        beginArguments(()
                        endArguments(0, (, ))
                        handleSend(Class, :)
                      endConstantPattern(const)
                    endPattern())
                    handleSwitchCaseNoWhenClause())
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        handleIdentifier(Class, expression)
                        handleNoTypeArguments(()
                        beginArguments(()
                          handleLiteralInt(0)
                        endArguments(1, (, ))
                        handleSend(Class, :)
                      endConstantPattern(const)
                    endPattern())
                    handleSwitchCaseNoWhenClause())
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        handleIdentifier(GenericClass, expression)
                        handleNoTypeArguments(()
                        beginArguments(()
                        endArguments(0, (, ))
                        handleSend(GenericClass, :)
                      endConstantPattern(const)
                    endPattern())
                    handleSwitchCaseNoWhenClause())
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        handleIdentifier(GenericClass, expression)
                        handleNoTypeArguments(()
                        beginArguments(()
                          handleIdentifier(a, namedArgumentReference)
                          handleLiteralInt(0)
                          handleNamedArgument(:)
                        endArguments(1, (, ))
                        handleSend(GenericClass, :)
                      endConstantPattern(const)
                    endPattern())
                    handleSwitchCaseNoWhenClause())
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        handleIdentifier(GenericClass, expression)
                        beginTypeArguments(<)
                          handleIdentifier(int, typeReference)
                          handleNoTypeArguments(>)
                          handleType(int, null)
                        endTypeArguments(1, <, >)
                        beginArguments(()
                        endArguments(0, (, ))
                        handleSend(GenericClass, :)
                      endConstantPattern(const)
                    endPattern())
                    handleSwitchCaseNoWhenClause())
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        handleIdentifier(GenericClass, expression)
                        beginTypeArguments(<)
                          handleIdentifier(int, typeReference)
                          handleNoTypeArguments(>)
                          handleType(int, null)
                        endTypeArguments(1, <, >)
                        beginArguments(()
                          handleIdentifier(a, namedArgumentReference)
                          handleLiteralInt(0)
                          handleNamedArgument(:)
                        endArguments(1, (, ))
                        handleSend(GenericClass, :)
                      endConstantPattern(const)
                    endPattern())
                    handleSwitchCaseNoWhenClause())
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        beginImplicitCreationExpression(GenericClass)
                          handleIdentifier(GenericClass, constructorReference)
                          beginConstructorReference(GenericClass)
                            beginTypeArguments(<)
                              handleIdentifier(int, typeReference)
                              handleNoTypeArguments(>)
                              handleType(int, null)
                            endTypeArguments(1, <, >)
                            handleNewAsIdentifier(new)
                            handleIdentifier(new, constructorReferenceContinuationAfterTypeArguments)
                          endConstructorReference(GenericClass, ., new, ConstructorReferenceContext.Implicit)
                          beginArguments(()
                          endArguments(0, (, ))
                        endImplicitCreationExpression(GenericClass, <)
                      endConstantPattern(const)
                    endPattern())
                    handleSwitchCaseNoWhenClause())
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        beginImplicitCreationExpression(GenericClass)
                          handleIdentifier(GenericClass, constructorReference)
                          beginConstructorReference(GenericClass)
                            beginTypeArguments(<)
                              handleIdentifier(int, typeReference)
                              handleNoTypeArguments(>)
                              handleType(int, null)
                            endTypeArguments(1, <, >)
                            handleNewAsIdentifier(new)
                            handleIdentifier(new, constructorReferenceContinuationAfterTypeArguments)
                          endConstructorReference(GenericClass, ., new, ConstructorReferenceContext.Implicit)
                          beginArguments(()
                            handleIdentifier(a, namedArgumentReference)
                            handleLiteralInt(1)
                            handleNamedArgument(:)
                          endArguments(1, (, ))
                        endImplicitCreationExpression(GenericClass, <)
                      endConstantPattern(const)
                    endPattern())
                    handleSwitchCaseNoWhenClause())
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        handleNoTypeArguments([])
                        handleLiteralList(0, [, null, ])
                      endConstantPattern(const)
                    endPattern(])
                    handleSwitchCaseNoWhenClause(])
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        beginTypeArguments(<)
                          handleIdentifier(int, typeReference)
                          handleNoTypeArguments(>)
                          handleType(int, null)
                        endTypeArguments(1, <, >)
                        handleLiteralList(0, [, null, ])
                      endConstantPattern(const)
                    endPattern(])
                    handleSwitchCaseNoWhenClause(])
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        handleNoTypeArguments({)
                        handleLiteralSetOrMap(0, {, null, }, false)
                      endConstantPattern(const)
                    endPattern(})
                    handleSwitchCaseNoWhenClause(})
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        beginTypeArguments(<)
                          handleIdentifier(int, typeReference)
                          handleNoTypeArguments(,)
                          handleType(int, null)
                          handleIdentifier(String, typeReference)
                          handleNoTypeArguments(>)
                          handleType(String, null)
                        endTypeArguments(2, <, >)
                        handleLiteralSetOrMap(0, {, null, }, false)
                      endConstantPattern(const)
                    endPattern(})
                    handleSwitchCaseNoWhenClause(})
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        handleRecoverableError(InvalidConstantPatternDuplicateConst, const, const)
                        beginConstExpression(const)
                          handleIdentifier(Class, constructorReference)
                          beginConstructorReference(Class)
                            handleNoTypeArguments(()
                            handleNoConstructorReferenceContinuationAfterTypeArguments(Class)
                          endConstructorReference(Class, null, Class, ConstructorReferenceContext.Const)
                          beginArguments(()
                          endArguments(0, (, ))
                        endConstExpression(const)
                      endConstantPattern(const)
                    endPattern())
                    handleSwitchCaseNoWhenClause())
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        handleRecoverableError(InvalidConstantPatternDuplicateConst, const, const)
                        beginConstExpression(const)
                          handleIdentifier(Class, constructorReference)
                          beginConstructorReference(Class)
                            handleNoTypeArguments(()
                            handleNoConstructorReferenceContinuationAfterTypeArguments(Class)
                          endConstructorReference(Class, null, Class, ConstructorReferenceContext.Const)
                          beginArguments(()
                            handleLiteralInt(0)
                          endArguments(1, (, ))
                        endConstExpression(const)
                      endConstantPattern(const)
                    endPattern())
                    handleSwitchCaseNoWhenClause())
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        handleRecoverableError(InvalidConstantPatternDuplicateConst, const, const)
                        beginConstExpression(const)
                          handleIdentifier(GenericClass, constructorReference)
                          beginConstructorReference(GenericClass)
                            handleNoTypeArguments(()
                            handleNoConstructorReferenceContinuationAfterTypeArguments(GenericClass)
                          endConstructorReference(GenericClass, null, GenericClass, ConstructorReferenceContext.Const)
                          beginArguments(()
                          endArguments(0, (, ))
                        endConstExpression(const)
                      endConstantPattern(const)
                    endPattern())
                    handleSwitchCaseNoWhenClause())
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        handleRecoverableError(InvalidConstantPatternDuplicateConst, const, const)
                        beginConstExpression(const)
                          handleIdentifier(GenericClass, constructorReference)
                          beginConstructorReference(GenericClass)
                            handleNoTypeArguments(()
                            handleNoConstructorReferenceContinuationAfterTypeArguments(GenericClass)
                          endConstructorReference(GenericClass, null, GenericClass, ConstructorReferenceContext.Const)
                          beginArguments(()
                            handleIdentifier(a, namedArgumentReference)
                            handleLiteralInt(0)
                            handleNamedArgument(:)
                          endArguments(1, (, ))
                        endConstExpression(const)
                      endConstantPattern(const)
                    endPattern())
                    handleSwitchCaseNoWhenClause())
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        handleRecoverableError(InvalidConstantPatternDuplicateConst, const, const)
                        beginConstExpression(const)
                          handleIdentifier(GenericClass, constructorReference)
                          beginConstructorReference(GenericClass)
                            beginTypeArguments(<)
                              handleIdentifier(int, typeReference)
                              handleNoTypeArguments(>)
                              handleType(int, null)
                            endTypeArguments(1, <, >)
                            handleNoConstructorReferenceContinuationAfterTypeArguments(>)
                          endConstructorReference(GenericClass, null, >, ConstructorReferenceContext.Const)
                          beginArguments(()
                          endArguments(0, (, ))
                        endConstExpression(const)
                      endConstantPattern(const)
                    endPattern())
                    handleSwitchCaseNoWhenClause())
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        handleRecoverableError(InvalidConstantPatternDuplicateConst, const, const)
                        beginConstExpression(const)
                          handleIdentifier(GenericClass, constructorReference)
                          beginConstructorReference(GenericClass)
                            beginTypeArguments(<)
                              handleIdentifier(int, typeReference)
                              handleNoTypeArguments(>)
                              handleType(int, null)
                            endTypeArguments(1, <, >)
                            handleNoConstructorReferenceContinuationAfterTypeArguments(>)
                          endConstructorReference(GenericClass, null, >, ConstructorReferenceContext.Const)
                          beginArguments(()
                            handleIdentifier(a, namedArgumentReference)
                            handleLiteralInt(0)
                            handleNamedArgument(:)
                          endArguments(1, (, ))
                        endConstExpression(const)
                      endConstantPattern(const)
                    endPattern())
                    handleSwitchCaseNoWhenClause())
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        handleRecoverableError(InvalidConstantPatternDuplicateConst, const, const)
                        beginConstLiteral([])
                          handleNoTypeArguments([])
                          handleLiteralList(0, [, const, ])
                        endConstLiteral(])
                      endConstantPattern(const)
                    endPattern(])
                    handleSwitchCaseNoWhenClause(])
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        handleRecoverableError(InvalidConstantPatternDuplicateConst, const, const)
                        beginConstLiteral(<)
                          beginTypeArguments(<)
                            handleIdentifier(int, typeReference)
                            handleNoTypeArguments(>)
                            handleType(int, null)
                          endTypeArguments(1, <, >)
                          handleLiteralList(0, [, const, ])
                        endConstLiteral(])
                      endConstantPattern(const)
                    endPattern(])
                    handleSwitchCaseNoWhenClause(])
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        handleRecoverableError(InvalidConstantPatternDuplicateConst, const, const)
                        beginConstLiteral({)
                          handleNoTypeArguments({)
                          handleLiteralSetOrMap(0, {, const, }, false)
                        endConstLiteral(})
                      endConstantPattern(const)
                    endPattern(})
                    handleSwitchCaseNoWhenClause(})
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        handleRecoverableError(InvalidConstantPatternDuplicateConst, const, const)
                        beginConstLiteral(<)
                          beginTypeArguments(<)
                            handleIdentifier(int, typeReference)
                            handleNoTypeArguments(,)
                            handleType(int, null)
                            handleIdentifier(String, typeReference)
                            handleNoTypeArguments(>)
                            handleType(String, null)
                          endTypeArguments(2, <, >)
                          handleLiteralSetOrMap(0, {, const, }, false)
                        endConstLiteral(})
                      endConstantPattern(const)
                    endPattern(})
                    handleSwitchCaseNoWhenClause(})
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        beginNewExpression(new)
                          handleIdentifier(Class, constructorReference)
                          beginConstructorReference(Class)
                            handleNoTypeArguments(()
                            handleNoConstructorReferenceContinuationAfterTypeArguments(Class)
                          endConstructorReference(Class, null, Class, ConstructorReferenceContext.New)
                          beginArguments(()
                          endArguments(0, (, ))
                        endNewExpression(new)
                      endConstantPattern(const)
                    endPattern())
                    handleSwitchCaseNoWhenClause())
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(null)
                        beginNewExpression(new)
                          handleIdentifier(Class, constructorReference)
                          beginConstructorReference(Class)
                            handleNoTypeArguments(()
                            handleNoConstructorReferenceContinuationAfterTypeArguments(Class)
                          endConstructorReference(Class, null, Class, ConstructorReferenceContext.New)
                          beginArguments(()
                          endArguments(0, (, ))
                        endNewExpression(new)
                      endConstantPattern(null)
                    endPattern())
                    handleSwitchCaseNoWhenClause())
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        beginParenthesizedExpressionOrRecordLiteral(()
                          handleRecoverableError(InvalidConstantPatternEmptyRecordLiteral, (, ()
                        endRecordLiteral((, 0, null)
                      endConstantPattern(const)
                    endPattern())
                    handleSwitchCaseNoWhenClause())
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        handleRecoverableError(InvalidConstantPatternDuplicateConst, const, const)
                        beginConstLiteral(()
                          beginParenthesizedExpressionOrRecordLiteral(()
                          endRecordLiteral((, 0, const)
                        endConstLiteral())
                      endConstantPattern(const)
                    endPattern())
                    handleSwitchCaseNoWhenClause())
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        beginParenthesizedExpressionOrRecordLiteral(()
                          handleLiteralInt(1)
                        endParenthesizedExpression(()
                      endConstantPattern(const)
                    endPattern())
                    handleSwitchCaseNoWhenClause())
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        beginParenthesizedExpressionOrRecordLiteral(()
                          handleLiteralInt(1)
                          handleUnaryPrefixExpression(-)
                        endParenthesizedExpression(()
                      endConstantPattern(const)
                    endPattern())
                    handleSwitchCaseNoWhenClause())
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        beginParenthesizedExpressionOrRecordLiteral(()
                          handleIdentifier(value, expression)
                          handleNoTypeArguments())
                          handleNoArguments())
                          handleSend(value, ))
                        endParenthesizedExpression(()
                      endConstantPattern(const)
                    endPattern())
                    handleSwitchCaseNoWhenClause())
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        beginParenthesizedExpressionOrRecordLiteral(()
                          handleIdentifier(value, expression)
                          handleNoTypeArguments())
                          handleNoArguments())
                          handleSend(value, ))
                          handleUnaryPrefixExpression(-)
                        endParenthesizedExpression(()
                      endConstantPattern(const)
                    endPattern())
                    handleSwitchCaseNoWhenClause())
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        beginParenthesizedExpressionOrRecordLiteral(()
                          handleLiteralInt(1)
                          beginBinaryExpression(+)
                            handleLiteralInt(2)
                          endBinaryExpression(+, 2)
                        endParenthesizedExpression(()
                      endConstantPattern(const)
                    endPattern())
                    handleSwitchCaseNoWhenClause())
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(null)
                        handleIdentifier(GenericClass, expression)
                        handleNoTypeArguments(<)
                        handleNoArguments(<)
                        handleSend(GenericClass, <)
                        beginTypeArguments(<)
                          handleIdentifier(int, typeReference)
                          handleNoTypeArguments(>)
                          handleType(int, null)
                        endTypeArguments(1, <, >)
                        handleRecoverableError(InvalidConstantPatternGeneric, <, <)
                        handleTypeArgumentApplication(<)
                      endConstantPattern(null)
                    endPattern(>)
                    handleSwitchCaseNoWhenClause(>)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(null)
                        handleIdentifier(prefix, expression)
                        handleNoTypeArguments(.)
                        handleNoArguments(.)
                        handleSend(prefix, .)
                        handleIdentifier(GenericClass, expressionContinuation)
                        handleNoTypeArguments(<)
                        handleNoArguments(<)
                        handleSend(GenericClass, <)
                        handleEndingBinaryExpression(., GenericClass)
                        beginTypeArguments(<)
                          handleIdentifier(int, typeReference)
                          handleNoTypeArguments(>)
                          handleType(int, null)
                        endTypeArguments(1, <, >)
                        handleRecoverableError(InvalidConstantPatternGeneric, <, <)
                        handleTypeArgumentApplication(<)
                      endConstantPattern(null)
                    endPattern(>)
                    handleSwitchCaseNoWhenClause(>)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(null)
                        handleIdentifier(GenericClass, expression)
                        handleNoTypeArguments(<)
                        handleNoArguments(<)
                        handleSend(GenericClass, <)
                        beginTypeArguments(<)
                          handleIdentifier(int, typeReference)
                          handleNoTypeArguments(>)
                          handleType(int, null)
                        endTypeArguments(1, <, >)
                        handleRecoverableError(InvalidConstantPatternGeneric, <, <)
                        handleTypeArgumentApplication(<)
                        handleNewAsIdentifier(new)
                        handleIdentifier(new, expressionContinuation)
                        handleNoTypeArguments(:)
                        handleNoArguments(:)
                        handleSend(new, :)
                        handleEndingBinaryExpression(., new)
                      endConstantPattern(null)
                    endPattern(new)
                    handleSwitchCaseNoWhenClause(new)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(null)
                        handleIdentifier(prefix, expression)
                        handleNoTypeArguments(.)
                        handleNoArguments(.)
                        handleSend(prefix, .)
                        handleIdentifier(GenericClass, expressionContinuation)
                        handleNoTypeArguments(<)
                        handleNoArguments(<)
                        handleSend(GenericClass, <)
                        handleEndingBinaryExpression(., GenericClass)
                        beginTypeArguments(<)
                          handleIdentifier(int, typeReference)
                          handleNoTypeArguments(>)
                          handleType(int, null)
                        endTypeArguments(1, <, >)
                        handleRecoverableError(InvalidConstantPatternGeneric, <, <)
                        handleTypeArgumentApplication(<)
                        handleNewAsIdentifier(new)
                        handleIdentifier(new, expressionContinuation)
                        handleNoTypeArguments(:)
                        handleNoArguments(:)
                        handleSend(new, :)
                        handleEndingBinaryExpression(., new)
                      endConstantPattern(null)
                    endPattern(new)
                    handleSwitchCaseNoWhenClause(new)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        handleIdentifier(GenericClass, expression)
                        handleNoTypeArguments(<)
                        handleNoArguments(<)
                        handleSend(GenericClass, <)
                        beginTypeArguments(<)
                          handleIdentifier(int, typeReference)
                          handleNoTypeArguments(>)
                          handleType(int, null)
                        endTypeArguments(1, <, >)
                        handleRecoverableError(InvalidConstantPatternGeneric, <, <)
                        handleTypeArgumentApplication(<)
                      endConstantPattern(const)
                    endPattern(>)
                    handleSwitchCaseNoWhenClause(>)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        handleIdentifier(prefix, expression)
                        handleNoTypeArguments(.)
                        handleNoArguments(.)
                        handleSend(prefix, .)
                        handleIdentifier(GenericClass, expressionContinuation)
                        handleNoTypeArguments(<)
                        handleNoArguments(<)
                        handleSend(GenericClass, <)
                        handleEndingBinaryExpression(., GenericClass)
                        beginTypeArguments(<)
                          handleIdentifier(int, typeReference)
                          handleNoTypeArguments(>)
                          handleType(int, null)
                        endTypeArguments(1, <, >)
                        handleRecoverableError(InvalidConstantPatternGeneric, <, <)
                        handleTypeArgumentApplication(<)
                      endConstantPattern(const)
                    endPattern(>)
                    handleSwitchCaseNoWhenClause(>)
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        beginParenthesizedExpressionOrRecordLiteral(()
                          handleIdentifier(GenericClass, expression)
                          handleNoTypeArguments(<)
                          handleNoArguments(<)
                          handleSend(GenericClass, <)
                          beginTypeArguments(<)
                            handleIdentifier(int, typeReference)
                            handleNoTypeArguments(>)
                            handleType(int, null)
                          endTypeArguments(1, <, >)
                          handleTypeArgumentApplication(<)
                        endParenthesizedExpression(()
                      endConstantPattern(const)
                    endPattern())
                    handleSwitchCaseNoWhenClause())
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        beginParenthesizedExpressionOrRecordLiteral(()
                          handleIdentifier(prefix, expression)
                          handleNoTypeArguments(.)
                          handleNoArguments(.)
                          handleSend(prefix, .)
                          handleIdentifier(GenericClass, expressionContinuation)
                          handleNoTypeArguments(<)
                          handleNoArguments(<)
                          handleSend(GenericClass, <)
                          handleEndingBinaryExpression(., GenericClass)
                          beginTypeArguments(<)
                            handleIdentifier(int, typeReference)
                            handleNoTypeArguments(>)
                            handleType(int, null)
                          endTypeArguments(1, <, >)
                          handleTypeArgumentApplication(<)
                        endParenthesizedExpression(()
                      endConstantPattern(const)
                    endPattern())
                    handleSwitchCaseNoWhenClause())
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        beginParenthesizedExpressionOrRecordLiteral(()
                          handleIdentifier(GenericClass, expression)
                          handleNoTypeArguments(<)
                          handleNoArguments(<)
                          handleSend(GenericClass, <)
                          beginTypeArguments(<)
                            handleIdentifier(int, typeReference)
                            handleNoTypeArguments(>)
                            handleType(int, null)
                          endTypeArguments(1, <, >)
                          handleTypeArgumentApplication(<)
                          handleNewAsIdentifier(new)
                          handleIdentifier(new, expressionContinuation)
                          handleNoTypeArguments())
                          handleNoArguments())
                          handleSend(new, ))
                          handleEndingBinaryExpression(., new)
                        endParenthesizedExpression(()
                      endConstantPattern(const)
                    endPattern())
                    handleSwitchCaseNoWhenClause())
                  endCaseExpression(case, null, :)
                  beginCaseExpression(case)
                    beginPattern(case)
                      beginConstantPattern(const)
                        beginParenthesizedExpressionOrRecordLiteral(()
                          handleIdentifier(prefix, expression)
                          handleNoTypeArguments(.)
                          handleNoArguments(.)
                          handleSend(prefix, .)
                          handleIdentifier(GenericClass, expressionContinuation)
                          handleNoTypeArguments(<)
                          handleNoArguments(<)
                          handleSend(GenericClass, <)
                          handleEndingBinaryExpression(., GenericClass)
                          beginTypeArguments(<)
                            handleIdentifier(int, typeReference)
                            handleNoTypeArguments(>)
                            handleType(int, null)
                          endTypeArguments(1, <, >)
                          handleTypeArgumentApplication(<)
                          handleNewAsIdentifier(new)
                          handleIdentifier(new, expressionContinuation)
                          handleNoTypeArguments())
                          handleNoArguments())
                          handleSend(new, ))
                          handleEndingBinaryExpression(., new)
                        endParenthesizedExpression(()
                      endConstantPattern(const)
                    endPattern())
                    handleSwitchCaseNoWhenClause())
                  endCaseExpression(case, null, :)
                  beginSwitchCase(0, 68, case)
                    handleIdentifier(print, expression)
                    handleNoTypeArguments(()
                    beginArguments(()
                      handleLiteralInt(0)
                    endArguments(1, (, ))
                    handleSend(print, ;)
                    handleExpressionStatement(print, ;)
                  endSwitchCase(0, 68, null, null, 1, case, ;)
                endSwitchBlock(2, {, })
              endSwitchStatement(switch, })
            endBlockFunctionBody(3, {, })
          endClassMethod(null, test, (, null, })
        endMember()
      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 4, {, })
    endClassDeclaration(class, })
  endTopLevelDeclaration(})
  beginMetadataStar(class)
  endMetadataStar(0)
  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
    handleIdentifier(GenericClass, classOrMixinDeclaration)
    beginTypeVariables(<)
      beginMetadataStar(T)
      endMetadataStar(0)
      handleIdentifier(T, typeVariableDeclaration)
      beginTypeVariable(T)
        handleTypeVariablesDefined(T, 1)
        handleNoType(T)
      endTypeVariable(>, 0, null, null)
    endTypeVariables(<, >)
    beginClassDeclaration(class, null, null, null, null, null, null, null, null, GenericClass)
      handleNoType(>)
      handleClassExtends(null, 1)
      handleClassNoWithClause()
      handleImplements(null, 0)
      handleClassHeader(class, class, null)
      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
        beginMetadataStar(const)
        endMetadataStar(0)
        beginMember()
          beginMethod(DeclarationKind.Class, null, null, null, null, const, null, GenericClass)
            handleNoType(const)
            handleIdentifier(GenericClass, methodDeclaration)
            handleNoTypeVariables(()
            beginFormalParameters((, MemberKind.NonStaticMethod)
              beginOptionalFormalParameters({)
                beginMetadataStar(a)
                endMetadataStar(0)
                beginFormalParameter(a, MemberKind.NonStaticMethod, null, null, null)
                  handleNoType({)
                  handleIdentifier(a, formalParameterDeclaration)
                  handleFormalParameterWithoutValue(})
                endFormalParameter(null, null, null, a, null, null, FormalParameterKind.optionalNamed, MemberKind.NonStaticMethod)
              endOptionalFormalParameters(1, {, })
            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
            handleNoInitializers()
            handleAsyncModifier(null, null)
            handleEmptyFunctionBody(;)
          endClassConstructor(null, const, (, null, ;)
        endMember()
      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
    endClassDeclaration(class, })
  endTopLevelDeclaration(})
endCompilationUnit(5, )
