@@ -187,6 +187,7 @@ trait Types
187
187
override def widen = maybeRewrap(underlying.widen)
188
188
override def narrow = underlying.narrow
189
189
override def deconst = maybeRewrap(underlying.deconst)
190
+ override def deconstWiden = maybeRewrap(underlying.deconstWiden)
190
191
override def resultType = maybeRewrap(underlying.resultType)
191
192
override def resultType (actuals : List [Type ]) = maybeRewrap(underlying.resultType(actuals))
192
193
override def paramSectionCount = 0
@@ -353,6 +354,11 @@ trait Types
353
354
*/
354
355
def deconst : Type = this
355
356
357
+ /** Map a constant type or not-null-type to its underlying base type,
358
+ * identity for all other types.
359
+ */
360
+ def deconstWiden : Type = this
361
+
356
362
/** The type of `this` of a class type or reference type. */
357
363
def typeOfThis : Type = typeSymbol.typeOfThis
358
364
@@ -1844,6 +1850,7 @@ trait Types
1844
1850
override def underlying : Type = if (sip23 && value.isSuitableLiteralType) LiteralType (value) else value.tpe // SIP-23
1845
1851
override def isTrivial : Boolean = true
1846
1852
override def deconst : Type = underlying.deconst
1853
+ override def deconstWiden : Type = if (value.isSuitableLiteralType) underlying.widen else deconst
1847
1854
override def safeToString : String =
1848
1855
underlying.widen.toString + " (" + value.escapedStringValue + " )"
1849
1856
override def kind = " ConstantType"
0 commit comments