object alignPatterns extends ScalacPatternExpander
- Alphabetic
- By Inheritance
- alignPatterns
- ScalacPatternExpander
- PatternExpander
- AnyRef
- Any
- Hide All
- Show All
- Public
- All
Type Members
-
final
case class
Aligned
(patterns: Patterns, extractor: Extractor) extends Product with Serializable
If elementArity is...
If elementArity is... 0: A perfect match between extractor and the fixed patterns. If there is a star pattern it will match any sequence. > 0: There are more patterns than products. There will have to be a sequence which can populate at least <elementArity> patterns. < 0: There are more products than patterns: compile time error.
- Definition Classes
- PatternExpander
-
final
case class
Extractor
(whole: Type, fixed: List[Type], repeated: Repeated, typeOfSinglePattern: Type) extends Product with Serializable
An 'extractor' can be a case class or an unapply or unapplySeq method.
An 'extractor' can be a case class or an unapply or unapplySeq method. Decoding what it is that they extract takes place before we arrive here, so that this class can concentrate only on the relationship between patterns and types.
In a case class, the class is the unextracted type and the fixed and repeated types are derived from its constructor parameters.
In an unapply, this is reversed: the parameter to the unapply is the unextracted type, and the other types are derived based on the return type of the unapply method.
In other words, this case class and unapply are encoded the same:
case class Foo(x: Int, y: Int, zs: Char*) def unapplySeq(x: Foo): Option[(Int, Int, Seq[Char])]
Both are Extractor(Foo, Int :: Int :: Nil, Repeated(Seq[Char], Char, Char*))
- whole
The type in its unextracted form
- fixed
The non-sequence types which are extracted
- repeated
The sequence type which is extracted
- Definition Classes
- PatternExpander
-
final
case class
Patterns
(fixed: List[Pattern], star: Pattern) extends Product with Serializable
- Definition Classes
- PatternExpander
-
sealed
case class
Repeated
(sequenceType: Type, elementType: Type, repeatedType: Type) extends Product with Serializable
It's not optimal that we're carrying both sequence and repeated type here, but the implementation requires more unraveling before it can be avoided.
It's not optimal that we're carrying both sequence and repeated type here, but the implementation requires more unraveling before it can be avoided.
sequenceType is Seq[T], elementType is T, repeatedType is T*.
- Definition Classes
- PatternExpander
-
final
case class
TypedPat
(pat: Pattern, tpe: Type) extends Product with Serializable
- Definition Classes
- PatternExpander
Value Members
-
object
NoRepeated
extends Repeated
- Definition Classes
- PatternExpander
-
final
def
!=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
##(): Int
- Definition Classes
- AnyRef → Any
-
final
def
==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
NoPattern: Global.EmptyTree.type
You'll note we're not inside the cake.
You'll note we're not inside the cake. "Pattern" and "Type" are arbitrary types here, and NoPattern and NoType arbitrary values.
- Definition Classes
- ScalacPatternExpander → PatternExpander
-
def
NoType: Global.NoType.type
- Definition Classes
- ScalacPatternExpander → PatternExpander
- def apply(context: (analyzer)#Context, tree: Global.Tree): Aligned
- def apply(context: (analyzer)#Context, sel: Global.Tree, args: List[Global.Tree]): Aligned
-
def
applyMethodTypes(method: Global.Type): Extractor
In this case we are basing the pattern expansion on a case class constructor.
In this case we are basing the pattern expansion on a case class constructor. The argument is the MethodType carried by the primary constructor.
- Definition Classes
- ScalacPatternExpander
-
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
-
def
clone(): AnyRef
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
def
elementTypeOf(tpe: Global.Type): Global.Type
- Definition Classes
- ScalacPatternExpander
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
finalize(): Unit
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
-
def
hashCode(): Int
- Definition Classes
- AnyRef → Any
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
-
final
def
ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
newExtractor(whole: Global.Type, fixed: List[Global.Type], repeated: Repeated): Extractor
- Definition Classes
- ScalacPatternExpander
-
def
newExtractor(whole: Global.Type, fixed: List[Global.Type], repeated: Repeated, typeOfSinglePattern: Global.Type): Extractor
- Definition Classes
- ScalacPatternExpander
-
def
newPatterns(patterns: List[Global.Tree]): Patterns
- Definition Classes
- ScalacPatternExpander
-
final
def
notify(): Unit
- Definition Classes
- AnyRef
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
-
def
repeatedFromSeq(seqType: Global.Type): Repeated
- Definition Classes
- ScalacPatternExpander
-
def
repeatedFromVarargs(repeated: Global.Type): Repeated
- Definition Classes
- ScalacPatternExpander
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
-
def
toString(): String
- Definition Classes
- AnyRef → Any
-
def
unapplyMethodTypes(context: (analyzer)#Context, whole: Global.Type, result: Global.Type, isSeq: Boolean): Extractor
In this case, expansion is based on an unapply or unapplySeq method.
In this case, expansion is based on an unapply or unapplySeq method. Unfortunately the MethodType does not carry the information of whether it was unapplySeq, so we have to funnel that information in separately.
- Definition Classes
- ScalacPatternExpander
-
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
The Scala compiler API.
The following resources are useful for Scala plugin/compiler development: