Skip to content

Commit b41333c

Browse files
committed
Make nested map ops in Decorators an extension
Also, add a nestedZipWithConserve method
1 parent d3c4c9d commit b41333c

File tree

7 files changed

+21
-22
lines changed

7 files changed

+21
-22
lines changed

compiler/src/dotty/tools/dotc/ast/Desugar.scala

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ package ast
55
import core._
66
import util.Spans._, Types._, Contexts._, Constants._, Names._, NameOps._, Flags._
77
import Symbols._, StdNames._, Trees._
8-
import Decorators._, transform.SymUtils._
8+
import Decorators.{given _}, transform.SymUtils._
99
import NameKinds.{UniqueName, EvidenceParamName, DefaultGetterName}
1010
import typer.{FrontEnd, Namer}
1111
import util.{Property, SourceFile, SourcePosition}
@@ -501,16 +501,11 @@ object desugar {
501501

502502
// Annotations are dropped from the constructor parameters but should be
503503
// preserved in all derived parameters.
504-
val derivedTparams = {
505-
val impliedTparamsIt = impliedTparams.iterator
506-
constrTparams.map(tparam => derivedTypeParam(tparam)
507-
.withAnnotations(impliedTparamsIt.next().mods.annotations))
508-
}
509-
val derivedVparamss = {
510-
val constrVparamsIt = constrVparamss.iterator.flatten
511-
constrVparamss.nestedMap(vparam => derivedTermParam(vparam)
512-
.withAnnotations(constrVparamsIt.next().mods.annotations))
513-
}
504+
val derivedTparams =
505+
constrTparams.zipWithConserve(impliedTparams)((tparam, impliedParam) =>
506+
derivedTypeParam(tparam).withAnnotations(impliedParam.mods.annotations))
507+
val derivedVparamss =
508+
constrVparamss.nestedMap(vparam => derivedTermParam(vparam))
514509

515510
val arity = constrVparamss.head.length
516511

compiler/src/dotty/tools/dotc/ast/tpd.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import transform.TypeUtils._
99
import core._
1010
import util.Spans._, Types._, Contexts._, Constants._, Names._, Flags._, NameOps._
1111
import Symbols._, StdNames._, Annotations._, Trees._, Symbols._
12-
import Decorators._, DenotTransformers._
12+
import Decorators.{given _}, DenotTransformers._
1313
import collection.{immutable, mutable}
1414
import util.{Property, SourceFile, NoSource}
1515
import NameKinds.{TempResultName, OuterSelectName}

compiler/src/dotty/tools/dotc/core/Decorators.scala

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -155,10 +155,13 @@ object Decorators {
155155
def & (ys: List[T]): List[T] = xs filter (ys contains _)
156156
}
157157

158-
implicit class ListOfListDecorator[T](val xss: List[List[T]]) extends AnyVal {
159-
def nestedMap[U](f: T => U): List[List[U]] = xss map (_ map f)
160-
def nestedMapconserve[U](f: T => U): List[List[U]] = xss mapconserve (_ mapconserve f)
161-
}
158+
extension ListOfListDecorator on [T, U](xss: List[List[T]]):
159+
def nestedMap(f: T => U): List[List[U]] =
160+
xss.map(_.map(f))
161+
def nestedMapConserve(f: T => U): List[List[U]] =
162+
xss.mapconserve(_.mapconserve(f))
163+
def nestedZipWithConserve(yss: List[List[U]])(f: (T, U) => T): List[List[T]] =
164+
xss.zipWithConserve(yss)((xs, ys) => xs.zipWithConserve(ys)(f))
162165

163166
implicit class TextToString(val text: Text) extends AnyVal {
164167
def show(implicit ctx: Context): String = text.mkString(ctx.settings.pageWidth.value, ctx.settings.printLines.value)

compiler/src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import util.Spans._
2323
import util.SourceFile
2424
import ast.{TreeTypeMap, Trees, tpd, untpd}
2525
import Trees._
26-
import Decorators._
26+
import Decorators.{given _}
2727
import transform.SymUtils._
2828

2929
import dotty.tools.tasty.{TastyBuffer, TastyReader}

compiler/src/dotty/tools/dotc/transform/FullParameterization.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import core._
55
import Types._
66
import Contexts._
77
import Symbols._
8-
import Decorators._
8+
import Decorators.{given _}
99
import TypeUtils._
1010
import StdNames.nme
1111
import NameOps._

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ package typer
55
import core._
66
import ast._
77
import Trees._, StdNames._, Scopes._, Denotations._, Comments._
8-
import Contexts._, Symbols._, Types._, SymDenotations._, Names._, NameOps._, Flags._, Decorators._
8+
import Contexts._, Symbols._, Types._, SymDenotations._, Names._, NameOps._, Flags._
9+
import Decorators.{given _}
910
import NameKinds.DefaultGetterName
1011
import TypeApplications.TypeParamInfo
1112
import ast.desugar, ast.desugar._

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import Names._
1919
import NameOps._
2020
import NameKinds._
2121
import Flags._
22-
import Decorators._
22+
import Decorators.{given _}
2323
import ErrorReporting._
2424
import Checking._
2525
import Inferencing._
@@ -1706,8 +1706,8 @@ class Typer extends Namer
17061706
}
17071707
val DefDef(name, tparams, vparamss, tpt, _) = ddef
17081708
completeAnnotations(ddef, sym)
1709-
val tparams1 = tparams mapconserve (typed(_).asInstanceOf[TypeDef])
1710-
val vparamss1 = vparamss nestedMapconserve (typed(_).asInstanceOf[ValDef])
1709+
val tparams1 = tparams.mapconserve(typed(_).asInstanceOf[TypeDef])
1710+
val vparamss1 = vparamss.nestedMapConserve(typed(_).asInstanceOf[ValDef])
17111711
vparamss1.foreach(checkNoForwardDependencies)
17121712
if (sym.isOneOf(GivenOrImplicit)) checkImplicitConversionDefOK(sym)
17131713
val tpt1 = checkSimpleKinded(typedType(tpt))

0 commit comments

Comments
 (0)