summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/symtab/Definitions.scala
diff options
context:
space:
mode:
authorBurak Emir <emir@epfl.ch>2006-10-26 14:44:24 +0000
committerBurak Emir <emir@epfl.ch>2006-10-26 14:44:24 +0000
commit4a56a364a4a54821b58eee385ea1a822b9d99bb5 (patch)
tree2debf020fe538d392b9d42283ce1158f9a7c8566 /src/compiler/scala/tools/nsc/symtab/Definitions.scala
parent43949e44b7f2938891919736c2ee54b05c62dfcc (diff)
downloadscala-4a56a364a4a54821b58eee385ea1a822b9d99bb5.tar.gz
scala-4a56a364a4a54821b58eee385ea1a822b9d99bb5.tar.bz2
scala-4a56a364a4a54821b58eee385ea1a822b9d99bb5.zip
removed deprecation and some unapply stuff
Diffstat (limited to 'src/compiler/scala/tools/nsc/symtab/Definitions.scala')
-rw-r--r--src/compiler/scala/tools/nsc/symtab/Definitions.scala43
1 files changed, 41 insertions, 2 deletions
diff --git a/src/compiler/scala/tools/nsc/symtab/Definitions.scala b/src/compiler/scala/tools/nsc/symtab/Definitions.scala
index 71fe01063a..4449433102 100644
--- a/src/compiler/scala/tools/nsc/symtab/Definitions.scala
+++ b/src/compiler/scala/tools/nsc/symtab/Definitions.scala
@@ -114,6 +114,39 @@ trait Definitions requires SymbolTable {
typeRef(sym.typeConstructor.prefix, sym, elems)
} else NoType;
+ /* <unapply> */
+ val ProductClass: Array[Symbol] = new Array(MaxTupleArity + 1)
+ def productProj(n: Int, j: Int) = getMember(ProductClass(n), "__" + j)
+ def isProductType(tp: Type): Boolean = tp match {
+ case TypeRef(_, sym, elems) =>
+ elems.length <= MaxTupleArity && sym == ProductClass(elems.length);
+ case _ =>
+ false
+ }
+ def productType(elems: List[Type]) =
+ if (elems.length <= MaxTupleArity) {
+ val sym = ProductClass(elems.length)
+ typeRef(sym.typeConstructor.prefix, sym, elems)
+ } else NoType
+
+ var OptionClass: Symbol = _
+ def SomeClass: Symbol = getClass("scala.Some")
+
+ def isOptionType(tp: Type) = tp match {
+ case TypeRef(_, sym, List(_)) if sym == OptionClass => true
+ case _ => false
+ }
+ def optionType(tp: Type) =
+ typeRef(OptionClass.typeConstructor.prefix, OptionClass, List(tp))
+
+ def isSomeType(tp: Type) = tp match {
+ case TypeRef(_, sym, List(_)) if sym == SomeClass => true
+ case _ => false
+ }
+ def someType(tp: Type) =
+ typeRef(SomeClass.typeConstructor.prefix, SomeClass, List(tp))
+ /* </unapply> */
+
val MaxFunctionArity = 9
val FunctionClass: Array[Symbol] = new Array(MaxFunctionArity + 1)
def functionApply(n: Int) = getMember(FunctionClass(n), nme.apply)
@@ -532,8 +565,14 @@ trait Definitions requires SymbolTable {
tparam => typeRef(SeqClass.typeConstructor.prefix, SeqClass, List(tparam.typeConstructor)))
ByNameParamClass = newCovariantPolyClass(
ScalaPackageClass, nme.BYNAME_PARAM_CLASS_NAME, tparam => AnyClass.typeConstructor)
- for (val i <- 1 to MaxTupleArity)
- TupleClass(i) = getClass("scala.Tuple" + i)
+ /* <unapply> */
+ OptionClass = getClass("scala.Option")
+
+ for (val i <- 1 to MaxTupleArity) {
+ TupleClass(i) = getClass( "scala.Tuple" + i)
+ ProductClass(i) = getClass("scala.Product" + i)
+ }
+ /* </unapply> */
for (val i <- 0 to MaxFunctionArity) {
FunctionClass(i) = getClass("scala.Function" + i)
//RemoteFunctionClass(i) = getClass("scala.distributed.RemoteFunction" + i)