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 {
132132 ImportRenamedTwiceID ,
133133 TypeTestAlwaysSucceedsID ,
134134 TermMemberNeedsNeedsResultTypeForImplicitSearchID ,
135- CaseClassCannotExtendEnumID
135+ CaseClassCannotExtendEnumID ,
136+ ValueClassParameterMayNotBeCallByNameID
136137 ;
137138
138139 public int errorNumber () {
Original file line number Diff line number Diff line change @@ -1666,6 +1666,13 @@ object messages {
16661666 val explanation = " "
16671667 }
16681668
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+
16691676 case class OnlyCaseClassOrCaseObjectAllowed ()(implicit ctx : Context )
16701677 extends Message (OnlyCaseClassOrCaseObjectAllowedID ) {
16711678 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 {
537537 case param :: params =>
538538 if (param.is(Mutable ))
539539 ctx.error(ValueClassParameterMayNotBeAVar (clazz, param), param.pos)
540+ if (param.info.isInstanceOf [ExprType ])
541+ ctx.error(ValueClassParameterMayNotBeCallByName (clazz, param), param.pos)
540542 if (param.is(Erased ))
541543 ctx.error(" value class first parameter cannot be `erased`" , param.pos)
542544 else {
Original file line number Diff line number Diff line change @@ -935,6 +935,18 @@ class ErrorMessagesTests extends ErrorMessagesTest {
935935 assertEquals(" class MyValue" , valueClass.show)
936936 }
937937
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+
938950 @ Test def onlyCaseClassOrCaseObjectAllowed =
939951 checkMessagesAfter(FrontEnd .name) {
940952 """ case Foobar"""
You can’t perform that action at this time.
0 commit comments