summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2010-10-17 06:59:23 +0000
committerPaul Phillips <paulp@improving.org>2010-10-17 06:59:23 +0000
commit491ecd7b8b2e5a0ee1f185f26042a80e11e46568 (patch)
tree90812d869840df297b4fa9afa0a7dae43ddc1d9a
parent080d357a3e3c88c17626c3a2ddd6fc334cb86d2e (diff)
downloadscala-491ecd7b8b2e5a0ee1f185f26042a80e11e46568.tar.gz
scala-491ecd7b8b2e5a0ee1f185f26042a80e11e46568.tar.bz2
scala-491ecd7b8b2e5a0ee1f185f26042a80e11e46568.zip
Reverted previous commit as I think it is wedgi...
Reverted previous commit as I think it is wedging under -optimise. No review.
-rw-r--r--lib/fjbg.jar.desired.sha12
-rw-r--r--src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala17
-rw-r--r--src/fjbg/ch/epfl/lamp/fjbg/FJBGContext.java25
-rw-r--r--src/fjbg/ch/epfl/lamp/fjbg/JClass.java11
-rw-r--r--src/fjbg/ch/epfl/lamp/fjbg/JCode.java1
-rw-r--r--src/fjbg/ch/epfl/lamp/fjbg/JCodeIterator.java14
-rw-r--r--src/fjbg/ch/epfl/lamp/fjbg/JConstantPool.java2
-rw-r--r--src/fjbg/ch/epfl/lamp/fjbg/JExtendedCode.java6
-rw-r--r--src/fjbg/ch/epfl/lamp/fjbg/JFieldOrMethod.java2
-rw-r--r--src/fjbg/ch/epfl/lamp/fjbg/JMember.java1
-rw-r--r--src/fjbg/ch/epfl/lamp/fjbg/JOpcode.java8
-rw-r--r--src/fjbg/ch/epfl/lamp/fjbg/JType.java2
-rw-r--r--test/files/neg/bug1133msg.check4
-rw-r--r--test/files/neg/bug1133msg.scala33
14 files changed, 24 insertions, 104 deletions
diff --git a/lib/fjbg.jar.desired.sha1 b/lib/fjbg.jar.desired.sha1
index 1b63db3e08..862868d030 100644
--- a/lib/fjbg.jar.desired.sha1
+++ b/lib/fjbg.jar.desired.sha1
@@ -1 +1 @@
-cbe214571e5ab811a8c3b5c9a5995aec066d2e36 ?fjbg.jar
+3997a32211461f0f7de1e4eb37e964cd134ea003 ?fjbg.jar
diff --git a/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala b/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala
index 7afa36c0ba..5a02de0907 100644
--- a/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala
+++ b/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala
@@ -15,8 +15,6 @@ import scala.tools.nsc.symtab._
import scala.tools.nsc.symtab.classfile.ClassfileConstants._
import ch.epfl.lamp.fjbg._
-import FJBGContext.FJBGWrapper
-import JCode.OffsetTooBigException
import JAccessFlags._
import JObjectType.{ JAVA_LANG_STRING, JAVA_LANG_OBJECT }
import java.io.{ DataOutputStream }
@@ -140,15 +138,6 @@ abstract class GenJVM extends SubComponent {
val emitLines = debugLevel >= 2
val emitVars = debugLevel >= 3
- def analyzeException(culprit: String, t: Throwable): Unit = t match {
- case x: FJBGWrapper =>
- analyzeException(x.culprit, x.getCause())
- case _: OffsetTooBigException =>
- clasz.cunit.error(clasz.symbol.pos, "cannot emit bytecode for " + culprit + ": " + t.getMessage)
- case x =>
- throw x
- }
-
/** Write a class to disk, adding the Scala signature (pickled type
* information) and inner classes.
*
@@ -159,10 +148,8 @@ abstract class GenJVM extends SubComponent {
addInnerClasses(jclass)
val outfile = getFile(sym, jclass, ".class")
val outstream = new DataOutputStream(outfile.bufferedOutput)
- try jclass.writeTo(outstream)
- catch { case x => analyzeException(jclass.getName(), x) }
- finally outstream.close()
-
+ jclass.writeTo(outstream)
+ outstream.close()
informProgress("wrote " + outfile)
}
diff --git a/src/fjbg/ch/epfl/lamp/fjbg/FJBGContext.java b/src/fjbg/ch/epfl/lamp/fjbg/FJBGContext.java
index cfc4ed00e5..569a9ac272 100644
--- a/src/fjbg/ch/epfl/lamp/fjbg/FJBGContext.java
+++ b/src/fjbg/ch/epfl/lamp/fjbg/FJBGContext.java
@@ -28,31 +28,6 @@ public class FJBGContext {
MINOR_VERSION = minor;
}
- public static class FJBGWrapper extends RuntimeException {
- public String culprit;
- public FJBGWrapper(Throwable cause) {
- super(cause);
- this.culprit = "<unknown>";
- }
- public FJBGWrapper(String culprit, Throwable cause) {
- super(cause);
- this.culprit = culprit;
- }
- }
-
- static FJBGWrapper mkFatal(String culprit, Throwable t) {
- return new FJBGWrapper(culprit, t);
- }
- static FJBGWrapper mkFatal(Throwable t) {
- return new FJBGWrapper(t);
- }
- static RuntimeException mkFatal(Object obj) {
- return new FJBGWrapper(new java.lang.Error(obj.toString()));
- }
- static RuntimeException mkFatal(String message) {
- return new FJBGWrapper(new java.lang.Error(message));
- }
-
// Factory methods
//////////////////////////////////////////////////////////////////////
diff --git a/src/fjbg/ch/epfl/lamp/fjbg/JClass.java b/src/fjbg/ch/epfl/lamp/fjbg/JClass.java
index 3839af4156..0fc604424a 100644
--- a/src/fjbg/ch/epfl/lamp/fjbg/JClass.java
+++ b/src/fjbg/ch/epfl/lamp/fjbg/JClass.java
@@ -310,15 +310,8 @@ public class JClass extends JMember {
stream.writeShort(methods.size());
Iterator methodsIt = methods.iterator();
- while (methodsIt.hasNext()) {
- JMethod m = (JMethod)methodsIt.next();
- try {
- m.writeTo(stream);
- }
- catch (Throwable t) {
- throw FJBGContext.mkFatal(name + "." + m.getName(), t);
- }
- }
+ while (methodsIt.hasNext())
+ ((JMethod)methodsIt.next()).writeTo(stream);
// Attributes
JAttribute.writeTo(attributes, stream);
diff --git a/src/fjbg/ch/epfl/lamp/fjbg/JCode.java b/src/fjbg/ch/epfl/lamp/fjbg/JCode.java
index 2506a06c03..f7d275c8a7 100644
--- a/src/fjbg/ch/epfl/lamp/fjbg/JCode.java
+++ b/src/fjbg/ch/epfl/lamp/fjbg/JCode.java
@@ -889,6 +889,7 @@ public class JCode {
public OffsetTooBigException() { super(); }
public OffsetTooBigException(String message) { super(message); }
}
+
protected void checkOffset16(int offset) throws OffsetTooBigException {
if (offset < Short.MIN_VALUE || offset > Short.MAX_VALUE)
throw new OffsetTooBigException("offset too big to fit"
diff --git a/src/fjbg/ch/epfl/lamp/fjbg/JCodeIterator.java b/src/fjbg/ch/epfl/lamp/fjbg/JCodeIterator.java
index 5ca4f14215..34b38c828d 100644
--- a/src/fjbg/ch/epfl/lamp/fjbg/JCodeIterator.java
+++ b/src/fjbg/ch/epfl/lamp/fjbg/JCodeIterator.java
@@ -125,7 +125,7 @@ public class JCodeIterator {
else
return 4;
} else
- throw FJBGContext.mkFatal("Unknown size for instruction " + opcode);
+ throw new Error("Unknown size for instruction " + opcode);
}
/**
@@ -144,7 +144,7 @@ public class JCodeIterator {
int npairsPos = pc + 1 + pad4(pc + 1) + 4;
return 1 + codeArray.getS4(npairsPos);
} else
- throw FJBGContext.mkFatal("Unknown successors for instruction " + opcode);
+ throw new Error("Unknown successors for instruction " + opcode);
}
/**
@@ -185,7 +185,7 @@ public class JCodeIterator {
return pc + codeArray.getS4(defaultPos + 2*4 + 4 + 8 * (index - 1));
}
default:
- throw FJBGContext.mkFatal("");
+ throw new Error();
}
}
@@ -226,7 +226,7 @@ public class JCodeIterator {
else return 0; // (IINC)
}
default :
- throw FJBGContext.mkFatal(opcode.toString());
+ throw new Error(opcode.toString());
}
} else
return JType.getTotalSize(opcode.getProducedDataTypes());
@@ -281,7 +281,7 @@ public class JCodeIterator {
case JOpcode.cMULTIANEWARRAY :
return codeArray.getU1(pc + 3);
default:
- throw FJBGContext.mkFatal(opcode.toString());
+ throw new Error(opcode.toString());
}
}
}
@@ -315,7 +315,7 @@ public class JCodeIterator {
return 0; // (IINC)
}
default:
- throw FJBGContext.mkFatal("JOpcode implementation error");
+ throw new Error("JOpcode implementation error");
}
}
}
@@ -358,7 +358,7 @@ public class JCodeIterator {
// return JOpcode.OPCODES[op].getConsumedDataTypes().length;
// else return 0; // (IINC)
// case 197 : return codeArray.getU1(pc + 3); // MULTIANEWARRAY
-// default : throw FJBGContext.mkFatal("JOpcode implementation error");
+// default : throw new Error("JOpcode implementation error");
// }
// } else return opcode.getConsumedDataTypes().length;
// }
diff --git a/src/fjbg/ch/epfl/lamp/fjbg/JConstantPool.java b/src/fjbg/ch/epfl/lamp/fjbg/JConstantPool.java
index 765411d5fb..0df4498d8e 100644
--- a/src/fjbg/ch/epfl/lamp/fjbg/JConstantPool.java
+++ b/src/fjbg/ch/epfl/lamp/fjbg/JConstantPool.java
@@ -104,7 +104,7 @@ public class JConstantPool {
case 12 : return "Methodref";
case 13 : return "InterfaceMethodref";
case 14 : return "NameAndType";
- default : throw FJBGContext.mkFatal("invalid constant pool tag : " + tag);
+ default : throw new Error("invalid constant pool tag : " + tag);
}
}
diff --git a/src/fjbg/ch/epfl/lamp/fjbg/JExtendedCode.java b/src/fjbg/ch/epfl/lamp/fjbg/JExtendedCode.java
index cbb0ce37db..69b522b622 100644
--- a/src/fjbg/ch/epfl/lamp/fjbg/JExtendedCode.java
+++ b/src/fjbg/ch/epfl/lamp/fjbg/JExtendedCode.java
@@ -463,7 +463,7 @@ public class JExtendedCode extends JCode {
JOpcode[] conv = typeConversions[fromType.getTag() - 4][toType.getTag() - 4];
if (conv == forbidden) {
- throw FJBGContext.mkFatal("inconvertible types : " + fromType.toString()
+ throw new Error("inconvertible types : " + fromType.toString()
+ " -> " + toType.toString());
} else if (conv != nothingToDo) {
for (int i = 0; i < conv.length; i++) {
@@ -518,7 +518,7 @@ public class JExtendedCode extends JCode {
try {
emitGOTO(label);
} catch (OffsetTooBigException e) {
- throw FJBGContext.mkFatal(e);
+ throw new Error(e);
}
}
}
@@ -532,7 +532,7 @@ public class JExtendedCode extends JCode {
try {
emitGOTO(targetPC);
} catch (OffsetTooBigException e) {
- throw FJBGContext.mkFatal(e);
+ throw new Error(e);
}
}
}
diff --git a/src/fjbg/ch/epfl/lamp/fjbg/JFieldOrMethod.java b/src/fjbg/ch/epfl/lamp/fjbg/JFieldOrMethod.java
index b97657c196..fec7310bdf 100644
--- a/src/fjbg/ch/epfl/lamp/fjbg/JFieldOrMethod.java
+++ b/src/fjbg/ch/epfl/lamp/fjbg/JFieldOrMethod.java
@@ -110,7 +110,7 @@ abstract public class JFieldOrMethod extends JMember {
freeze();
}
catch (JCode.OffsetTooBigException e) {
- throw FJBGContext.mkFatal(owner.name + "." + name, e);
+ throw new Error(e);
}
}
stream.writeShort(accessFlags);
diff --git a/src/fjbg/ch/epfl/lamp/fjbg/JMember.java b/src/fjbg/ch/epfl/lamp/fjbg/JMember.java
index 3b4ce38094..8d082fb90d 100644
--- a/src/fjbg/ch/epfl/lamp/fjbg/JMember.java
+++ b/src/fjbg/ch/epfl/lamp/fjbg/JMember.java
@@ -13,6 +13,7 @@ import java.util.Iterator;
*/
abstract public class JMember {
+
protected boolean frozen = false;
protected final FJBGContext context;
diff --git a/src/fjbg/ch/epfl/lamp/fjbg/JOpcode.java b/src/fjbg/ch/epfl/lamp/fjbg/JOpcode.java
index ca144a6b8d..f7ee688784 100644
--- a/src/fjbg/ch/epfl/lamp/fjbg/JOpcode.java
+++ b/src/fjbg/ch/epfl/lamp/fjbg/JOpcode.java
@@ -1201,7 +1201,7 @@ public class JOpcode {
case cDUP2_X2:
return 6;
default:
- throw FJBGContext.mkFatal(this.toString());
+ throw new Error(this.toString());
}
}
}
@@ -1220,7 +1220,7 @@ public class JOpcode {
case cDUP2_X2:
return 4;
default:
- throw FJBGContext.mkFatal(this.toString());
+ throw new Error(this.toString());
}
}
}
@@ -1240,7 +1240,7 @@ public class JOpcode {
case cDUP_X1:
return 3;
default:
- throw FJBGContext.mkFatal(this.toString());
+ throw new Error(this.toString());
}
}
}
@@ -1256,7 +1256,7 @@ public class JOpcode {
case cDUP2: case cDUP2_X1: case cPOP2: case cSWAP:
return 2;
default:
- throw FJBGContext.mkFatal(this.toString());
+ throw new Error(this.toString());
}
}
}
diff --git a/src/fjbg/ch/epfl/lamp/fjbg/JType.java b/src/fjbg/ch/epfl/lamp/fjbg/JType.java
index a62925d1b0..b926a59f5a 100644
--- a/src/fjbg/ch/epfl/lamp/fjbg/JType.java
+++ b/src/fjbg/ch/epfl/lamp/fjbg/JType.java
@@ -100,7 +100,7 @@ abstract public class JType {
} catch (IllegalArgumentException e) {
throw new IllegalArgumentException("invalid signature " + signature);
} catch (IOException e) {
- throw FJBGContext.mkFatal(e);
+ throw new Error(e);
}
}
diff --git a/test/files/neg/bug1133msg.check b/test/files/neg/bug1133msg.check
deleted file mode 100644
index 5b499ef12f..0000000000
--- a/test/files/neg/bug1133msg.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug1133msg.scala:1: error: cannot emit bytecode for Match$.badMethod: offset too big to fit in 16 bits: 53273
-object Match {
- ^
-one error found
diff --git a/test/files/neg/bug1133msg.scala b/test/files/neg/bug1133msg.scala
deleted file mode 100644
index b4a29aff4d..0000000000
--- a/test/files/neg/bug1133msg.scala
+++ /dev/null
@@ -1,33 +0,0 @@
-object Match {
- def someMethod = 5
-
- def badMethod(s: String) = s match {
- case Extractor1(Extractor2(Extractor3("dog", "dog", "dog"), x2, x3), b, c, Extractor3("b", "b", f), e) => println(e)
- case Extractor3(Extractor2(Extractor1("a", "aa", "aaa", "aa", "a"), Extractor2("a", "aa", "aaa"), e), y, z) => println(e)
- case Extractor2(Extractor3("a", "a", x), Extractor3("b", "b", y), Extractor3("c", "c", z)) => println(z)
- case _ => println("fail")
- }
-
- def someOtherMethod = 10
-
- object Extractor1 {
- def unapply(x: Any) = x match {
- case x: String => Some(x, x+x, x+x+x, x+x, x)
- case _ => None
- }
- }
-
- object Extractor2 {
- def unapply(x: Any) = x match {
- case x: String => Some(x, x+x, x+x+x)
- case _ => None
- }
- }
-
- object Extractor3 {
- def unapply(x: Any) = x match {
- case x: String => Some(x, x, x)
- case _ => None
- }
- }
-}