File tree Expand file tree Collapse file tree 4 files changed +23
-1
lines changed
test/dotty/tools/dotc/reporting Expand file tree Collapse file tree 4 files changed +23
-1
lines changed Original file line number Diff line number Diff line change @@ -132,7 +132,8 @@ public enum ErrorMessageID {
132
132
ImportRenamedTwiceID ,
133
133
TypeTestAlwaysSucceedsID ,
134
134
TermMemberNeedsNeedsResultTypeForImplicitSearchID ,
135
- CaseClassCannotExtendEnumID
135
+ CaseClassCannotExtendEnumID ,
136
+ ValueClassParameterMayNotBeCallByNameID
136
137
;
137
138
138
139
public int errorNumber () {
Original file line number Diff line number Diff line change @@ -1666,6 +1666,13 @@ object messages {
1666
1666
val explanation = " "
1667
1667
}
1668
1668
1669
+ case class ValueClassParameterMayNotBeCallByName (valueClass : Symbol , param : Symbol )(implicit ctx : Context )
1670
+ extends Message (ValueClassParameterMayNotBeCallByNameID ) {
1671
+ val msg = s " value class parameter ` ${param.name}` may not be call-by-name "
1672
+ val kind = " Syntax"
1673
+ val explanation = " "
1674
+ }
1675
+
1669
1676
case class OnlyCaseClassOrCaseObjectAllowed ()(implicit ctx : Context )
1670
1677
extends Message (OnlyCaseClassOrCaseObjectAllowedID ) {
1671
1678
val msg = " only `case class` or `case object` allowed"
Original file line number Diff line number Diff line change @@ -537,6 +537,8 @@ object Checking {
537
537
case param :: params =>
538
538
if (param.is(Mutable ))
539
539
ctx.error(ValueClassParameterMayNotBeAVar (clazz, param), param.pos)
540
+ if (param.info.isInstanceOf [ExprType ])
541
+ ctx.error(ValueClassParameterMayNotBeCallByName (clazz, param), param.pos)
540
542
if (param.is(Erased ))
541
543
ctx.error(" value class first parameter cannot be `erased`" , param.pos)
542
544
else {
Original file line number Diff line number Diff line change @@ -935,6 +935,18 @@ class ErrorMessagesTests extends ErrorMessagesTest {
935
935
assertEquals(" class MyValue" , valueClass.show)
936
936
}
937
937
938
+ @ Test def valueClassParameterMayNotBeCallByName =
939
+ checkMessagesAfter(RefChecks .name) {
940
+ """ class MyValue(a: => Int) extends AnyVal"""
941
+ }
942
+ .expect { (ictx, messages) =>
943
+ implicit val ctx : Context = ictx
944
+ assertMessageCount(1 , messages)
945
+ val ValueClassParameterMayNotBeCallByName (valueClass, param) :: Nil = messages
946
+ assertEquals(" class MyValue" , valueClass.show)
947
+ assertEquals(" value a" , param.show)
948
+ }
949
+
938
950
@ Test def onlyCaseClassOrCaseObjectAllowed =
939
951
checkMessagesAfter(FrontEnd .name) {
940
952
""" case Foobar"""
You can’t perform that action at this time.
0 commit comments