Skip to content

Commit 9c069c1

Browse files
committed
Treat unapply/unapplySeq more systematically
1 parent e082e4d commit 9c069c1

File tree

3 files changed

+6
-3
lines changed

3 files changed

+6
-3
lines changed

compiler/src/dotty/tools/dotc/core/NameOps.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ object NameOps {
7171
def isSelectorName: Boolean = testSimple(n => n.startsWith("_") && n.drop(1).forall(_.isDigit))
7272
def isAnonymousClassName: Boolean = name.startsWith(str.ANON_CLASS)
7373
def isAnonymousFunctionName: Boolean = name.startsWith(str.ANON_FUN)
74+
def isUnapplyName: Boolean = name == nme.unapply || name == nme.unapplySeq
7475

7576
/** Is name a variable name? */
7677
def isVariableName: Boolean = testSimple { n =>

compiler/src/dotty/tools/dotc/typer/Checking.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import Decorators._
2828
import ErrorReporting.{err, errorType}
2929
import config.Printers.{typr, patmatch}
3030
import NameKinds.DefaultGetterName
31+
import NameOps._
3132
import SymDenotations.{NoCompleter, NoDenotation}
3233
import Applications.unapplyArgs
3334
import transform.patmat.SpaceEngine.isIrrefutableUnapply
@@ -733,7 +734,7 @@ trait Checking {
733734
def isInfix(sym: Symbol): Boolean =
734735
sym.hasAnnotation(defn.InfixAnnot) ||
735736
defn.isInfix(sym) ||
736-
(sym.name == nme.unapply || sym.name == nme.unapplySeq) &&
737+
sym.name.isUnapplyName &&
737738
sym.owner.is(Module) && sym.owner.linkedClass.is(Case) &&
738739
isInfix(sym.owner.linkedClass)
739740

@@ -1038,7 +1039,7 @@ trait Checking {
10381039
def checkInInlineContext(what: String, posd: Positioned)(implicit ctx: Context): Unit =
10391040
if (!ctx.inInlineMethod && !ctx.isInlineContext) {
10401041
val inInlineUnapply = ctx.owner.ownersIterator.exists(owner =>
1041-
owner.name == nme.unapply && owner.is(Inline) && owner.is(Method))
1042+
owner.name.isUnapplyName && owner.is(Inline) && owner.is(Method))
10421043
val msg =
10431044
if (inInlineUnapply) "cannot be used in an inline unapply"
10441045
else "can only be used in an inline method"

compiler/src/dotty/tools/dotc/typer/PrepareInlineable.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import StdNames.nme
1414
import Contexts.Context
1515
import Names.Name
1616
import NameKinds.{InlineAccessorName, UniqueInlineName}
17+
import NameOps._
1718
import Annotations._
1819
import transform.{AccessProxies, PCPCheckAndHeal, Splicer, TreeMapWithStages}
1920
import config.Printers.inlining
@@ -246,7 +247,7 @@ object PrepareInlineable {
246247
def checkInlineMethod(inlined: Symbol, body: Tree)(implicit ctx: Context): Unit = {
247248
if (ctx.outer.inInlineMethod)
248249
ctx.error(ex"implementation restriction: nested inline methods are not supported", inlined.sourcePos)
249-
if (inlined.name == nme.unapply && tupleArgs(body).isEmpty)
250+
if (inlined.name.isUnapplyName && tupleArgs(body).isEmpty)
250251
ctx.warning(
251252
em"inline unapply method can be rewritten only if its right hand side is a tuple (e1, ..., eN)",
252253
body.sourcePos)

0 commit comments

Comments
 (0)