@@ -40,8 +40,15 @@ object untpd extends Trees.Instance[Untyped] with UntypedTreeInfo {
40
40
def withName (name : Name )(implicit ctx : Context ) = cpy.ModuleDef (this )(name.toTermName, impl)
41
41
}
42
42
43
- /** extend extended impl */
44
- case class Extension (name : TypeName , extended : Tree , impl : Template ) extends MemberDef
43
+ /** extension name tparams vparamss for tpt impl
44
+ *
45
+ * where `tparams` and `vparamss` are part of `constr`.
46
+ */
47
+ case class Extension (name : TypeName , constr : DefDef , tpt : Tree , impl : Template )
48
+ extends MemberDef {
49
+ type ThisTree [- T >: Untyped ] <: Trees .NameTree [T ] with Trees .MemberDef [T ] with Extension
50
+ def withName (name : Name )(implicit ctx : Context ) = cpy.Extension (this )(name.toTypeName, constr, tpt, impl)
51
+ }
45
52
46
53
case class ParsedTry (expr : Tree , handler : Tree , finalizer : Tree ) extends TermTree
47
54
@@ -143,7 +150,7 @@ object untpd extends Trees.Instance[Untyped] with UntypedTreeInfo {
143
150
144
151
case class EnumCase () extends Mod (Flags .EmptyFlags )
145
152
146
- case class Extension () extends Mod (Flags .EmptyFlags )
153
+ case class InstanceDcl () extends Mod (Flags .EmptyFlags )
147
154
}
148
155
149
156
/** Modifiers and annotations for definitions
@@ -416,6 +423,10 @@ object untpd extends Trees.Instance[Untyped] with UntypedTreeInfo {
416
423
case tree : ModuleDef if (name eq tree.name) && (impl eq tree.impl) => tree
417
424
case _ => finalize(tree, untpd.ModuleDef (name, impl))
418
425
}
426
+ def Extension (tree : Tree )(name : TypeName , constr : DefDef , tpt : Tree , impl : Template ) = tree match {
427
+ case tree : Extension if (name eq tree.name) && (constr eq tree.constr) && (tpt eq tree.tpt) && (impl eq tree.impl) => tree
428
+ case _ => finalize(tree, untpd.Extension (name, constr, tpt, impl))
429
+ }
419
430
def ParsedTry (tree : Tree )(expr : Tree , handler : Tree , finalizer : Tree ) = tree match {
420
431
case tree : ParsedTry
421
432
if (expr eq tree.expr) && (handler eq tree.handler) && (finalizer eq tree.finalizer) => tree
@@ -499,6 +510,8 @@ object untpd extends Trees.Instance[Untyped] with UntypedTreeInfo {
499
510
override def transform (tree : Tree )(implicit ctx : Context ): Tree = tree match {
500
511
case ModuleDef (name, impl) =>
501
512
cpy.ModuleDef (tree)(name, transformSub(impl))
513
+ case Extension (name, constr, tpt, impl) =>
514
+ cpy.Extension (tree)(name, transformSub(constr), transform(tpt), transformSub(impl))
502
515
case ParsedTry (expr, handler, finalizer) =>
503
516
cpy.ParsedTry (tree)(transform(expr), transform(handler), transform(finalizer))
504
517
case SymbolLit (str) =>
@@ -548,6 +561,8 @@ object untpd extends Trees.Instance[Untyped] with UntypedTreeInfo {
548
561
override def foldOver (x : X , tree : Tree )(implicit ctx : Context ): X = tree match {
549
562
case ModuleDef (name, impl) =>
550
563
this (x, impl)
564
+ case Extension (name, constr, tpt, impl) =>
565
+ this (this (this (x, constr), tpt), impl)
551
566
case ParsedTry (expr, handler, finalizer) =>
552
567
this (this (this (x, expr), handler), finalizer)
553
568
case SymbolLit (str) =>
0 commit comments