File tree Expand file tree Collapse file tree 4 files changed +30
-3
lines changed
compiler/src/dotty/tools/dotc Expand file tree Collapse file tree 4 files changed +30
-3
lines changed Original file line number Diff line number Diff line change @@ -907,7 +907,11 @@ trait TypedTreeInfo extends TreeInfo[Type] { self: Trees.Instance[Type] =>
907
907
def unapply (tree : tpd.TypeApply )(using Context ): Option [tpd.Tree ] = tree match
908
908
case TypeApply (Select (qual : RefTree , nme.asInstanceOfPM), arg :: Nil ) =>
909
909
arg.tpe match
910
- case AndType (ref, _) if qual.tpe eq ref => Some (qual)
910
+ case AndType (ref, nn1) if qual.tpe eq ref =>
911
+ qual.tpe.widen match
912
+ case OrNull (nn2) if nn1 eq nn2 =>
913
+ Some (qual)
914
+ case _ => None
911
915
case _ => None
912
916
case _ => None
913
917
end AssertNotNull
Original file line number Diff line number Diff line change @@ -480,10 +480,12 @@ object Nullables:
480
480
if mt.paramInfos.exists(_.isInstanceOf [ExprType ]) && ! fn.symbol.is(Inline ) =>
481
481
app match
482
482
case Apply (fn, args) =>
483
- val dropNotNull = new TreeMap :
483
+ object dropNotNull extends TreeMap :
484
+ var dropped : Boolean = false
484
485
override def transform (t : Tree )(using Context ) = t match
485
486
case AssertNotNull (t0) if t0.symbol.is(Mutable ) =>
486
487
nullables.println(i " dropping $t" )
488
+ dropped = true
487
489
transform(t0)
488
490
case t : ValDef if ! t.symbol.is(Lazy ) => super .transform(t)
489
491
case t : MemberDef =>
@@ -502,7 +504,7 @@ object Nullables:
502
504
def postProcess (formal : Type , arg : Tree ): Tree =
503
505
val nestedCtx = ctx.fresh.setNewTyperState()
504
506
val arg1 = dropNotNull.transform(arg)(using nestedCtx)
505
- if arg1 eq arg then arg
507
+ if ! dropNotNull.dropped then arg
506
508
else
507
509
val arg2 = retyper.typed(arg1, formal)(using nestedCtx)
508
510
if nestedCtx.reporter.hasErrors || ! (arg2.tpe <:< formal) then
Original file line number Diff line number Diff line change
1
+ import scala .quoted ._
2
+
3
+ type Foo
4
+ type F [X ]
5
+ def varargsFunc (funcs0 : Foo * ) = ???
6
+
7
+ inline def mcr1 : F [String ] = $ { mcr1Impl }
8
+ def mcr1Impl (using QuoteContext ): Expr [F [String ]] = ' {??? }
9
+
10
+ inline def mcr2 : Unit = $ {mcr2Impl}
11
+ def mcr2Impl (using ctx : QuoteContext ): Expr [Unit ] =
12
+ val func : Expr [Seq [Foo ] => Unit ] =
13
+ ' { (esx : Seq [Foo ]) => varargsFunc(esx : _* ) }
14
+ val trees : Expr [Seq [Foo ]] =
15
+ ' {Nil }
16
+ Expr .betaReduce(' {$func($trees)})
Original file line number Diff line number Diff line change
1
+ def f (x : => Any ) = ???
2
+ def g = f {
3
+ mcr1
4
+ mcr2
5
+ }
You can’t perform that action at this time.
0 commit comments