diff options
author | Martin Odersky <odersky@gmail.com> | 2008-07-29 10:20:51 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2008-07-29 10:20:51 +0000 |
commit | c925964406607ca53df6d7fcba2ad51ae084655f (patch) | |
tree | 02d77f977d5a83c7e8d32b1098a88bc0de60e6b2 | |
parent | f6974416057ead15f0903bd4da5b1ccf5f423a84 (diff) | |
download | scala-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.scala | 7 | ||||
-rwxr-xr-x | test/pending/pos/sig/sigs.java | 5 | ||||
-rwxr-xr-x | test/pending/pos/sig/sigs.scala | 6 | ||||
-rwxr-xr-x | test/pending/pos/sig/sigtest.scala | 3 |
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") +} |