File tree Expand file tree Collapse file tree 4 files changed +9
-3
lines changed
compiler/src/dotty/tools/dotc Expand file tree Collapse file tree 4 files changed +9
-3
lines changed Original file line number Diff line number Diff line change @@ -853,10 +853,13 @@ object desugar {
853
853
else
854
854
constr1 = addEvidenceParams(constr1, evidenceParams)
855
855
856
+ val mods =
857
+ if (isSimpleExtension) EmptyModifiers
858
+ else EmptyModifiers .withAddedMod(Mod .TraitImplementation ())
856
859
val icls =
857
860
TypeDef (extName,
858
861
cpy.Template (impl)(constr = constr1, parents = parents1, body = body1))
859
- .withFlags(Implicit )
862
+ .withMods(mods. withFlags(Implicit ) )
860
863
desugr.println(i " desugar $extended --> $icls" )
861
864
classDef(icls)
862
865
}
Original file line number Diff line number Diff line change @@ -142,6 +142,8 @@ object untpd extends Trees.Instance[Untyped] with UntypedTreeInfo {
142
142
case class Enum () extends Mod (Flags .EmptyFlags )
143
143
144
144
case class EnumCase () extends Mod (Flags .EmptyFlags )
145
+
146
+ case class TraitImplementation () extends Mod (Flags .EmptyFlags )
145
147
}
146
148
147
149
/** Modifiers and annotations for definitions
Original file line number Diff line number Diff line change @@ -944,7 +944,8 @@ class Namer { typer: Typer =>
944
944
if (cls.isRefinementClass) ptype
945
945
else {
946
946
val pt = checkClassType(ptype, parent.pos,
947
- traitReq = parent ne parents.head, stablePrefixReq = true )
947
+ traitReq = (parent `ne` parents.head) || original.mods.hasMod[Mod .TraitImplementation ],
948
+ stablePrefixReq = true )
948
949
if (pt.derivesFrom(cls)) {
949
950
val addendum = parent match {
950
951
case Select (qual : Super , _) if ctx.scala2Mode =>
Original file line number Diff line number Diff line change @@ -30,7 +30,7 @@ object extensions {
30
30
31
31
extend Circle2 extends HasArea {} // error: `implements` or `{` expected // error: `def` expected
32
32
33
- extend Circle implements HasAreaClass {
33
+ extend Circle implements HasAreaClass { // error: class HasAreaClass is not a trait
34
34
def area = this .radius * this .radius * math.Pi
35
35
}
36
36
You can’t perform that action at this time.
0 commit comments