Skip to content

Commit 6f457a7

Browse files
committed
Treat unapply/unapplySeq more systematically
1 parent 3bdf240 commit 6f457a7

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
@@ -26,6 +26,7 @@ import Decorators._
2626
import ErrorReporting.{err, errorType}
2727
import config.Printers.typr
2828
import NameKinds.DefaultGetterName
29+
import NameOps._
2930
import SymDenotations.{NoCompleter, NoDenotation}
3031

3132
import collection.mutable
@@ -680,7 +681,7 @@ trait Checking {
680681
def isInfix(sym: Symbol): Boolean =
681682
sym.hasAnnotation(defn.InfixAnnot) ||
682683
defn.isInfix(sym) ||
683-
(sym.name == nme.unapply || sym.name == nme.unapplySeq) &&
684+
sym.name.isUnapplyName &&
684685
sym.owner.is(Module) && sym.owner.linkedClass.is(Case) &&
685686
isInfix(sym.owner.linkedClass)
686687

@@ -991,7 +992,7 @@ trait Checking {
991992
def checkInInlineContext(what: String, posd: Positioned)(implicit ctx: Context): Unit =
992993
if (!ctx.inInlineMethod && !ctx.isInlineContext) {
993994
val inInlineUnapply = ctx.owner.ownersIterator.exists(owner =>
994-
owner.name == nme.unapply && owner.is(Inline) && owner.is(Method))
995+
owner.name.isUnapplyName && owner.is(Inline) && owner.is(Method))
995996
val msg =
996997
if (inInlineUnapply) "cannot be used in an inline unapply"
997998
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)