summaryrefslogtreecommitdiff
path: root/src/scalap/scala/tools/scalap/Main.scala
diff options
context:
space:
mode:
authorilyas <ilyas@epfl.ch>2009-06-29 16:09:59 +0000
committerilyas <ilyas@epfl.ch>2009-06-29 16:09:59 +0000
commite659affbea5daf934f2f078fd8b872930bbaa09c (patch)
tree8bc757562f2ab5ddcca47b2663821993cdcc92dd /src/scalap/scala/tools/scalap/Main.scala
parent91643c355b853e9bdfb70a5afab426a3537bfc1d (diff)
downloadscala-e659affbea5daf934f2f078fd8b872930bbaa09c.tar.gz
scala-e659affbea5daf934f2f078fd8b872930bbaa09c.tar.bz2
scala-e659affbea5daf934f2f078fd8b872930bbaa09c.zip
scalap changed to treat named parameters and pa...
scalap changed to treat named parameters and package objects
Diffstat (limited to 'src/scalap/scala/tools/scalap/Main.scala')
-rw-r--r--src/scalap/scala/tools/scalap/Main.scala26
1 files changed, 19 insertions, 7 deletions
diff --git a/src/scalap/scala/tools/scalap/Main.scala b/src/scalap/scala/tools/scalap/Main.scala
index 71b93835e6..54fe21d4e6 100644
--- a/src/scalap/scala/tools/scalap/Main.scala
+++ b/src/scalap/scala/tools/scalap/Main.scala
@@ -61,16 +61,28 @@ object Main {
out.flush()
}
- def parseScalaSignature(scalaSig: ScalaSig) = {
+ def isPackageObjectFile(s: String) = s != null && (s.endsWith(File.separator + "package") || s == "package")
+
+ def parseScalaSignature(scalaSig: ScalaSig, isPackageObject: Boolean) = {
val baos = new ByteArrayOutputStream
val stream = new PrintStream(baos)
val syms = scalaSig.topLevelClasses ::: scalaSig.topLevelObjects
syms.first.parent match {
//Partial match
case Some(p) if (p.name != "<empty>") => {
- stream.print("package ");
- stream.print(p.path);
- stream.print("\n")
+ val path = p.path
+ if (!isPackageObject) {
+ stream.print("package ");
+ stream.print(path);
+ stream.print("\n")
+ } else {
+ val i = path.lastIndexOf(".")
+ if (i > 0) {
+ stream.print("package ");
+ stream.print(path.substring(0, i))
+ stream.print("\n")
+ }
+ }
}
case _ =>
}
@@ -83,11 +95,11 @@ object Main {
}
- def decompileScala(bytes: Array[Byte]) = {
+ def decompileScala(bytes: Array[Byte], isPackageObject: Boolean) = {
val byteCode = ByteCode(bytes)
val classFile = ClassFileParser.parse(byteCode)
classFile.attribute(SCALA_SIG).map(_.byteCode).map(ScalaSigAttributeParsers.parse) match {
- case Some(scalaSig) => Console.println(parseScalaSignature(scalaSig))
+ case Some(scalaSig) => Console.println(parseScalaSignature(scalaSig, isPackageObject))
case None => //Do nothing
}
}
@@ -112,7 +124,7 @@ object Main {
}
val bytes = cfile.toByteArray
if (isScalaFile(bytes)) {
- decompileScala(bytes)
+ decompileScala(bytes, isPackageObjectFile(filename))
} else {
// construct a reader for the classfile content
val reader = new ByteArrayReader(cfile.toByteArray)