summaryrefslogtreecommitdiff
path: root/src/partest-extras/scala/tools
diff options
context:
space:
mode:
authorLukas Rytz <lukas.rytz@gmail.com>2016-02-16 12:13:54 +0100
committerLukas Rytz <lukas.rytz@gmail.com>2016-02-16 12:13:54 +0100
commit97d8e5a2fd24f83e1adb17a11c15de2d8d9390bf (patch)
treeeda82ceb06acfb59e7b15192eff0e7d9588bae28 /src/partest-extras/scala/tools
parentc524f18ee4959f6fe8297971fc882e63468c4317 (diff)
downloadscala-97d8e5a2fd24f83e1adb17a11c15de2d8d9390bf.tar.gz
scala-97d8e5a2fd24f83e1adb17a11c15de2d8d9390bf.tar.bz2
scala-97d8e5a2fd24f83e1adb17a11c15de2d8d9390bf.zip
Tests for optimizing val patterns
Fixes https://github.com/scala/scala-dev/issues/28
Diffstat (limited to 'src/partest-extras/scala/tools')
-rw-r--r--src/partest-extras/scala/tools/partest/ASMConverters.scala22
1 files changed, 18 insertions, 4 deletions
diff --git a/src/partest-extras/scala/tools/partest/ASMConverters.scala b/src/partest-extras/scala/tools/partest/ASMConverters.scala
index d990160ce8..a3d849a9c1 100644
--- a/src/partest-extras/scala/tools/partest/ASMConverters.scala
+++ b/src/partest-extras/scala/tools/partest/ASMConverters.scala
@@ -43,6 +43,23 @@ object ASMConverters {
case i: Invoke => i.name
case i => i.opcode
}
+
+ def summaryText: String = {
+ def comment(i: Instruction) = i match {
+ case j: Jump => s" /*${j.label.offset}*/"
+ case l: Label => s" /*${l.offset}*/"
+ case _ => ""
+ }
+ dropNonOp.map({
+ case i: Invoke => s""""${i.name}""""
+ case ins => opcodeToString(ins.opcode, ins.opcode) + comment(ins)
+ }).mkString("List(", ", ", ")")
+ }
+ }
+
+ def opcodeToString(op: Int, default: Any = "?"): String = {
+ import scala.tools.asm.util.Printer.OPCODES
+ if (OPCODES.isDefinedAt(op)) OPCODES(op) else default.toString
}
sealed abstract class Instruction extends Product {
@@ -50,12 +67,9 @@ object ASMConverters {
// toString such that the first field, "opcode: Int", is printed textually.
final override def toString() = {
- import scala.tools.asm.util.Printer.OPCODES
- def opString(op: Int) = if (OPCODES.isDefinedAt(op)) OPCODES(op) else "?"
val printOpcode = opcode != -1
-
productPrefix + (
- if (printOpcode) Iterator(opString(opcode)) ++ productIterator.drop(1)
+ if (printOpcode) Iterator(opcodeToString(opcode)) ++ productIterator.drop(1)
else productIterator
).mkString("(", ", ", ")")
}