@@ -2514,55 +2514,10 @@ class Typer(@constructorOnly nestingLevel: Int = 0) extends Namer
25142514 assignType(cpy.RefinedTypeTree (tree)(tpt1, refinements1), tpt1, refinements1, refineCls)
25152515 }
25162516
2517- /** Type applied dependent class constructors in type positions */
2518- private def typedTermAppliedTypeTree (tree : untpd.AppliedTypeTree , tpt1 : Tree )(using Context ): Tree = {
2519- val AppliedTypeTree (originalTpt, args) = tree
2520- if Feature .enabled(Feature .modularity) then
2521- val constr =
2522- if tpt1.tpe.typeSymbol.primaryConstructor.exists then
2523- tpt1.tpe.typeSymbol.primaryConstructor
2524- else
2525- tpt1.tpe.typeSymbol.companionClass.primaryConstructor
2526- // TODO(kπ) vvvvvvv Might want to take the first term list? or all term lists? depends on the rest of the logic.
2527- // constr.paramSymss.flatten.foreach { p =>
2528- // if p.isTerm && !p.flags.is(Tracked) then
2529- // report.error(
2530- // em"""The constructor parameter `${p.name}` of `${tpt1.tpe}` is not tracked.
2531- // |Only tracked parameters are allowed in dependent constructor applications.""",
2532- // tree.srcPos
2533- // )
2534- // }
2535- def getArgs (t : Tree ): List [List [Tree ]] = t match
2536- case AppliedTypeTree (base, args) => getArgs(base) :+ args
2537- case _ => Nil
2538-
2539- def instAll (t : Type , args : List [List [Tree ]]): Type = (t.widenDealias, args) match
2540- case (_, Nil ) => t
2541- case (t : MethodType , args :: rest) =>
2542- val t1 = t.instantiate(args.map(_.tpe))
2543- instAll(t1, rest)
2544- case (_, args :: rest) =>
2545- val t1 = t.appliedTo(args.map(_.tpe))
2546- instAll(t1, rest)
2547-
2548- constr.typeRef.underlying match
2549- case mt : MethodOrPoly =>
2550- val typedArgs = tree.args.map(a => (TypeTree (typedExpr(a).tpe)))
2551- val preArgs = getArgs(tpt1)
2552- TypeTree (instAll(mt, preArgs :+ typedArgs))
2553- else
2554- errorTree(tree, dependentMsg)
2555- }
2556-
25572517 def typedAppliedTypeTree (tree : untpd.AppliedTypeTree )(using Context ): Tree = {
25582518 val tpt1 = withoutMode(Mode .Pattern ):
25592519 typed(tree.tpt, AnyTypeConstructorProto )
25602520
2561- tree.args match
2562- case arg :: _ if arg.isTerm =>
2563- return typedTermAppliedTypeTree(tree, tpt1)
2564- case _ =>
2565-
25662521 val tparams = tpt1.tpe.typeParams
25672522 if tpt1.tpe.isError then
25682523 val args1 = tree.args.mapconserve(typedType(_))
@@ -3522,7 +3477,7 @@ class Typer(@constructorOnly nestingLevel: Int = 0) extends Namer
35223477
35233478 /** Typecheck tree without adapting it, returning a typed tree.
35243479 * @param initTree the untyped tree
3525- * @param pt the expected result type
3480+ * @param pt the expected result typ
35263481 * @param locked the set of type variables of the current typer state that cannot be interpolated
35273482 * at the present time
35283483 */
@@ -3562,7 +3517,9 @@ class Typer(@constructorOnly nestingLevel: Int = 0) extends Namer
35623517
35633518 def typedUnnamed (tree : untpd.Tree ): Tree = tree match {
35643519 case tree : untpd.Apply =>
3565- if (ctx.mode is Mode .Pattern ) typedUnApply(tree, pt) else typedApply(tree, pt)
3520+ if (ctx.mode is Mode .Pattern ) typedUnApply(tree, pt)
3521+ else if (ctx.mode is Mode .Type ) typedAppliedConstructorType(tree)
3522+ else typedApply(tree, pt)
35663523 case tree : untpd.This => typedThis(tree)
35673524 case tree : untpd.Number => typedNumber(tree, pt)
35683525 case tree : untpd.Literal => typedLiteral(tree)
0 commit comments