summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/reflect/package.scala
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2010-11-26 19:16:05 +0000
committerPaul Phillips <paulp@improving.org>2010-11-26 19:16:05 +0000
commit1fcb86507062f9923465cdf72e6b70c3a1cfe96b (patch)
tree0b9a713193a18a9dc47c054058ccba36e5fe218f /src/compiler/scala/tools/reflect/package.scala
parent79ef52f9e374a6ef599cefebb878692b380ea755 (diff)
downloadscala-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.scala30
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
+ }
+}