diff options
author | Paul Phillips <paulp@improving.org> | 2011-12-27 15:54:32 -0800 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2011-12-28 08:43:13 -0800 |
commit | d05881e42e661986286ac15c2a8c32f651b0101e (patch) | |
tree | e09f124ca83106f542682d51bc10e430c35bdd72 /src/compiler/scala/reflect/internal/Types.scala | |
parent | 33ab1a574af0d5f736ab73c5a18cc6a4cb36cbb0 (diff) | |
download | scala-d05881e42e661986286ac15c2a8c32f651b0101e.tar.gz scala-d05881e42e661986286ac15c2a8c32f651b0101e.tar.bz2 scala-d05881e42e661986286ac15c2a8c32f651b0101e.zip |
repl power mode improvements.
Implemented great suggestion from moors. More imports in power mode,
including the contents of treedsl. Also, another swing at overcoming
the mismatched global singletons problem, this time taking advantage of
dependent method types. Amazingly, it seems to work.
Continuing in the quest to create a useful compiler hacking environment,
there is now an implicit from Symbol which allows you to pretend a
Symbol takes type parameters, and the result is the applied type based
on the manifests of the type arguments and the type constructor of the
symbol. Examples:
// magic with manifests
scala> val tp = ArrayClass[scala.util.Random]
tp: $r.global.Type = Array[scala.util.Random]
// evidence
scala> tp.memberType(Array_apply)
res0: $r.global.Type = (i: Int)scala.util.Random
// treedsl
scala> val m = LIT(10) MATCH (CASE(LIT(5)) ==> FALSE, DEFAULT ==> TRUE)
m: $r.treedsl.global.Match =
10 match {
case 5 => false
case _ => true
}
// typed is in scope
scala> typed(m).tpe
res1: $r.treedsl.global.Type = Boolean
Diffstat (limited to 'src/compiler/scala/reflect/internal/Types.scala')
-rw-r--r-- | src/compiler/scala/reflect/internal/Types.scala | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/src/compiler/scala/reflect/internal/Types.scala b/src/compiler/scala/reflect/internal/Types.scala index 47184eee51..38f51b1459 100644 --- a/src/compiler/scala/reflect/internal/Types.scala +++ b/src/compiler/scala/reflect/internal/Types.scala @@ -5487,6 +5487,10 @@ A type's typeSymbol should never be inspected directly. case _ => t } + def elimRefinement(t: Type) = t match { + case RefinedType(parents, decls) if !decls.isEmpty => intersectionType(parents) + case _ => t + } /** A collector that tests for existential types appearing at given variance in a type */ class ContainsVariantExistentialCollector(v: Int) extends TypeCollector(false) { |