Skip to content
This repository was archived by the owner on Sep 1, 2020. It is now read-only.

Commit 0a6bb4a

Browse files
adriaanmfolone
authored andcommitted
sip23 condition
this bootstraps
1 parent e2eb9ba commit 0a6bb4a

File tree

6 files changed

+10
-10
lines changed

6 files changed

+10
-10
lines changed

src/compiler/scala/tools/nsc/Global.scala

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,9 @@ class Global(var currentSettings: Settings, var reporter: Reporter)
7878

7979
override def settings = currentSettings
8080

81+
// TODO: temporary flag to easily enable/disable SIP-23 (aka the type formerly known as 42.type)
82+
override def sip23: Boolean = true //settings.Xexperimental.value
83+
8184
/** Switch to turn on detailed type logs */
8285
var printTypings = settings.Ytyperdebug.value
8386

src/compiler/scala/tools/nsc/ast/parser/Parsers.scala

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -339,8 +339,6 @@ self =>
339339
}
340340
private def inScalaRootPackage = inScalaPackage && currentPackage == "scala"
341341

342-
// 42.type aka SIP-23
343-
private[this] lazy val parseLiteralSingletonTypes = settings.Xexperimental.value
344342

345343
def parseStartRule: () => Tree
346344

@@ -678,7 +676,7 @@ self =>
678676

679677
def isExprIntro: Boolean = isExprIntroToken(in.token)
680678

681-
def isTypeIntroToken(token: Token): Boolean = (parseLiteralSingletonTypes && isLiteralToken(token)) || (token match {
679+
def isTypeIntroToken(token: Token): Boolean = (sip23 && isLiteralToken(token)) || (token match {
682680
case IDENTIFIER | BACKQUOTED_IDENT | THIS |
683681
SUPER | USCORE | LPAREN | AT => true
684682
case _ => false
@@ -945,7 +943,7 @@ self =>
945943
simpleTypeRest(in.token match {
946944
case LPAREN => atPos(start)(makeTupleType(inParens(types())))
947945
case USCORE => wildcardType(in.skipToken())
948-
case tok if parseLiteralSingletonTypes && isLiteralToken(tok) => atPos(start){SingletonTypeTree(literal())} // SIP-23
946+
case tok if sip23 && isLiteralToken(tok) => atPos(start){SingletonTypeTree(literal())} // SIP-23
949947
case _ =>
950948
path(thisOK = false, typeOK = true) match {
951949
case r @ SingletonTypeTree(_) => r
@@ -1028,7 +1026,7 @@ self =>
10281026
mkOp(infixType(InfixMode.RightOp))
10291027
}
10301028
// SIP-23
1031-
def isNegatedLiteralType = parseLiteralSingletonTypes && (
1029+
def isNegatedLiteralType = sip23 && (
10321030
t match { // the token for `t` (Ident("-")) has already been read, thus `isLiteral` below is looking at next token (must be a literal)
10331031
case Ident(name) if isLiteral => name == nme.MINUS.toTypeName // TODO: OPT? lift out nme.MINUS.toTypeName?
10341032
case _ => false

src/compiler/scala/tools/nsc/typechecker/Namers.scala

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -845,8 +845,6 @@ trait Namers extends MethodSynthesis {
845845
loop(tp)
846846
}
847847

848-
// private[this] val sip23 = settings.Xexperimental.value
849-
850848
/**
851849
* This method has a big impact on the eventual compiled code.
852850
* At this point many values have the most specific possible
@@ -862,7 +860,7 @@ trait Namers extends MethodSynthesis {
862860
* whether it is otherwise redundant (such as in a singleton.)
863861
*/
864862
private def widenIfNecessary(sym: Symbol, tpe: Type, pt: Type): Type =
865-
if (settings.Xexperimental) { // SIP-23
863+
if (sip23) { // SIP-23
866864
// TODO: spec -- this is a crucial part of type inference
867865
// NOTES:
868866
// - Can we widen less? (E.g., for local definitions.)

src/compiler/scala/tools/nsc/typechecker/Typers.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5094,7 +5094,7 @@ trait Typers extends Adaptations with Tags with TypersTracking with PatternTyper
50945094

50955095
def typedSingletonTypeTree(tree: SingletonTypeTree) = {
50965096
// SIP-23: don't require AnyRef for 1.type etc
5097-
val pt = if (settings.Xexperimental) WildcardType else AnyRefTpe
5097+
val pt = if (sip23) WildcardType else AnyRefTpe
50985098
val refTyped =
50995099
context.withImplicitsDisabled {
51005100
typed(tree.ref, MonoQualifierModes | mode.onlyTypePat, pt)

src/reflect/scala/reflect/internal/SymbolTable.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ abstract class SymbolTable extends macros.Universe
5252
val gen = new InternalTreeGen { val global: SymbolTable.this.type = SymbolTable.this }
5353

5454
def log(msg: => AnyRef): Unit
55+
def sip23: Boolean = false // temporary, overriden in Global
5556

5657
protected def elapsedMessage(msg: String, start: Long) =
5758
msg + " in " + (TimeUnit.NANOSECONDS.toMillis(System.nanoTime()) - start) + "ms"

src/reflect/scala/reflect/internal/Types.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1841,7 +1841,7 @@ trait Types
18411841
abstract case class ConstantType(value: Constant) extends SingletonType with ConstantTypeApi {
18421842
assert(underlying.typeSymbol != UnitClass)
18431843

1844-
override def underlying: Type = if (settings.Xexperimental && value.isSuitableLiteralType) LiteralType(value) else value.tpe // SIP-23
1844+
override def underlying: Type = if (sip23 && value.isSuitableLiteralType) LiteralType(value) else value.tpe // SIP-23
18451845
override def isTrivial: Boolean = true
18461846
override def deconst: Type = underlying.deconst
18471847
override def safeToString: String =

0 commit comments

Comments
 (0)