diff options
author | Paul Phillips <paulp@improving.org> | 2010-03-06 13:45:23 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2010-03-06 13:45:23 +0000 |
commit | 121164ef717226fafaa6a72dcfef0aec1bd89ee4 (patch) | |
tree | bc7630b9a9a45afabeac951652f43a0df4fb8d52 /src | |
parent | 68c2fff4c1103ded18788861f99654292c4e71d1 (diff) | |
download | scala-121164ef717226fafaa6a72dcfef0aec1bd89ee4.tar.gz scala-121164ef717226fafaa6a72dcfef0aec1bd89ee4.tar.bz2 scala-121164ef717226fafaa6a72dcfef0aec1bd89ee4.zip |
Modification to the last patch to return None/f...
Modification to the last patch to return None/false rather than throwing
the MatchError. No review.
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/scala/tools/nsc/symtab/Definitions.scala | 4 | ||||
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/Unapplies.scala | 3 |
2 files changed, 4 insertions, 3 deletions
diff --git a/src/compiler/scala/tools/nsc/symtab/Definitions.scala b/src/compiler/scala/tools/nsc/symtab/Definitions.scala index 3d969a53b4..55bf1899a4 100644 --- a/src/compiler/scala/tools/nsc/symtab/Definitions.scala +++ b/src/compiler/scala/tools/nsc/symtab/Definitions.scala @@ -247,11 +247,11 @@ trait Definitions extends reflect.generic.StandardDefinitions { // Option classes lazy val OptionClass: Symbol = getClass("scala.Option") lazy val SomeClass: Symbol = getClass("scala.Some") - lazy val NoneClass: Symbol = getModule("scala.None") + lazy val NoneModule: Symbol = getModule("scala.None") def isOptionType(tp: Type) = cond(tp.normalize) { case TypeRef(_, OptionClass, List(_)) => true } def isSomeType(tp: Type) = cond(tp.normalize) { case TypeRef(_, SomeClass, List(_)) => true } - def isNoneType(tp: Type) = cond(tp.normalize) { case TypeRef(_, NoneClass, List(_)) => true } + def isNoneType(tp: Type) = cond(tp.normalize) { case TypeRef(_, NoneModule, List(_)) => true } def optionType(tp: Type) = typeRef(OptionClass.typeConstructor.prefix, OptionClass, List(tp)) def someType(tp: Type) = typeRef(SomeClass.typeConstructor.prefix, SomeClass, List(tp)) diff --git a/src/compiler/scala/tools/nsc/typechecker/Unapplies.scala b/src/compiler/scala/tools/nsc/typechecker/Unapplies.scala index 5b3ca89e84..a60721f0ca 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Unapplies.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Unapplies.scala @@ -171,7 +171,8 @@ trait Unapplies extends ast.TreeDSL case _ => nme.unapply } val cparams = List(ValDef(Modifiers(PARAM | SYNTHETIC), paramName, classType(cdef, tparams), EmptyTree)) - val body = nullSafe({ case Ident(x) => caseClassUnapplyReturnValue(x, cdef.symbol) }, MATCHERROR(NULL))(Ident(paramName)) + val ifNull = if (constrParamss(cdef).head.size == 0) FALSE else REF(NoneModule) + val body = nullSafe({ case Ident(x) => caseClassUnapplyReturnValue(x, cdef.symbol) }, ifNull)(Ident(paramName)) atPos(cdef.pos.focus)( DefDef(caseMods, method, tparams, List(cparams), TypeTree(), body) |