Skip to content

Commit 72279fc

Browse files
committed
Split Abstract from Open
The Abstract flag no longer implies Open; the two flags are handled separately.
1 parent 963c754 commit 72279fc

File tree

7 files changed

+12
-5
lines changed

7 files changed

+12
-5
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ object Flags {
287287
* Note: You should never see Abstract on any symbol except a class.
288288
* Note: the flag counts as common, because it can be combined with OVERRIDE in a term.
289289
*/
290-
val (Abstract @ _, _, _) = newFlags(23, "abstract")
290+
val (Abstract @ _, _, AbstractClass @ _) = newFlags(23, "abstract")
291291

292292
/** Lazy val or method is known or assumed to be stable and realizable */
293293
val (_, StableRealizable @ _, _) = newFlags(24, "<stable>")
@@ -518,7 +518,7 @@ object Flags {
518518
val AbstractOverride: FlagSet = Abstract | Override
519519
val AbstractSealed: FlagSet = Abstract | Sealed
520520
val AbstractOrTrait: FlagSet = Abstract | Trait
521-
val EffectivelyOpenFlags = Abstract | JavaDefined | Open | Scala2x | Trait
521+
val EffectivelyOpenFlags = JavaDefined | Open | Scala2x | Trait
522522
val PrivateAccessor: FlagSet = Accessor | Private
523523
val AccessorOrSynthetic: FlagSet = Accessor | Synthetic
524524
val EnumCase: FlagSet = Case | Enum

compiler/src/dotty/tools/dotc/core/classfile/ClassfileConstants.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,7 @@ object ClassfileConstants {
343343
case JAVA_ACC_FINAL => Final
344344
case JAVA_ACC_SYNTHETIC => Synthetic
345345
case JAVA_ACC_STATIC => JavaStatic
346-
case JAVA_ACC_ABSTRACT => if (isClass) Abstract else Deferred
346+
case JAVA_ACC_ABSTRACT => if (isClass) Abstract | Open else Deferred
347347
case JAVA_ACC_INTERFACE => PureInterfaceCreationFlags | JavaDefined
348348
case _ => EmptyFlags
349349
}

compiler/src/dotty/tools/dotc/core/unpickleScala2/Scala2Unpickler.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -469,6 +469,8 @@ class Scala2Unpickler(bytes: Array[Byte], classRoot: ClassDenotation, moduleClas
469469
name = name.asTermName.unmangle(SuperAccessorName)
470470
flags = flags &~ Scala2SuperAccessor
471471
}
472+
if flags.is(Abstract, butNot = FinalOrSealed) then
473+
flags = flags | Open
472474
name = name.mapLast(_.decode)
473475

474476
def nameMatches(rootName: Name) = name == rootName

compiler/src/dotty/tools/dotc/tastyreflect/ReflectionCompilerInterface.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1544,6 +1544,7 @@ class ReflectionCompilerInterface(val rootContext: core.Contexts.Context) extend
15441544
def Flags_Private: Flags = core.Flags.Private
15451545
def Flags_Protected: Flags = core.Flags.Protected
15461546
def Flags_Abstract: Flags = core.Flags.Abstract
1547+
def Flags_Open: Flags = core.Flags.Open
15471548
def Flags_Final: Flags = core.Flags.Final
15481549
def Flags_Sealed: Flags = core.Flags.Sealed
15491550
def Flags_Case: Flags = core.Flags.Case

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,9 @@ class Namer { typer: Typer =>
292292
case _ => false
293293
if !ok then
294294
ctx.error(i"modifier(s) `${flags.flagsString}` incompatible with $kind definition", tree.sourcePos)
295-
if adapted.is(Private) && canBeLocal then adapted | Local else adapted
295+
if adapted.is(Private) && canBeLocal then adapted | Local
296+
else if adapted.is(AbstractClass, butNot = FinalOrSealed) then adapted | Open
297+
else adapted
296298
}
297299

298300
/** Add moduleClass/sourceModule to completer if it is for a module val or class */
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
package adhoc
2-
class A
2+
class A
3+
abstract class Abs
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
package adhoc
22
import language.adhocExtensions
33
class B extends A
4+
class B2 extends Abs

0 commit comments

Comments
 (0)