File tree 5 files changed +24
-5
lines changed
compiler/src/dotty/tools/dotc
5 files changed +24
-5
lines changed Original file line number Diff line number Diff line change @@ -820,7 +820,7 @@ object desugar {
820
820
}
821
821
else if (companionMembers.nonEmpty || companionDerived.nonEmpty || isEnum)
822
822
companionDefs(anyRef, companionMembers)
823
- else if ( isValueClass)
823
+ else if isValueClass && ! isObject then
824
824
companionDefs(anyRef, Nil )
825
825
else Nil
826
826
Original file line number Diff line number Diff line change @@ -1678,10 +1678,15 @@ class CannotExtendAnyVal(sym: Symbol)(using Context)
1678
1678
extends SyntaxMsg (CannotExtendAnyValID ) {
1679
1679
def msg (using Context ) = i """ $sym cannot extend ${hl(" AnyVal" )}"""
1680
1680
def explain (using Context ) =
1681
- i """ Only classes (not traits) are allowed to extend ${hl(" AnyVal" )}, but traits may extend
1682
- | ${hl(" Any" )} to become ${Green (" \" universal traits\" " )} which may only have ${hl(" def" )} members.
1683
- |Universal traits can be mixed into classes that extend ${hl(" AnyVal" )}.
1684
- | """
1681
+ if sym.is(Trait ) then
1682
+ i """ Only classes (not traits) are allowed to extend ${hl(" AnyVal" )}, but traits may extend
1683
+ | ${hl(" Any" )} to become ${Green (" \" universal traits\" " )} which may only have ${hl(" def" )} members.
1684
+ |Universal traits can be mixed into classes that extend ${hl(" AnyVal" )}.
1685
+ | """
1686
+ else if sym.is(Module ) then
1687
+ i """ Only classes (not objects) are allowed to extend ${hl(" AnyVal" )}.
1688
+ | """
1689
+ else " "
1685
1690
}
1686
1691
1687
1692
class CannotExtendJavaEnum (sym : Symbol )(using Context )
Original file line number Diff line number Diff line change @@ -716,6 +716,8 @@ object Checking {
716
716
if (isDerivedValueClass(clazz)) {
717
717
if (clazz.is(Trait ))
718
718
report.error(CannotExtendAnyVal (clazz), clazz.srcPos)
719
+ if clazz.is(Module ) then
720
+ report.error(CannotExtendAnyVal (clazz), clazz.srcPos)
719
721
if (clazz.is(Abstract ))
720
722
report.error(ValueClassesMayNotBeAbstract (clazz), clazz.srcPos)
721
723
if (! clazz.isStatic)
Original file line number Diff line number Diff line change
1
+ -- [E068] Syntax Error: tests/neg/i18274.scala:3:7 ---------------------------------------------------------------------
2
+ 3 |object Foo extends AnyVal // error
3
+ | ^
4
+ | object Foo cannot extend AnyVal
5
+ |---------------------------------------------------------------------------------------------------------------------
6
+ | Explanation (enabled by `-explain`)
7
+ |- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
8
+ | Only classes (not objects) are allowed to extend AnyVal.
9
+ ---------------------------------------------------------------------------------------------------------------------
Original file line number Diff line number Diff line change
1
+ //> using options -explain
2
+
3
+ object Foo extends AnyVal // error
You can’t perform that action at this time.
0 commit comments