File tree Expand file tree Collapse file tree 4 files changed +16
-13
lines changed 
compiler/src/dotty/tools/dotc Expand file tree Collapse file tree 4 files changed +16
-13
lines changed Original file line number Diff line number Diff line change @@ -1762,13 +1762,14 @@ object desugar {
17621762  def  adaptPatternArgs (elems : List [Tree ], pt : Type )(using  Context ):  List [Tree ] = 
17631763
17641764    def  reorderedNamedArgs (wildcardSpan : Span ):  List [untpd.Tree ] = 
1765-       var  selNames  =  pt.namedTupleElementTypes(false ).map(_(0 ))
1766-       if  selNames.isEmpty &&  pt.classSymbol.is(CaseClass ) then 
1767-         selNames =  pt.classSymbol.caseAccessors.map(_.name.asTermName)
1768-       if  selNames.isEmpty then  {
1769-         report.error(NamedElementsNotDefined (pt), elems.head.srcPos)
1765+       val  isCaseClass  =  pt.classSymbol.is(CaseClass ) &&  ! defn.isTupleClass(pt.classSymbol)
1766+       if  ! pt.isNamedTupleType &&  ! isCaseClass then 
1767+         report.error(NamedPatternNotApplicable (pt), elems.head.srcPos)
17701768        Nil 
1771-       } else  {
1769+       else 
1770+         var  selNames  =  pt.namedTupleElementTypes(false ).map(_(0 ))
1771+         if  selNames.isEmpty &&  isCaseClass then 
1772+           selNames =  pt.classSymbol.caseAccessors.map(_.name.asTermName)
17721773        val  nameToIdx  =  selNames.zipWithIndex.toMap
17731774        val  reordered  =  Array .fill[untpd.Tree ](selNames.length): 
17741775          untpd.Ident (nme.WILDCARD ).withSpan(wildcardSpan)
@@ -1782,7 +1783,7 @@ object desugar {
17821783            case  _ => 
17831784              report.error(em " No element named ` $name` is defined in selector type  $pt" , arg.srcPos)
17841785        reordered.toList
1785-       } 
1786+       end if  
17861787
17871788    elems match 
17881789      case  (first @  NamedArg (_, _)) ::  _ =>  reorderedNamedArgs(first.span.startPos)
Original file line number Diff line number Diff line change @@ -228,7 +228,7 @@ enum ErrorMessageID(val isActive: Boolean = true) extends java.lang.Enum[ErrorMe
228228  case  OnlyFullyDependentAppliedConstructorTypeID  //  errorNumber: 212
229229  case  PointlessAppliedConstructorTypeID  //  errorNumber: 213
230230  case  IllegalContextBoundsID  //  errorNumber: 214
231-   case  NamedElementsNotDefinedID  //  errorNumber: 215
231+   case  NamedPatternNotApplicableID  //  errorNumber: 215
232232
233233  def  errorNumber  =  ordinal -  1 
234234
Original file line number Diff line number Diff line change @@ -3523,10 +3523,8 @@ final class IllegalContextBounds(using Context) extends SyntaxMsg(IllegalContext
35233523
35243524  override  protected  def  explain (using  Context ):  String  =  " " 
35253525
3526- final  class  NamedElementsNotDefined (selectorType : Type )(using  Context ) extends  PatternMatchMsg (NamedElementsNotDefinedID ): 
3526+ final  class  NamedPatternNotApplicable (selectorType : Type )(using  Context ) extends  PatternMatchMsg (NamedPatternNotApplicableID ): 
35273527  override  protected  def  msg (using  Context ):  String  = 
3528-     i " Selector type  $selectorType does not define any  named elements " 
3528+     i " Named patterns cannot be used with  $selectorType, because it is not a  named tuple or case class " 
35293529
3530-   override  protected  def  explain (using  Context ):  String  = 
3531-     i """ | $selectorType is not a valid selector type for the use with named patterns. 
3532-         |Only named tuples and case classes can be used with named patterns. """ .stripMargin
3530+   override  protected  def  explain (using  Context ):  String  =  " " 
Original file line number Diff line number Diff line change @@ -58,3 +58,7 @@ object Test:
5858    //  conversion to (name: Int, age: Int). This one would be harder to guard against.
5959
6060  val  typo :  (name : ? , age : ? ) =  (name =  " he" =  1 ) //  error
61+ 
62+   val  unnamedTuple :  (String , Int ) =  (" text" 10 )
63+   unnamedTuple match 
64+     case  (name =  n, age =  a) =>  //  error
 
 
   
 
     
   
   
          
    
    
     
    
      
     
     
    You can’t perform that action at this time.
  
 
    
  
    
      
        
     
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments