summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2008-07-29 10:20:51 +0000
committerMartin Odersky <odersky@gmail.com>2008-07-29 10:20:51 +0000
commitc925964406607ca53df6d7fcba2ad51ae084655f (patch)
tree02d77f977d5a83c7e8d32b1098a88bc0de60e6b2
parentf6974416057ead15f0903bd4da5b1ccf5f423a84 (diff)
downloadscala-c925964406607ca53df6d7fcba2ad51ae084655f.tar.gz
scala-c925964406607ca53df6d7fcba2ad51ae084655f.tar.bz2
scala-c925964406607ca53df6d7fcba2ad51ae084655f.zip
experimenting with Signature attribute
-rw-r--r--src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala7
-rwxr-xr-xtest/pending/pos/sig/sigs.java5
-rwxr-xr-xtest/pending/pos/sig/sigs.scala6
-rwxr-xr-xtest/pending/pos/sig/sigtest.scala3
4 files changed, 18 insertions, 3 deletions
diff --git a/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala b/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala
index cbad27aea5..dc0a3d362c 100644
--- a/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala
+++ b/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala
@@ -400,9 +400,10 @@ abstract class GenJVM extends SubComponent {
def addGenericSignature(jmember: JMember, sym: Symbol, tp: Type) {
if (settings.target.value == "jvm-1.5" && erasure.needsJavaSig(tp)) {
val sig = erasure.javaSig(tp)
- if (settings.debug.value && settings.verbose.value) println("add generic sig "+sym+":"+tp+" ==> "+sig)
+ val index = jmember.getConstantPool().addUtf8(sig).toShort
+ if (settings.debug.value && settings.verbose.value) println("add generic sig "+sym+":"+tp+" ==> "+sig+" @ "+index)
val buf = ByteBuffer.allocate(2)
- buf.putShort(jmember.getConstantPool().addUtf8(sig).toShort)
+ buf.putShort(index)
addAttribute(jmember, nme.SignatureATTR, buf)
}
}
@@ -441,7 +442,7 @@ abstract class GenJVM extends SubComponent {
}
def addAttribute(jmember: JMember, name: Name, buf: ByteBuffer) {
- if (buf.position() <= 2)
+ if (buf.position() < 2)
return
val length = buf.position();
diff --git a/test/pending/pos/sig/sigs.java b/test/pending/pos/sig/sigs.java
new file mode 100755
index 0000000000..0fc0c7008f
--- /dev/null
+++ b/test/pending/pos/sig/sigs.java
@@ -0,0 +1,5 @@
+package test;
+class Test extends T {
+ Object y = bar("abc");
+ String x = foo("abc");
+} \ No newline at end of file
diff --git a/test/pending/pos/sig/sigs.scala b/test/pending/pos/sig/sigs.scala
new file mode 100755
index 0000000000..4579f225d9
--- /dev/null
+++ b/test/pending/pos/sig/sigs.scala
@@ -0,0 +1,6 @@
+package test
+class T {
+ def foo[T](x: T): T = x
+ def bar[T](x: T): T = x
+}
+
diff --git a/test/pending/pos/sig/sigtest.scala b/test/pending/pos/sig/sigtest.scala
new file mode 100755
index 0000000000..1d091390f7
--- /dev/null
+++ b/test/pending/pos/sig/sigtest.scala
@@ -0,0 +1,3 @@
+object Test extends T with Application {
+ val x: String = foo("abc")
+}