diff options
author | Burak Emir <emir@epfl.ch> | 2006-10-26 14:44:24 +0000 |
---|---|---|
committer | Burak Emir <emir@epfl.ch> | 2006-10-26 14:44:24 +0000 |
commit | 4a56a364a4a54821b58eee385ea1a822b9d99bb5 (patch) | |
tree | 2debf020fe538d392b9d42283ce1158f9a7c8566 /src/compiler/scala/tools/nsc/symtab/Definitions.scala | |
parent | 43949e44b7f2938891919736c2ee54b05c62dfcc (diff) | |
download | scala-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.scala | 43 |
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) |