diff options
author | Paul Phillips <paulp@improving.org> | 2010-11-26 19:16:05 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2010-11-26 19:16:05 +0000 |
commit | 1fcb86507062f9923465cdf72e6b70c3a1cfe96b (patch) | |
tree | 0b9a713193a18a9dc47c054058ccba36e5fe218f /src/compiler/scala/tools/reflect/package.scala | |
parent | 79ef52f9e374a6ef599cefebb878692b380ea755 (diff) | |
download | scala-1fcb86507062f9923465cdf72e6b70c3a1cfe96b.tar.gz scala-1fcb86507062f9923465cdf72e6b70c3a1cfe96b.tar.bz2 scala-1fcb86507062f9923465cdf72e6b70c3a1cfe96b.zip |
A new totally safe signal manager, along with a...
A new totally safe signal manager, along with all the support code
needed for that. See the classes in scala.tools.reflect.* for
interesting new weapons. Also includes inaugural handy usage:
scala> val x = 10
x: Int = 10
scala> while (true) ()
[ctrl-C]
Execution interrupted by signal.
scala> x
res1: Int = 10
No review, but feedback welcome.
Diffstat (limited to 'src/compiler/scala/tools/reflect/package.scala')
-rw-r--r-- | src/compiler/scala/tools/reflect/package.scala | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/compiler/scala/tools/reflect/package.scala b/src/compiler/scala/tools/reflect/package.scala new file mode 100644 index 0000000000..cf3d6f9ab2 --- /dev/null +++ b/src/compiler/scala/tools/reflect/package.scala @@ -0,0 +1,30 @@ +/* NSC -- new Scala compiler + * Copyright 2005-2010 LAMP/EPFL + * @author Paul Phillips + */ + +package scala.tools + +import java.lang.reflect.Method +import java.{ lang => jl } + +package object reflect { + def nameAndArity(m: Method) = (m.getName, m.getParameterTypes.size) + def allInterfaces(cl: Class[_]): List[Class[_]] = + if (cl == null) Nil + else cl.getInterfaces.toList ++ allInterfaces(cl.getSuperclass) distinct + + def zeroOfClass(clazz: Class[_]) = zeroOf(Manifest.classType(clazz)) + def zeroOf[T](implicit m: Manifest[T]): AnyRef = { + if (m == manifest[Boolean] || m == manifest[jl.Boolean]) false: jl.Boolean + else if (m == manifest[Unit] || m == manifest[jl.Void]) scala.runtime.BoxedUnit.UNIT + else if (m == manifest[Char] || m == manifest[jl.Character]) 0.toChar: jl.Character + else if (m == manifest[Byte] || m == manifest[jl.Byte]) 0.toByte: jl.Byte + else if (m == manifest[Short] || m == manifest[jl.Short]) 0.toShort: jl.Short + else if (m == manifest[Int] || m == manifest[jl.Integer]) 0: jl.Integer + else if (m == manifest[Long] || m == manifest[jl.Long]) 0l: jl.Long + else if (m == manifest[Float] || m == manifest[jl.Float]) 0f: jl.Float + else if (m == manifest[Double] || m == manifest[jl.Double]) 0d: jl.Double + else null + } +} |