@@ -2556,55 +2556,10 @@ class Typer(@constructorOnly nestingLevel: Int = 0) extends Namer
25562556 assignType(cpy.RefinedTypeTree (tree)(tpt1, refinements1), tpt1, refinements1, refineCls)
25572557 }
25582558
2559- /** Type applied dependent class constructors in type positions */
2560- private def typedTermAppliedTypeTree (tree : untpd.AppliedTypeTree , tpt1 : Tree )(using Context ): Tree = {
2561- val AppliedTypeTree (originalTpt, args) = tree
2562- if Feature .enabled(Feature .modularity) then
2563- val constr =
2564- if tpt1.tpe.typeSymbol.primaryConstructor.exists then
2565- tpt1.tpe.typeSymbol.primaryConstructor
2566- else
2567- tpt1.tpe.typeSymbol.companionClass.primaryConstructor
2568- // TODO(kπ) vvvvvvv Might want to take the first term list? or all term lists? depends on the rest of the logic.
2569- // constr.paramSymss.flatten.foreach { p =>
2570- // if p.isTerm && !p.flags.is(Tracked) then
2571- // report.error(
2572- // em"""The constructor parameter `${p.name}` of `${tpt1.tpe}` is not tracked.
2573- // |Only tracked parameters are allowed in dependent constructor applications.""",
2574- // tree.srcPos
2575- // )
2576- // }
2577- def getArgs (t : Tree ): List [List [Tree ]] = t match
2578- case AppliedTypeTree (base, args) => getArgs(base) :+ args
2579- case _ => Nil
2580-
2581- def instAll (t : Type , args : List [List [Tree ]]): Type = (t.widenDealias, args) match
2582- case (_, Nil ) => t
2583- case (t : MethodType , args :: rest) =>
2584- val t1 = t.instantiate(args.map(_.tpe))
2585- instAll(t1, rest)
2586- case (_, args :: rest) =>
2587- val t1 = t.appliedTo(args.map(_.tpe))
2588- instAll(t1, rest)
2589-
2590- constr.typeRef.underlying match
2591- case mt : MethodOrPoly =>
2592- val typedArgs = tree.args.map(a => (TypeTree (typedExpr(a).tpe)))
2593- val preArgs = getArgs(tpt1)
2594- TypeTree (instAll(mt, preArgs :+ typedArgs))
2595- else
2596- errorTree(tree, dependentMsg)
2597- }
2598-
25992559 def typedAppliedTypeTree (tree : untpd.AppliedTypeTree )(using Context ): Tree = {
26002560 val tpt1 = withoutMode(Mode .Pattern ):
26012561 typed(tree.tpt, AnyTypeConstructorProto )
26022562
2603- tree.args match
2604- case arg :: _ if arg.isTerm =>
2605- return typedTermAppliedTypeTree(tree, tpt1)
2606- case _ =>
2607-
26082563 val tparams = tpt1.tpe.typeParams
26092564 if tpt1.tpe.isError then
26102565 val args1 = tree.args.mapconserve(typedType(_))
@@ -3556,7 +3511,7 @@ class Typer(@constructorOnly nestingLevel: Int = 0) extends Namer
35563511
35573512 /** Typecheck tree without adapting it, returning a typed tree.
35583513 * @param initTree the untyped tree
3559- * @param pt the expected result type
3514+ * @param pt the expected result typ
35603515 * @param locked the set of type variables of the current typer state that cannot be interpolated
35613516 * at the present time
35623517 */
@@ -3596,7 +3551,9 @@ class Typer(@constructorOnly nestingLevel: Int = 0) extends Namer
35963551
35973552 def typedUnnamed (tree : untpd.Tree ): Tree = tree match {
35983553 case tree : untpd.Apply =>
3599- if (ctx.mode is Mode .Pattern ) typedUnApply(tree, pt) else typedApply(tree, pt)
3554+ if (ctx.mode is Mode .Pattern ) typedUnApply(tree, pt)
3555+ else if (ctx.mode is Mode .Type ) typedAppliedConstructorType(tree)
3556+ else typedApply(tree, pt)
36003557 case tree : untpd.This => typedThis(tree)
36013558 case tree : untpd.Number => typedNumber(tree, pt)
36023559 case tree : untpd.Literal => typedLiteral(tree)
0 commit comments