@@ -602,20 +602,20 @@ object Objects:
602
602
case _ => a
603
603
604
604
def filterType (tpe : Type )(using Context ): Value =
605
- val baseClasses = tpe.baseClasses
606
- if baseClasses.isEmpty then a
607
- else tpe match
605
+ tpe match
608
606
case t @ SAMType (_, _) if a.isInstanceOf [Fun ] => a // if tpe is SAMType and a is Fun, allow it
609
- case _ => filterClass(baseClasses.head) // could have called ClassSymbol, but it does not handle OrType and AndType
607
+ case _ =>
608
+ val baseClasses = tpe.baseClasses
609
+ if baseClasses.isEmpty then a
610
+ else filterClass(baseClasses.head) // could have called ClassSymbol, but it does not handle OrType and AndType
610
611
611
612
def filterClass (sym : Symbol )(using Context ): Value =
612
613
if ! sym.isClass then a
613
614
else
614
615
val klass = sym.asClass
615
616
a match
616
617
case Cold => Cold
617
- case ref : Ref if ref.klass.isSubClass(klass) => ref
618
- case ref : Ref => Bottom
618
+ case ref : Ref => if ref.klass.isSubClass(klass) then ref else Bottom
619
619
case ValueSet (values) => values.map(v => v.filterClass(klass)).join
620
620
case arr : OfArray => if defn.ArrayClass .isSubClass(klass) then arr else Bottom
621
621
case fun : Fun =>
@@ -1572,7 +1572,7 @@ object Objects:
1572
1572
report.warning(" The argument should be a constant integer value" , arg)
1573
1573
res.widen(1 )
1574
1574
case _ =>
1575
- if res.isInstanceOf [Fun ] then res.widen(2 ) else res.widen(1 ) // TODO: changing to widen(2) causes standard library analysis to loop infinitely
1575
+ if res.isInstanceOf [Fun ] then res.widen(2 ) else res.widen(1 )
1576
1576
1577
1577
argInfos += ArgInfo (widened, trace.add(arg.tree), arg.tree)
1578
1578
}
0 commit comments