From 76009173e08545c346d4a66eb847a75120649ad2 Mon Sep 17 00:00:00 2001 From: Lukas Rytz Date: Mon, 9 Feb 2009 16:06:06 +0000 Subject: added build scripts for scalap --- build.xml | 134 ++++++++- src/build/pack.xml | 16 +- src/compiler/scala/tools/scalap/Arguments.scala | 202 ------------- .../scala/tools/scalap/ByteArrayReader.scala | 157 ---------- src/compiler/scala/tools/scalap/Classfile.scala | 126 -------- src/compiler/scala/tools/scalap/Classfiles.scala | 56 ---- src/compiler/scala/tools/scalap/CodeWriter.scala | 140 --------- src/compiler/scala/tools/scalap/JavaWriter.scala | 234 --------------- src/compiler/scala/tools/scalap/Main.scala | 266 ----------------- src/compiler/scala/tools/scalap/MetaParser.scala | 184 ------------ src/compiler/scala/tools/scalap/Names.scala | 97 ------- src/compiler/scala/tools/scalap/Properties.scala | 50 ---- .../scala/tools/scalap/scalax/rules/Arrows.scala | 35 --- .../scala/tools/scalap/scalax/rules/Functors.scala | 79 ----- .../scala/tools/scalap/scalax/rules/Input.scala | 66 ----- .../tools/scalap/scalax/rules/Memoisable.scala | 59 ---- .../scala/tools/scalap/scalax/rules/Monad.scala | 44 --- .../scala/tools/scalap/scalax/rules/Result.scala | 70 ----- .../scala/tools/scalap/scalax/rules/Rule.scala | 175 ----------- .../scala/tools/scalap/scalax/rules/Rules.scala | 144 --------- .../scala/tools/scalap/scalax/rules/SeqRule.scala | 99 ------- .../scalax/rules/scalasig/ClassFileParser.scala | 221 -------------- .../tools/scalap/scalax/rules/scalasig/Flags.scala | 66 ----- .../scalap/scalax/rules/scalasig/ScalaSig.scala | 269 ----------------- .../scalax/rules/scalasig/ScalaSigPrinter.scala | 322 --------------------- .../rules/scalasig/SourceFileAttributeParser.scala | 25 -- .../scalap/scalax/rules/scalasig/Symbol.scala | 70 ----- .../tools/scalap/scalax/rules/scalasig/Type.scala | 22 -- .../tools/scalap/scalax/util/StringUtil.scala | 15 - src/manual/scala/man1/fsc.scala | 3 +- src/manual/scala/man1/sbaz.scala | 3 +- src/manual/scala/man1/scala.scala | 3 +- src/manual/scala/man1/scalac.scala | 3 +- src/manual/scala/man1/scaladoc.scala | 3 +- src/manual/scala/man1/scalap.scala | 109 +++++++ .../scala/tools/docutil/resources/index.html | 20 +- src/scalap/scala/tools/scalap/Arguments.scala | 202 +++++++++++++ .../scala/tools/scalap/ByteArrayReader.scala | 157 ++++++++++ src/scalap/scala/tools/scalap/Classfile.scala | 126 ++++++++ src/scalap/scala/tools/scalap/Classfiles.scala | 56 ++++ src/scalap/scala/tools/scalap/CodeWriter.scala | 140 +++++++++ src/scalap/scala/tools/scalap/JavaWriter.scala | 234 +++++++++++++++ src/scalap/scala/tools/scalap/Main.scala | 266 +++++++++++++++++ src/scalap/scala/tools/scalap/MetaParser.scala | 184 ++++++++++++ src/scalap/scala/tools/scalap/Names.scala | 97 +++++++ src/scalap/scala/tools/scalap/Properties.scala | 50 ++++ .../scala/tools/scalap/scalax/rules/Arrows.scala | 35 +++ .../scala/tools/scalap/scalax/rules/Functors.scala | 79 +++++ .../scala/tools/scalap/scalax/rules/Input.scala | 66 +++++ .../tools/scalap/scalax/rules/Memoisable.scala | 59 ++++ .../scala/tools/scalap/scalax/rules/Monad.scala | 44 +++ .../scala/tools/scalap/scalax/rules/Result.scala | 70 +++++ .../scala/tools/scalap/scalax/rules/Rule.scala | 175 +++++++++++ .../scala/tools/scalap/scalax/rules/Rules.scala | 144 +++++++++ .../scala/tools/scalap/scalax/rules/SeqRule.scala | 99 +++++++ .../scalax/rules/scalasig/ClassFileParser.scala | 221 ++++++++++++++ .../tools/scalap/scalax/rules/scalasig/Flags.scala | 66 +++++ .../scalap/scalax/rules/scalasig/ScalaSig.scala | 269 +++++++++++++++++ .../scalax/rules/scalasig/ScalaSigPrinter.scala | 322 +++++++++++++++++++++ .../rules/scalasig/SourceFileAttributeParser.scala | 25 ++ .../scalap/scalax/rules/scalasig/Symbol.scala | 70 +++++ .../tools/scalap/scalax/rules/scalasig/Type.scala | 22 ++ .../tools/scalap/scalax/util/StringUtil.scala | 15 + 63 files changed, 3572 insertions(+), 3308 deletions(-) delete mode 100644 src/compiler/scala/tools/scalap/Arguments.scala delete mode 100644 src/compiler/scala/tools/scalap/ByteArrayReader.scala delete mode 100644 src/compiler/scala/tools/scalap/Classfile.scala delete mode 100644 src/compiler/scala/tools/scalap/Classfiles.scala delete mode 100644 src/compiler/scala/tools/scalap/CodeWriter.scala delete mode 100644 src/compiler/scala/tools/scalap/JavaWriter.scala delete mode 100644 src/compiler/scala/tools/scalap/Main.scala delete mode 100644 src/compiler/scala/tools/scalap/MetaParser.scala delete mode 100644 src/compiler/scala/tools/scalap/Names.scala delete mode 100644 src/compiler/scala/tools/scalap/Properties.scala delete mode 100644 src/compiler/scala/tools/scalap/scalax/rules/Arrows.scala delete mode 100644 src/compiler/scala/tools/scalap/scalax/rules/Functors.scala delete mode 100644 src/compiler/scala/tools/scalap/scalax/rules/Input.scala delete mode 100644 src/compiler/scala/tools/scalap/scalax/rules/Memoisable.scala delete mode 100644 src/compiler/scala/tools/scalap/scalax/rules/Monad.scala delete mode 100644 src/compiler/scala/tools/scalap/scalax/rules/Result.scala delete mode 100644 src/compiler/scala/tools/scalap/scalax/rules/Rule.scala delete mode 100644 src/compiler/scala/tools/scalap/scalax/rules/Rules.scala delete mode 100644 src/compiler/scala/tools/scalap/scalax/rules/SeqRule.scala delete mode 100644 src/compiler/scala/tools/scalap/scalax/rules/scalasig/ClassFileParser.scala delete mode 100644 src/compiler/scala/tools/scalap/scalax/rules/scalasig/Flags.scala delete mode 100644 src/compiler/scala/tools/scalap/scalax/rules/scalasig/ScalaSig.scala delete mode 100644 src/compiler/scala/tools/scalap/scalax/rules/scalasig/ScalaSigPrinter.scala delete mode 100644 src/compiler/scala/tools/scalap/scalax/rules/scalasig/SourceFileAttributeParser.scala delete mode 100644 src/compiler/scala/tools/scalap/scalax/rules/scalasig/Symbol.scala delete mode 100644 src/compiler/scala/tools/scalap/scalax/rules/scalasig/Type.scala delete mode 100644 src/compiler/scala/tools/scalap/scalax/util/StringUtil.scala create mode 100644 src/manual/scala/man1/scalap.scala create mode 100644 src/scalap/scala/tools/scalap/Arguments.scala create mode 100644 src/scalap/scala/tools/scalap/ByteArrayReader.scala create mode 100644 src/scalap/scala/tools/scalap/Classfile.scala create mode 100644 src/scalap/scala/tools/scalap/Classfiles.scala create mode 100644 src/scalap/scala/tools/scalap/CodeWriter.scala create mode 100644 src/scalap/scala/tools/scalap/JavaWriter.scala create mode 100644 src/scalap/scala/tools/scalap/Main.scala create mode 100644 src/scalap/scala/tools/scalap/MetaParser.scala create mode 100644 src/scalap/scala/tools/scalap/Names.scala create mode 100644 src/scalap/scala/tools/scalap/Properties.scala create mode 100644 src/scalap/scala/tools/scalap/scalax/rules/Arrows.scala create mode 100644 src/scalap/scala/tools/scalap/scalax/rules/Functors.scala create mode 100644 src/scalap/scala/tools/scalap/scalax/rules/Input.scala create mode 100644 src/scalap/scala/tools/scalap/scalax/rules/Memoisable.scala create mode 100644 src/scalap/scala/tools/scalap/scalax/rules/Monad.scala create mode 100644 src/scalap/scala/tools/scalap/scalax/rules/Result.scala create mode 100644 src/scalap/scala/tools/scalap/scalax/rules/Rule.scala create mode 100644 src/scalap/scala/tools/scalap/scalax/rules/Rules.scala create mode 100644 src/scalap/scala/tools/scalap/scalax/rules/SeqRule.scala create mode 100644 src/scalap/scala/tools/scalap/scalax/rules/scalasig/ClassFileParser.scala create mode 100644 src/scalap/scala/tools/scalap/scalax/rules/scalasig/Flags.scala create mode 100644 src/scalap/scala/tools/scalap/scalax/rules/scalasig/ScalaSig.scala create mode 100644 src/scalap/scala/tools/scalap/scalax/rules/scalasig/ScalaSigPrinter.scala create mode 100644 src/scalap/scala/tools/scalap/scalax/rules/scalasig/SourceFileAttributeParser.scala create mode 100644 src/scalap/scala/tools/scalap/scalax/rules/scalasig/Symbol.scala create mode 100644 src/scalap/scala/tools/scalap/scalax/rules/scalasig/Type.scala create mode 100644 src/scalap/scala/tools/scalap/scalax/util/StringUtil.scala diff --git a/build.xml b/build.xml index 2cbbe98008..af763d9b8f 100644 --- a/build.xml +++ b/build.xml @@ -517,7 +517,36 @@ QUICK BUILD (QUICK) - + + + + + + + + + + + + + + + + + + + + + + + + @@ -527,6 +556,7 @@ QUICK BUILD (QUICK) + @@ -552,10 +582,16 @@ QUICK BUILD (QUICK) class="scala.tools.nsc.CompileClient" javaFlags="${java.flags}" classpathref="quick.bin.classpath"/> + + @@ -645,7 +681,21 @@ PACKED QUICK BUILD (PACK) - + + + + + + + + + + + + + + @@ -688,6 +743,7 @@ PACKED QUICK BUILD (PACK) + @@ -875,7 +931,34 @@ BOOTSTRAPPING BUILD (STRAP) - + + + + + + + + + + + + + + + + + + + + + + + + @@ -1081,7 +1164,36 @@ OPTIMISED COMPILER - + + + + + + + + + + + + + + + + + + + + + + + + @@ -1091,6 +1203,7 @@ OPTIMISED COMPILER + @@ -1116,10 +1229,16 @@ OPTIMISED COMPILER class="scala.tools.nsc.CompileClient" javaFlags="${java.flags}" classpathref="optimised.bin.classpath"/> + + @@ -1128,6 +1247,7 @@ OPTIMISED COMPILER + @@ -1212,7 +1332,7 @@ DOCUMENTATION - @@ -1353,6 +1473,7 @@ DISTRIBUTION + @@ -1397,6 +1518,9 @@ DISTRIBUTION + + + diff --git a/src/build/pack.xml b/src/build/pack.xml index bed8d1e782..8ed5f25713 100644 --- a/src/build/pack.xml +++ b/src/build/pack.xml @@ -119,8 +119,22 @@ MAIN DISTRIBUTION SBAZ + + + + + + + - + 0) { - if (bindings isDefinedAt tag) - bindings(tag)(key) = value - else { - bindings(tag) = new HashMap - bindings(tag)(key) = value - } - } - - def addBinding(tag: String, binding: Pair[String, String]): Unit = - addBinding(tag, binding._1, binding._2) - - def addOther(arg: String): Unit = others += arg - - def contains(option: String): Boolean = options contains option - - def getArgument(option: String): Option[String] = arguments get option - - def getSuffixes(prefix: String): Set[String] = - prefixes.get(prefix) match { - case None => new HashSet - case Some(set) => set - } - - def containsSuffix(prefix: String, suffix: String): Boolean = - prefixes.get(prefix) match { - case None => false - case Some(set) => set contains suffix - } - - def getBindings(tag: String): Map[String, String] = - bindings.get(tag) match { - case None => new HashMap - case Some(map) => map - } - - def getBinding(option: String, key: String): Option[String] = - bindings.get(option) match { - case None => None - case Some(map) => map get key - } - - def getOthers: List[String] = others.toList - -} diff --git a/src/compiler/scala/tools/scalap/ByteArrayReader.scala b/src/compiler/scala/tools/scalap/ByteArrayReader.scala deleted file mode 100644 index 13f62ebfd9..0000000000 --- a/src/compiler/scala/tools/scalap/ByteArrayReader.scala +++ /dev/null @@ -1,157 +0,0 @@ -/* ___ ____ ___ __ ___ ___ -** / _// __// _ | / / / _ | / _ \ Scala classfile decoder -** __\ \/ /__/ __ |/ /__/ __ |/ ___/ (c) 2003-2006, LAMP/EPFL -** /____/\___/_/ |_/____/_/ |_/_/ -** -*/ - -// $Id: ByteArrayReader.scala 5837 2006-02-23 17:37:25 +0000 (Thu, 23 Feb 2006) michelou $ - -package scala.tools.scalap - - -class ByteArrayReader(content: Array[Byte]) { - import java.io._ - - /** the buffer containing the file - */ - val buf: Array[Byte] = content - - /** the current input pointer - */ - var bp: Int = 0 - - /** return byte at offset 'pos' - */ - def byteAt(pos: Int): Byte = buf(pos) - - /** read a byte - */ - def nextByte: Byte = { - bp = bp + 1 - buf(bp - 1) - } - - /** read some bytes - */ - def nextBytes(len: Int): Array[Byte] = { - val res = new Array[Byte](len) - System.arraycopy(buf, bp, res, 0, len) - bp = bp + len - res - } - - /** read a character - */ - def nextChar: Char = { - bp = bp + 2 - (((buf(bp - 2) & 0xff) << 8) + (buf(bp - 1) & 0xff)).asInstanceOf[Char] - } - - /** read an integer - */ - def nextInt: Int = { - bp = bp + 4 - ((buf(bp - 4) & 0xff) << 24) + - ((buf(bp - 3) & 0xff) << 16) + - ((buf(bp - 2) & 0xff) << 8) + - (buf(bp - 1) & 0xff) - } - - /** read a long - */ - def nextLong: Long = - (nextInt.asInstanceOf[Long] << 32) + (nextInt.asInstanceOf[Long] & 0xffffffffL) - - /** read a float - */ - def nextFloat: Float = java.lang.Float.intBitsToFloat(nextInt) - - /** read a double - */ - def nextDouble: Double = java.lang.Double.longBitsToDouble(nextLong) - - /** read the next integer number - */ - def nextNat: Int = { - var x = 0 - var b: Byte = 0 - do { - b = buf(bp) - bp = bp + 1 - x = (x << 7) + (b & 0x7f) - } while ((b & 0x80) != 0) - x - } - - /** read the next signed number in big endian format - */ - def nextNum(n: Int): Long = { - var x: Long = 0 - var i: Int = 0 - while (i < n) { - x = (x << 8) + (nextByte & 0xff) - i = i + 1 - } - val leading: Int = 64 - (n * 8) - x << leading >> leading - } - - /** read an UTF8 encoded string - */ - def nextUTF8(len: Int): String = { - val cs: Array[Char] = new Array(len) - var i = bp - var j = 0 - bp = bp + len - while (i < bp) { - var b: Int = buf(i) & 0xFF - i = i + 1 - if (b >= 0xE0) { - b = ((b & 0x0F) << 12) | (buf(i) & 0x3F) << 6 - i = i + 1 - b = b | (buf(i) & 0x3F) - i = i + 1 - } else if (b >= 0xC0) { - b = ((b & 0x1F) << 6) | (buf(i) & 0x3F) - i = i + 1 - } - cs(j) = b.asInstanceOf[Char] - j = j + 1 - } - new String(cs, 0, j) - } - - /** extract a character at position bp from buf - */ - def getChar(bp: Int): Char = - (((buf(bp) & 0xff) << 8) + (buf(bp + 1) & 0xff)).asInstanceOf[Char] - - /** extract an integer at position bp from buf - */ - def getInt(bp: Int): Int = - ((buf(bp ) & 0xff) << 24) + - ((buf(bp + 1) & 0xff) << 16) + - ((buf(bp + 2) & 0xff) << 8) + - (buf(bp + 3) & 0xff) - - /** extract a long integer at position bp from buf - */ - def getLong(bp: Int): Long = - (getInt(bp).asInstanceOf[Long] << 32) + (getInt(bp + 4).asInstanceOf[Long] & 0xffffffffL) - - /** extract a float at position bp from buf - */ - def getFloat(bp: Int): Float = java.lang.Float.intBitsToFloat(getInt(bp)) - - /** extract a double at position bp from buf - */ - def getDouble(bp: Int): Double = java.lang.Double.longBitsToDouble(getLong(bp)) - - /** skip next 'n' bytes - */ - def skip(n: Int): Unit = { - bp = bp + n - } - -} diff --git a/src/compiler/scala/tools/scalap/Classfile.scala b/src/compiler/scala/tools/scalap/Classfile.scala deleted file mode 100644 index 795f4ec613..0000000000 --- a/src/compiler/scala/tools/scalap/Classfile.scala +++ /dev/null @@ -1,126 +0,0 @@ -/* ___ ____ ___ __ ___ ___ -** / _// __// _ | / / / _ | / _ \ Scala classfile decoder -** __\ \/ /__/ __ |/ /__/ __ |/ ___/ (c) 2003-2006, LAMP/EPFL -** /____/\___/_/ |_/____/_/ |_/_/ -** -*/ - -// $Id: Classfile.scala 5837 2006-02-23 17:37:25 +0000 (Thu, 23 Feb 2006) michelou $ - -package scala.tools.scalap - - -class Classfile(in: ByteArrayReader) { - import Classfiles._ - - assert(in.nextInt == JAVA_MAGIC) - val minorVersion = in.nextChar - val majorVersion = in.nextChar - val pool = readPool - val flags = in.nextChar - val classname = in.nextChar - val superclass = in.nextChar - val interfaces = readInterfaces - val fields = readMembers(true) - val methods = readMembers(false) - val attribs = readAttribs - - def readAttribs = { - val n = in.nextChar - var attribs: List[Attribute] = Nil - var i = 0 - while (i < n) { - attribs = Attribute(in.nextChar, in.nextBytes(in.nextInt)) :: attribs - i = i + 1 - } - attribs - } - - def readMembers(field: Boolean) = { - val n = in.nextChar - var members: List[Member] = Nil - var i = 0 - while (i < n) { - members = Member(field, in.nextChar, in.nextChar, in.nextChar, readAttribs) :: members - i = i + 1 - } - members - } - - def readInterfaces = { - val n = in.nextChar - var intfs: List[Int] = Nil - var i = 0 - while (i < n) { - intfs = in.nextChar :: intfs - i = i + 1 - } - intfs - } - - def readPool = { - val pool = new Array[PoolEntry](in.nextChar) - var i = 1 - while (i < pool.length) { - val tag: Int = in.nextByte - tag match { - case CONSTANT_UTF8 => - pool(i) = UTF8(in.nextUTF8(in.nextChar)) - case CONSTANT_UNICODE => - in.skip(in.nextChar) - pool(i) = Empty() - case CONSTANT_CLASS => - pool(i) = ClassRef(in.nextChar) - case CONSTANT_STRING => - pool(i) = StringConst(in.nextChar) - case CONSTANT_FIELDREF => - pool(i) = FieldRef(in.nextChar, in.nextChar) - case CONSTANT_METHODREF => - pool(i) = MethodRef(in.nextChar, in.nextChar) - case CONSTANT_INTFMETHODREF => - pool(i) = IntfMethodRef(in.nextChar, in.nextChar) - case CONSTANT_NAMEANDTYPE => - pool(i) = NameAndType(in.nextChar, in.nextChar) - case CONSTANT_INTEGER => - pool(i) = IntegerConst(in.nextInt) - case CONSTANT_FLOAT => - pool(i) = FloatConst(in.nextFloat) - case CONSTANT_LONG => - pool(i) = LongConst(in.nextLong) - i = i + 1 - pool(i) = Empty() - case CONSTANT_DOUBLE => - pool(i) = DoubleConst(in.nextDouble) - i = i + 1 - pool(i) = Empty() - } - i = i + 1 - } - pool - } - - class PoolEntry - case class UTF8(str: String) extends PoolEntry - case class ClassRef(classId: Int) extends PoolEntry - case class FieldRef(classId: Int, memberId: Int) extends PoolEntry - case class MethodRef(classId: Int, memberId: Int) extends PoolEntry - case class IntfMethodRef(classId: Int, memberId: Int) extends PoolEntry - case class StringConst(strId: Int) extends PoolEntry - case class IntegerConst(x: Int) extends PoolEntry - case class FloatConst(x: Float) extends PoolEntry - case class LongConst(x: Long) extends PoolEntry - case class DoubleConst(x: Double) extends PoolEntry - case class NameAndType(nameId: Int, typeId: Int) extends PoolEntry - case class Empty() extends PoolEntry - - case class Member(field: Boolean, flags: Int, name: Int, tpe: Int, attribs: List[Attribute]) - case class Attribute(name: Int, data: Array[Byte]) { - - override def toString(): String = pool(name) match { - case UTF8(str: String) => str - } - - def reader: ByteArrayReader = new ByteArrayReader(data) - } - -} diff --git a/src/compiler/scala/tools/scalap/Classfiles.scala b/src/compiler/scala/tools/scalap/Classfiles.scala deleted file mode 100644 index d9e85e9d9e..0000000000 --- a/src/compiler/scala/tools/scalap/Classfiles.scala +++ /dev/null @@ -1,56 +0,0 @@ -/* ___ ____ ___ __ ___ ___ -** / _// __// _ | / / / _ | / _ \ Scala classfile decoder -** __\ \/ /__/ __ |/ /__/ __ |/ ___/ (c) 2003-2006, LAMP/EPFL -** /____/\___/_/ |_/____/_/ |_/_/ -** -*/ - -// $Id: Classfiles.scala 5837 2006-02-23 17:37:25 +0000 (Thu, 23 Feb 2006) michelou $ - -package scala.tools.scalap - - -object Classfiles { - final val JAVA_MAGIC = 0xCAFEBABE - final val JAVA_MAJOR_VERSION = 45 - final val JAVA_MINOR_VERSION = 3 - - final val CONSTANT_UTF8 = 1 - final val CONSTANT_UNICODE = 2 - final val CONSTANT_INTEGER = 3 - final val CONSTANT_FLOAT = 4 - final val CONSTANT_LONG = 5 - final val CONSTANT_DOUBLE = 6 - final val CONSTANT_CLASS = 7 - final val CONSTANT_STRING = 8 - final val CONSTANT_FIELDREF = 9 - final val CONSTANT_METHODREF = 10 - final val CONSTANT_INTFMETHODREF = 11 - final val CONSTANT_NAMEANDTYPE = 12 - - final val BAD_ATTR = 0x00000 - final val SOURCEFILE_ATTR = 0x00001 - final val SYNTHETIC_ATTR = 0x00002 - final val DEPRECATED_ATTR = 0x00004 - final val CODE_ATTR = 0x00008 - final val EXCEPTIONS_ATTR = 0x00010 - final val CONSTANT_VALUE_ATTR = 0x00020 - final val LINE_NUM_TABLE_ATTR = 0x00040 - final val LOCAL_VAR_TABLE_ATTR = 0x00080 - final val INNERCLASSES_ATTR = 0x08000 - final val META_ATTR = 0x10000 - final val SCALA_ATTR = 0x20000 - - final val SOURCEFILE_N = "SourceFile" - final val SYNTHETIC_N = "Synthetic" - final val DEPRECATED_N = "Deprecated" - final val CODE_N = "Code" - final val EXCEPTIONS_N = "Exceptions" - final val CONSTANT_VALUE_N = "ConstantValue" - final val LINE_NUM_TABLE_N = "LineNumberTable" - final val LOCAL_VAR_TABLE_N = "LocalVariableTable" - final val INNERCLASSES_N = "InnerClasses" - final val META_N = "JacoMeta" - final val SCALA_N = "ScalaSignature" - final val CONSTR_N = "" -} diff --git a/src/compiler/scala/tools/scalap/CodeWriter.scala b/src/compiler/scala/tools/scalap/CodeWriter.scala deleted file mode 100644 index b0ad39bd12..0000000000 --- a/src/compiler/scala/tools/scalap/CodeWriter.scala +++ /dev/null @@ -1,140 +0,0 @@ -/* ___ ____ ___ __ ___ ___ -** / _// __// _ | / / / _ | / _ \ Scala classfile decoder -** __\ \/ /__/ __ |/ /__/ __ |/ ___/ (c) 2003-2006, LAMP/EPFL -** /____/\___/_/ |_/____/_/ |_/_/ -** -*/ - -// $Id: CodeWriter.scala 5837 2006-02-23 17:37:25 +0000 (Thu, 23 Feb 2006) michelou $ - -package scala.tools.scalap - -import java.io._ - - -class CodeWriter(writer: Writer) { - - private val nl = System.getProperty("line.separator") - private var step = " " - private var level = 0 - private var align = false - private var space = false - private var line = false - - def getWriter = writer - - def getIndentLevel = level - - def setIndentLevel(level: Int): CodeWriter = { - this.level = level - this - } - - def getIndentWidth = if (step == null) -1 else step.length() - - def setIndentWidth(width: Int): CodeWriter = { - val buffer = new StringBuffer(width) - var i = 0 - while (i < width) - buffer.append(' ') - setIndentString(buffer.toString()) - } - - def getIndentString = step; - - def setIndentString(step: String): CodeWriter = { - this.step = step - this - } - - def indent: CodeWriter = { - level = level + 1 - this - } - - def undent: CodeWriter = { - level = level - 1 - this - } - - def newline: CodeWriter = { - if (step == null) - newspace - else if (!line) { - try { - writer.write(nl) - } catch { - case e => error("IO error") - } - line = align - align = true - space = false - this - } else - this - } - - def newspace: CodeWriter = { - space = !align - this - } - - def * : Unit = {} - - def println: CodeWriter = newline - - def println(value: Boolean): CodeWriter = print(value).newline - - def println(value: Byte): CodeWriter = print(value).newline - - def println(value: Short): CodeWriter = print(value).newline - - def println(value: Char): CodeWriter = print(value).newline - - def println(value: Int): CodeWriter = print(value).newline - - def println(value: Long): CodeWriter = print(value).newline - - def println(value: Float): CodeWriter = print(value).newline - - def println(value: Double): CodeWriter = print(value).newline - - def println(value: String): CodeWriter = print(value).newline - - def print(value: Boolean): CodeWriter = print(String.valueOf(value)) - - def print(value: Byte): CodeWriter = print(String.valueOf(value)) - - def print(value: Short): CodeWriter = print(String.valueOf(value)) - - def print(value: Char): CodeWriter = print(String.valueOf(value)) - - def print(value: Int): CodeWriter = print(String.valueOf(value)) - - def print(value: Long): CodeWriter = print(String.valueOf(value)) - - def print(value: Float): CodeWriter = print(String.valueOf(value)) - - def print(value: Double): CodeWriter = print(String.valueOf(value)) - - def print(value: String): CodeWriter = try { - if (align) { - var i = 0 - while (i < level) { - writer.write(step) - i = i + 1 - } - } - if (space) - writer.write(" ") - writer.write(value) - align = false - space = false - line = false - this - } catch { - case e => error("IO error") - } - - override def toString(): String = writer.toString() -} diff --git a/src/compiler/scala/tools/scalap/JavaWriter.scala b/src/compiler/scala/tools/scalap/JavaWriter.scala deleted file mode 100644 index 46d1f0fb56..0000000000 --- a/src/compiler/scala/tools/scalap/JavaWriter.scala +++ /dev/null @@ -1,234 +0,0 @@ -/* ___ ____ ___ __ ___ ___ -** / _// __// _ | / / / _ | / _ \ Scala classfile decoder -** __\ \/ /__/ __ |/ /__/ __ |/ ___/ (c) 2003-2006, LAMP/EPFL -** /____/\___/_/ |_/____/_/ |_/_/ -** -*/ - -// $Id: JavaWriter.scala 5838 2006-02-23 17:54:21Z michelou $ - -package scala.tools.scalap - -import java.io._ - - -class JavaWriter(classfile: Classfile, writer: Writer) extends CodeWriter(writer) { - - val cf = classfile - - def flagsToStr(clazz: Boolean, flags: Int) = { - val buffer = new StringBuffer() - var x: StringBuffer = buffer - if (((flags & 0x0007) == 0) && - ((flags & 0x0002) != 0)) - x = buffer.append("private ") - if ((flags & 0x0004) != 0) - x = buffer.append("protected ") - if ((flags & 0x0010) != 0) - x = buffer.append("final ") - if ((flags & 0x0400) != 0) - x = if (clazz) buffer.append("abstract ") - else buffer.append("/*deferred*/ ") - buffer.toString() - } - - def nameToClass(str: String) = { - val res = Names.decode(str.replace('/', '.')) - if (res == "java.lang.Object") "scala.Any" else res - } - - def nameToClass0(str: String) = { - val res = Names.decode(str.replace('/', '.')) - if (res == "java.lang.Object") "scala.AnyRef" else res - } - - def nameToSimpleClass(str: String) = - Names.decode(str.substring(str.lastIndexOf('/') + 1)) - - def nameToPackage(str: String) = { - val inx = str.lastIndexOf('/') - val name = if (inx == -1) str else str.substring(0, inx).replace('/', '.') - Names.decode(name) - } - - def sigToType(str: String): String = - sigToType(str, 0)._1 - - def sigToType(str: String, i: Int): Pair[String, Int] = str.charAt(i) match { - case 'B' => Pair("scala.Byte", i + 1) - case 'C' => Pair("scala.Char", i + 1) - case 'D' => Pair("scala.Double", i + 1) - case 'F' => Pair("scala.Float", i + 1) - case 'I' => Pair("scala.Int", i + 1) - case 'J' => Pair("scala.Long", i + 1) - case 'S' => Pair("scala.Short", i + 1) - case 'V' => Pair("scala.Unit", i + 1) - case 'Z' => Pair("scala.Boolean", i + 1) - case 'L' => val j = str.indexOf(';', i); - Pair(nameToClass(str.substring(i + 1, j)), j + 1) - case '[' => val Pair(tpe, j) = sigToType(str, i + 1); - Pair("scala.Array[" + tpe + "]", j) - case '(' => val Pair(tpe, j) = sigToType0(str, i + 1); - Pair("(" + tpe, j) - case ')' => val Pair(tpe, j) = sigToType(str, i + 1); - Pair("): " + tpe, j) - } - - def sigToType0(str: String, i: Int): Pair[String, Int] = - if (str.charAt(i) == ')') - sigToType(str, i) - else { - val Pair(tpe, j) = sigToType(str, i) - if (str.charAt(j) == ')') { - val Pair(rest, k) = sigToType(str, j) - Pair(tpe + rest, k) - } else { - val Pair(rest, k) = sigToType0(str, j) - Pair(tpe + ", " + rest, k) - } - } - - def getName(n: Int): String = cf.pool(n) match { - case cf.UTF8(str) => str - case cf.StringConst(m) => getName(m) - case cf.ClassRef(m) => getName(m) - case x => "" - } - - def getClassName(n: Int): String = nameToClass(getName(n)) - - def getSimpleClassName(n: Int): String = nameToSimpleClass(getName(n)) - - def getPackage(n: Int): String = nameToPackage(getName(n)) - - def getType(n: Int): String = sigToType(getName(n)) - - def isStatic(flags: Int) = (flags & 0x0008) != 0 - - def isInterface(flags: Int) = (flags & 0x0200) != 0 - - def isConstr(name: String) = (name == "") - - def printField(flags: Int, name: Int, tpe: Int, attribs: List[cf.Attribute]) = { - print(flagsToStr(false, flags)) - if ((flags & 0x0010) != 0) - print("val " + Names.decode(getName(name))) - else - print("final var " + Names.decode(getName(name))) - print(": " + getType(tpe) + ";").newline - } - - def printMethod(flags: Int, name: Int, tpe: Int, attribs: List[cf.Attribute]) = { - if (getName(name) == "") - print(flagsToStr(false, flags)) - attribs find { - case cf.Attribute(name, _) => getName(name) == "JacoMeta" - } match { - case Some(cf.Attribute(_, data)) => - val mp = new MetaParser(getName( - ((data(0) & 0xff) << 8) + (data(1) & 0xff)).trim()) - mp.parse match { - case None => - if (getName(name) == "") { - print("def this" + getType(tpe) + ";").newline - } else { - print("def " + Names.decode(getName(name))) - print(getType(tpe) + ";").newline - } - case Some(str) => - if (getName(name) == "") - print("def this" + str + ";").newline - else - print("def " + Names.decode(getName(name)) + str + ";").newline - } - case None => - if (getName(name) == "") { - print("def this" + getType(tpe) + ";").newline - } else { - print("def " + Names.decode(getName(name))) - print(getType(tpe) + ";").newline - } - } - attribs find { - case cf.Attribute(name, _) => getName(name) == "Exceptions" - } match { - case Some(cf.Attribute(_, data)) => - val n = ((data(0) & 0xff) << 8) + (data(1) & 0xff) - indent.print("throws ") - for (val i <- Iterator.range(0, n) map {x => 2 * (x + 1)}) { - val inx = ((data(i) & 0xff) << 8) + (data(i+1) & 0xff) - if (i > 2) print(", ") - print(getClassName(inx).trim()) - } - undent.newline - case None => - } - } - - def printClassHeader = { - if (isInterface(cf.flags)) { - print("trait " + getSimpleClassName(cf.classname)) - } else { - print("class " + getSimpleClassName(cf.classname)) - if (cf.pool(cf.superclass) != null) - print(" extends " + nameToClass0(getName(cf.superclass))) - } - cf.interfaces foreach { - n => print(" with " + getClassName(n)) - } - } - - def printClass = { - val pck = getPackage(cf.classname); - if (pck.length() > 0) - println("package " + pck + ";") - print(flagsToStr(true, cf.flags)) - cf.attribs find { - case cf.Attribute(name, _) => getName(name) == "JacoMeta" - } match { - case None => - printClassHeader; - case Some(cf.Attribute(_, data)) => - val mp = new MetaParser(getName( - ((data(0) & 0xff) << 8) + (data(1) & 0xff)).trim()); - mp.parse match { - case None => printClassHeader; - case Some(str) => - if (isInterface(cf.flags)) - print("trait " + getSimpleClassName(cf.classname) + str); - else - print("class " + getSimpleClassName(cf.classname) + str); - } - } - var statics: List[cf.Member] = Nil - print(" {").indent.newline - cf.fields foreach { - case m@cf.Member(_, flags, name, tpe, attribs) => - if (isStatic(flags)) - statics = m :: statics - else - printField(flags, name, tpe, attribs) - } - cf.methods foreach { - case m@cf.Member(_, flags, name, tpe, attribs) => - if (isStatic(flags)) - statics = m :: statics - else - printMethod(flags, name, tpe, attribs) - } - undent.print("}").newline - if (!statics.isEmpty) { - print("object " + getSimpleClassName(cf.classname) + " {") - indent.newline - statics foreach { - case cf.Member(true, flags, name, tpe, attribs) => - printField(flags, name, tpe, attribs) - case cf.Member(false, flags, name, tpe, attribs) => - if (getName(name) != "") - printMethod(flags, name, tpe, attribs) - } - undent.print("}").newline - } - } - -} diff --git a/src/compiler/scala/tools/scalap/Main.scala b/src/compiler/scala/tools/scalap/Main.scala deleted file mode 100644 index 6e91e00234..0000000000 --- a/src/compiler/scala/tools/scalap/Main.scala +++ /dev/null @@ -1,266 +0,0 @@ -/* ___ ____ ___ __ ___ ___ -** / _// __// _ | / / / _ | / _ \ Scala classfile decoder -** __\ \/ /__/ __ |/ /__/ __ |/ ___/ (c) 2003-2009, LAMP/EPFL -** /____/\___/_/ |_/____/_/ |_/_/ http://scala-lang.org/ -** -*/ - -// $Id: Main.scala 9834 2007-01-31 16:31:25Z michelou $ - -package scala.tools.scalap - - -import java.io.{File, PrintStream, OutputStreamWriter, ByteArrayOutputStream} -import scala.tools.nsc.util.ClassPath -import scalax.rules.scalasig._ - -/**The main object used to execute scalap on the command-line. - * - * @author Matthias Zenger, Stephane Micheloud, Burak Emir, Ilya Sergey - */ -object Main { - val SCALA_SIG = "ScalaSig" - val versionMsg = "Scala classfile decoder " + - Properties.versionString + " -- " + - Properties.copyrightString - - /**Verbose program run? - */ - var verbose = false - - /**Prints usage information for scalap. - */ - def usage: Unit = { - Console.println("usage: scalap {