Problems reported:

parser/patterns/cast_insideNullCheck:4:10: This pattern cannot appear inside a unary pattern (cast pattern, null check pattern, or null assert pattern) without parentheses.
    case y as int? ?:
         ^^^^^^^^^

beginCompilationUnit(void)
  beginMetadataStar(void)
  endMetadataStar(0)
  beginTopLevelMember(void)
    beginTopLevelMethod(, null, null)
      handleVoidKeyword(void)
      handleIdentifier(f, topLevelFunctionDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.TopLevelMethod)
        beginMetadataStar(x)
        endMetadataStar(0)
        beginFormalParameter(x, MemberKind.TopLevelMethod, null, null, null)
          handleNoType(()
          handleIdentifier(x, formalParameterDeclaration)
          handleFormalParameterWithoutValue())
        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      beginBlockFunctionBody({)
        beginMetadataStar(const)
        endMetadataStar(0)
        handleNoType(const)
        beginVariablesDeclaration(y, null, const)
          handleIdentifier(y, localVariableDeclaration)
          beginInitializedIdentifier(y)
            beginVariableInitializer(=)
              handleLiteralInt(1)
            endVariableInitializer(=)
          endInitializedIdentifier(y)
        endVariablesDeclaration(1, ;)
        beginSwitchStatement(switch)
          handleIdentifier(x, expression)
          handleNoTypeArguments())
          handleNoArguments())
          handleSend(x, x)
          handleParenthesizedCondition((, null, null)
          beginSwitchBlock({)
            beginCaseExpression(case)
              beginPattern(case)
                beginConstantPattern(null)
                  handleIdentifier(y, expression)
                  handleNoTypeArguments(as)
                  handleNoArguments(as)
                  handleSend(y, y)
                endConstantPattern(null)
                beginAsOperatorType(as)
                  handleIdentifier(int, typeReference)
                  handleNoTypeArguments(?)
                  handleType(int, ?)
                endAsOperatorType(as)
                handleCastPattern(as)
                handleRecoverableError(InvalidInsideUnaryPattern, y, ?)
                handleNullCheckPattern(?)
              endPattern(?)
              handleSwitchCaseNoWhenClause(?)
            endCaseExpression(case, null, :)
            beginSwitchCase(0, 1, case)
              handleBreakStatement(false, break, ;)
            endSwitchCase(0, 1, null, null, 1, case, ;)
          endSwitchBlock(1, {, })
        endSwitchStatement(switch, })
      endBlockFunctionBody(2, {, })
    endTopLevelMethod(void, null, })
  endTopLevelDeclaration(})
endCompilationUnit(1, )
