Scala implementation of space logic
- Companion:
- object
Value members
Concrete methods
Adapt types by performing primitive value unboxing or boxing, or numeric constant conversion. #12805
Adapt types by performing primitive value unboxing or boxing, or numeric constant conversion. #12805
This makes these isSubType cases work like this:
1 <:< Integer => (<skolem> : Integer) <:< Integer = true
ONE <:< Int => (<skolem> : Int) <:< Int = true
Integer <:< (1: Int) => (<skolem> : Int) <:< (1: Int) = false
Abstract sealed types, or-types, Boolean and Java enums can be decomposed
Abstract sealed types, or-types, Boolean and Java enums can be decomposed
Numeric literals, while being constant values of unrelated types (e.g. Char and Int),
when used in a case may end up matching at runtime, because their equals may returns true.
Because these are universally available, general purpose types, it would be good to avoid
returning false positive warnings, such as in (c: Char) match { case 67 => ... }
emitting a
reachability warning on the case. So the type ConstantType(Constant(67, IntTag))
is
converted to ConstantType(Constant(67, CharTag))
. #12805
Numeric literals, while being constant values of unrelated types (e.g. Char and Int),
when used in a case may end up matching at runtime, because their equals may returns true.
Because these are universally available, general purpose types, it would be good to avoid
returning false positive warnings, such as in (c: Char) match { case 67 => ... }
emitting a
reachability warning on the case. So the type ConstantType(Constant(67, IntTag))
is
converted to ConstantType(Constant(67, CharTag))
. #12805
Decompose a type into subspaces -- assume the type can be decomposed
Decompose a type into subspaces -- assume the type can be decomposed
Whether the counterexample is satisfiable. The space is flattened and non-empty.
Whether the counterexample is satisfiable. The space is flattened and non-empty.
Show friendly type name with current scope in mind
Show friendly type name with current scope in mind
E.g. C.this.B --> B if current owner is C C.this.x.T --> x.T if current owner is C X[T] --> X C --> C if current owner is C !!!
Parameter types of the case class type tp
. Adapted from unapplyPlan
in patternMatcher
Parameter types of the case class type tp
. Adapted from unapplyPlan
in patternMatcher
Return the underlying type of non-module, non-constant, non-enum case singleton types.
Also widen ExprType to its result type, and rewrap any annotation wrappers.
For example, with val opt = None
, widen opt.type
to None.type
.
Return the underlying type of non-module, non-constant, non-enum case singleton types.
Also widen ExprType to its result type, and rewrap any annotation wrappers.
For example, with val opt = None
, widen opt.type
to None.type
.
Inherited methods
Remove a space if it's a subspace of remaining spaces
Remove a space if it's a subspace of remaining spaces
Note: dedup
will return the same result if the sequence >= 10
- Inherited from:
- SpaceLogic
Flatten space to get rid of Or
for pretty print
Flatten space to get rid of Or
for pretty print
- Inherited from:
- SpaceLogic
Simplify space such that a space equal to Empty
becomes Empty
Simplify space such that a space equal to Empty
becomes Empty
- Inherited from:
- SpaceLogic