Skip to content

Commit eb060b6

Browse files
committed
Set Extension flag for collective extension instances
1 parent 8d9e092 commit eb060b6

File tree

5 files changed

+11
-11
lines changed

5 files changed

+11
-11
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -301,7 +301,7 @@ object Flags {
301301
/** A method that has default params */
302302
val (_, DefaultParameterized @ _, _) = newFlags(27, "<defaultparam>")
303303

304-
/** An extension method */
304+
/** An extension method, or a collective extension instance */
305305
val (_, Extension @ _, _) = newFlags(28, "<extension>")
306306

307307
/** An inferable (`given`) parameter */
@@ -506,7 +506,7 @@ object Flags {
506506
val RetainedModuleClassFlags: FlagSet = RetainedModuleValAndClassFlags | Enum
507507

508508
/** Flags retained in export forwarders */
509-
val RetainedExportFlags = Given | Implicit | Extension | Inline
509+
val RetainedExportFlags = Given | Implicit | Inline
510510

511511
/** Flags that apply only to classes */
512512
val ClassOnlyFlags = Sealed | Open | Abstract.toTypeFlags

compiler/src/dotty/tools/dotc/parsing/Parsers.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3542,21 +3542,21 @@ object Parsers {
35423542
in.nextToken()
35433543
val name = if isIdent && !isIdent(nme.on) then ident() else EmptyTermName
35443544
in.endMarkerScope(if name.isEmpty then nme.extension else name) {
3545-
val (tparams, vparamss) =
3545+
val (tparams, vparamss, extensionFlag) =
35463546
if isIdent(nme.on) then
35473547
in.nextToken()
35483548
val tparams = typeParamClauseOpt(ParamOwner.Def)
35493549
val extParams = paramClause(0, prefix = true)
35503550
val givenParamss = paramClauses(givenOnly = true)
3551-
(tparams, extParams :: givenParamss)
3551+
(tparams, extParams :: givenParamss, Extension)
35523552
else
3553-
(Nil, Nil)
3553+
(Nil, Nil, EmptyFlags)
35543554
possibleTemplateStart()
35553555
if !in.isNestedStart then syntaxError("Extension without extension methods")
35563556
val templ = templateBodyOpt(makeConstructor(tparams, vparamss), Nil, Nil)
35573557
templ.body.foreach(checkExtensionMethod(tparams, vparamss, _))
35583558
val edef = ModuleDef(name, templ)
3559-
finalizeDef(edef, addFlag(mods, Given), start)
3559+
finalizeDef(edef, addFlag(mods, Given | extensionFlag), start)
35603560
}
35613561

35623562
/* -------- TEMPLATES ------------------------------------------- */

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ trait ImportSuggestions:
205205
.alternatives
206206
.map(mbr => TermRef(site, mbr.symbol))
207207
.filter(ref =>
208-
ref.symbol.is(Extension)
208+
ref.symbol.isAllOf(ExtensionMethod)
209209
&& isApplicableMethodRef(ref, argType :: Nil, WildcardType))
210210
.headOption
211211

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1093,8 +1093,8 @@ class Namer { typer: Typer =>
10931093
(StableRealizable, ExprType(path.tpe.select(sym)))
10941094
else
10951095
(EmptyFlags, mbr.info.ensureMethodic)
1096-
val mbrFlags = Exported | Method | Final | maybeStable | sym.flags & RetainedExportFlags
1097-
val forwarderName = checkNoConflict(alias, isPrivate = false, span)
1096+
var mbrFlags = Exported | Method | Final | maybeStable | sym.flags & RetainedExportFlags
1097+
if sym.isAllOf(ExtensionMethod) then mbrFlags |= Extension
10981098
ctx.newSymbol(cls, forwarderName, mbrFlags, mbrInfo, coord = span)
10991099
}
11001100
forwarder.info = avoidPrivateLeaks(forwarder)

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -392,9 +392,9 @@ object RefChecks {
392392
overrideError("is erased, cannot override non-erased member")
393393
else if (other.is(Erased) && !member.isOneOf(Erased | Inline)) // (1.9.1)
394394
overrideError("is not erased, cannot override erased member")
395-
else if (member.is(Extension) && !other.is(Extension)) // (1.9.2)
395+
else if (member.isAllOf(ExtensionMethod) && !other.isAllOf(ExtensionMethod)) // (1.9.2)
396396
overrideError("is an extension method, cannot override a normal method")
397-
else if (other.is(Extension) && !member.is(Extension)) // (1.9.2)
397+
else if (other.isAllOf(ExtensionMethod) && !member.isAllOf(ExtensionMethod)) // (1.9.2)
398398
overrideError("is a normal method, cannot override an extension method")
399399
else if ((member.isInlineMethod || member.isScala2Macro) && other.is(Deferred) &&
400400
member.extendedOverriddenSymbols.forall(_.is(Deferred))) // (1.10)

0 commit comments

Comments
 (0)