Skip to content

Commit 758f2a3

Browse files
committed
Handle given parameters in extension clauses when desugaring
1 parent 4c6945e commit 758f2a3

File tree

2 files changed

+10
-7
lines changed

2 files changed

+10
-7
lines changed

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

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -830,14 +830,14 @@ object desugar {
830830
val impl = mdef.impl
831831
val mods = mdef.mods
832832
impl.constr match {
833-
case DefDef(_, tparams, (vparams @ (vparam :: Nil)) :: _, _, _) =>
833+
case DefDef(_, tparams, (vparams @ (vparam :: Nil)) :: givenParamss, _, _) =>
834834
assert(mods.is(Given))
835835
return moduleDef(
836836
cpy.ModuleDef(mdef)(
837837
mdef.name,
838838
cpy.Template(impl)(
839839
constr = emptyConstructor,
840-
body = impl.body.map(makeExtensionDef(_, tparams, vparams)))))
840+
body = impl.body.map(makeExtensionDef(_, tparams, vparams, givenParamss)))))
841841
case _ =>
842842
}
843843

@@ -892,16 +892,19 @@ object desugar {
892892
* If the given member `mdef` is not of this form, flag it as an error.
893893
*/
894894

895-
def makeExtensionDef(mdef: Tree, tparams: List[TypeDef], leadingParams: List[ValDef])(given ctx: Context): Tree = {
895+
def makeExtensionDef(mdef: Tree, tparams: List[TypeDef], leadingParams: List[ValDef],
896+
givenParamss: List[List[ValDef]])(given ctx: Context): Tree = {
896897
val allowed = "allowed here, since collective parameters are given"
897898
mdef match {
898899
case mdef: DefDef =>
899900
if (mdef.mods.is(Extension)) {
900901
ctx.error(em"No extension method $allowed", mdef.sourcePos)
901902
mdef
902903
}
903-
else cpy.DefDef(mdef)(tparams = tparams ++ mdef.tparams, vparamss = leadingParams :: mdef.vparamss)
904-
.withFlags(Extension)
904+
else cpy.DefDef(mdef)(
905+
tparams = tparams ++ mdef.tparams,
906+
vparamss = leadingParams :: givenParamss ::: mdef.vparamss
907+
).withFlags(Extension)
905908
case mdef: Import =>
906909
mdef
907910
case mdef =>

tests/pos/reference/extension-methods.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
object Test with
1+
object ExtMethods with
22

33
case class Circle(x: Double, y: Double, radius: Double)
44

@@ -73,4 +73,4 @@ object Test with
7373
xs.sorted.takeRight(n)
7474
}
7575

76-
end Test
76+
end ExtMethods

0 commit comments

Comments
 (0)