Skip to content

Commit 41fbdc4

Browse files
committed
Fix #8903: Fix test for default parameters
1 parent 93ef012 commit 41fbdc4

File tree

3 files changed

+14
-3
lines changed

3 files changed

+14
-3
lines changed

compiler/src/dotty/tools/dotc/typer/Typer.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2898,6 +2898,7 @@ class Typer extends Namer
28982898
def dummyArg(tp: Type) = untpd.Ident(nme.???).withTypeUnchecked(tp)
28992899

29002900
def addImplicitArgs(using Context) = {
2901+
def hasDefaultParams = methPart(tree).symbol.hasDefaultParams
29012902
def implicitArgs(formals: List[Type], argIndex: Int, pt: Type): List[Tree] = formals match {
29022903
case Nil => Nil
29032904
case formal :: formals1 =>
@@ -2907,7 +2908,7 @@ class Typer extends Namer
29072908
val pt1 = pt.deepenProto
29082909
if ((pt1 `ne` pt) && constrainResult(tree.symbol, wtp, pt1)) implicitArgs(formals, argIndex, pt1)
29092910
else arg :: implicitArgs(formals1, argIndex + 1, pt1)
2910-
case failed: SearchFailureType if !tree.symbol.hasDefaultParams =>
2911+
case failed: SearchFailureType if !hasDefaultParams =>
29112912
// no need to search further, the adapt fails in any case
29122913
// the reason why we continue inferring arguments in case of an AmbiguousImplicits
29132914
// is that we need to know whether there are further errors.
@@ -2963,7 +2964,7 @@ class Typer extends Namer
29632964

29642965
// If method has default params, fall back to regular application
29652966
// where all inferred implicits are passed as named args.
2966-
if (methPart(tree).symbol.hasDefaultParams && !propFail.isInstanceOf[AmbiguousImplicits]) {
2967+
if hasDefaultParams && !propFail.isInstanceOf[AmbiguousImplicits] then
29672968
val namedArgs = wtp.paramNames.lazyZip(args).flatMap { (pname, arg) =>
29682969
if (arg.tpe.isError) Nil else untpd.NamedArg(pname, untpd.TypedSplice(arg)) :: Nil
29692970
}
@@ -2975,7 +2976,6 @@ class Typer extends Namer
29752976
} { (_, _) =>
29762977
issueErrors()
29772978
}
2978-
}
29792979
else issueErrors()
29802980
}
29812981
else tree match {

tests/run/i8903.check

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
done

tests/run/i8903.scala

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
object a {
2+
object home { def /(s: String) = createDir }
3+
object createDir {
4+
def createDirectoryIfNotExists(createParents: Boolean = false)(using attributes: Seq[String] = Seq.empty, linkOptions: Seq[String] = Seq.empty): Unit =
5+
println("done")
6+
}
7+
8+
//this line causes the crash
9+
@main def Test = (home/"temp").createDirectoryIfNotExists()
10+
}

0 commit comments

Comments
 (0)