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 @@ -770,7 +770,7 @@ object desugar {
770
770
}
771
771
else if (companionMembers.nonEmpty || companionDerived.nonEmpty || isEnum)
772
772
companionDefs(anyRef, companionMembers)
773
- else if ( isValueClass)
773
+ else if isValueClass && ! isObject then
774
774
companionDefs(anyRef, Nil )
775
775
else Nil
776
776
Original file line number Diff line number Diff line change @@ -1670,10 +1670,15 @@ class CannotExtendAnyVal(sym: Symbol)(using Context)
1670
1670
extends SyntaxMsg (CannotExtendAnyValID ) {
1671
1671
def msg (using Context ) = i """ $sym cannot extend ${hl(" AnyVal" )}"""
1672
1672
def explain (using Context ) =
1673
- i """ Only classes (not traits) are allowed to extend ${hl(" AnyVal" )}, but traits may extend
1674
- | ${hl(" Any" )} to become ${Green (" \" universal traits\" " )} which may only have ${hl(" def" )} members.
1675
- |Universal traits can be mixed into classes that extend ${hl(" AnyVal" )}.
1676
- | """
1673
+ if sym.is(Trait ) then
1674
+ i """ Only classes (not traits) are allowed to extend ${hl(" AnyVal" )}, but traits may extend
1675
+ | ${hl(" Any" )} to become ${Green (" \" universal traits\" " )} which may only have ${hl(" def" )} members.
1676
+ |Universal traits can be mixed into classes that extend ${hl(" AnyVal" )}.
1677
+ | """
1678
+ else if sym.is(Module ) then
1679
+ i """ Only classes (not objects) are allowed to extend ${hl(" AnyVal" )}.
1680
+ | """
1681
+ else " "
1677
1682
}
1678
1683
1679
1684
class CannotExtendJavaEnum (sym : Symbol )(using Context )
Original file line number Diff line number Diff line change @@ -701,6 +701,8 @@ object Checking {
701
701
if (isDerivedValueClass(clazz)) {
702
702
if (clazz.is(Trait ))
703
703
report.error(CannotExtendAnyVal (clazz), clazz.srcPos)
704
+ if clazz.is(Module ) then
705
+ report.error(CannotExtendAnyVal (clazz), clazz.srcPos)
704
706
if (clazz.is(Abstract ))
705
707
report.error(ValueClassesMayNotBeAbstract (clazz), clazz.srcPos)
706
708
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