Hi,

Attached is an update to the tagged tuple support.  It allows the
verifier to accept method signatures containing tagged tuples.  I.e.
-Xverify:none is no longer required.

Mike.
diff -r f23a3c7f71ac tuple-tsig.patch
--- a/tuple-tsig.patch	Mon Jul 18 10:47:53 2011 -0700
+++ b/tuple-tsig.patch	Sun Jul 24 21:52:54 2011 +0100
@@ -1,6 +1,6 @@
-diff -r a87a198b3630 make/docs/Makefile
---- a/make/docs/Makefile	Sun Jun 19 15:58:35 2011 +0100
-+++ b/make/docs/Makefile	Wed Jun 22 20:37:08 2011 +0100
+diff -r a2df16191b76 make/docs/Makefile
+--- a/make/docs/Makefile	Sun Jul 24 17:22:04 2011 +0100
++++ b/make/docs/Makefile	Sun Jul 24 21:44:30 2011 +0100
 @@ -207,12 +207,7 @@
                  -keywords				\
  		$(ADDITIONAL_JAVADOCFLAGS)
@@ -15,9 +15,9 @@
  
  # Draft used for non-fcs documents
  JDK_IS_FCS = false
-diff -r a87a198b3630 make/sun/security/jgss/wrapper/Makefile
---- a/make/sun/security/jgss/wrapper/Makefile	Sun Jun 19 15:58:35 2011 +0100
-+++ b/make/sun/security/jgss/wrapper/Makefile	Wed Jun 22 20:37:08 2011 +0100
+diff -r a2df16191b76 make/sun/security/jgss/wrapper/Makefile
+--- a/make/sun/security/jgss/wrapper/Makefile	Sun Jul 24 17:22:04 2011 +0100
++++ b/make/sun/security/jgss/wrapper/Makefile	Sun Jul 24 21:44:30 2011 +0100
 @@ -46,6 +46,10 @@
  FILES_export = \
      sun/security/jgss/wrapper/GSSLibStub.java
@@ -29,9 +29,9 @@
  #
  # Find native code
  #
-diff -r a87a198b3630 make/sun/security/pkcs11/Makefile
---- a/make/sun/security/pkcs11/Makefile	Sun Jun 19 15:58:35 2011 +0100
-+++ b/make/sun/security/pkcs11/Makefile	Wed Jun 22 20:37:08 2011 +0100
+diff -r a2df16191b76 make/sun/security/pkcs11/Makefile
+--- a/make/sun/security/pkcs11/Makefile	Sun Jul 24 17:22:04 2011 +0100
++++ b/make/sun/security/pkcs11/Makefile	Sun Jul 24 21:44:30 2011 +0100
 @@ -296,6 +296,10 @@
  	$(CP) $(PREBUILT_DIR)/pkcs11/sunpkcs11.jar $(JAR_DESTFILE)
  endif
@@ -43,9 +43,9 @@
  
  # =====================================================
  # Support routines.
-diff -r a87a198b3630 src/share/native/common/check_code.c
---- a/src/share/native/common/check_code.c	Sun Jun 19 15:58:35 2011 +0100
-+++ b/src/share/native/common/check_code.c	Wed Jun 22 20:37:08 2011 +0100
+diff -r a2df16191b76 src/share/native/common/check_code.c
+--- a/src/share/native/common/check_code.c	Sun Jul 24 17:22:04 2011 +0100
++++ b/src/share/native/common/check_code.c	Sun Jul 24 21:44:30 2011 +0100
 @@ -426,6 +426,7 @@
  static void pop_and_free(context_type *context);
  
@@ -227,61 +227,20 @@
      return result;
  }
  
-@@ -3709,6 +3734,11 @@
-                 result = 'L';
-                 break;
- 
-+            case '{':
-+            case 'V':
-+            case '}':
-+                continue;
-+
-             case JVM_SIGNATURE_ARRAY:
-                 array_depth++;
-                 continue;       /* only time we ever do the loop > 1 */
-@@ -4121,6 +4151,89 @@
+@@ -4121,6 +4146,107 @@
      return args_size;
  }
  
++static enum signature_state { top, parameters, tuple_prefix, tuple_tag, tuple };
++
 +static const char* erase_signature(context_type *context, const char* signature)
 +{
 +    char* erased;
 +    char* p;
 +    char* e;
-+
-+    int count = 0;
-+    int isParameter = 0;
-+
-+    for (p = signature; *p; p++)
-+    {
-+        switch (*p)
-+        {
-+          case 'V'   :
-+            if (!isParameter) {
-+              count++;
-+            }
-+            break;
-+
-+          case '{' :
-+          case '}' :
-+            break;
-+
-+          case '(' :
-+            isParameter++;
-+            count++;
-+            break;
-+
-+          case ')' :
-+            isParameter--;
-+            count++;
-+            break;
-+
-+          default:
-+            count++;
-+        }
-+    }
-+
-+    isParameter = 0;
++    enum signature_state state = top;
++    int tuple_level = 0;
++    int count = strlen(signature);
 +
 +    erased = (char*) malloc(sizeof(char) * (count + 1));
 +    if (erased == 0) {
@@ -290,38 +249,85 @@
 +
 +    for (p = signature, e = erased; *p; p++)
 +    {
-+        switch (*p)
++        switch (state)
 +        {
-+        case 'V'   :
-+          if (!isParameter)
-+          {
-+            *e = *p;
-+            e++;
-+          }
-+          break;
++            case top:
++                switch (*p)
++                {
++                    case '(':
++                        state = parameters;
++                        break;
++                }
++                *e = *p;
++                e++;
++                break;
 +
-+        case '}' :
-+        case '{' :
-+          break;
++            case parameters:
++                switch (*p)
++                {
++                    case '{':
++                        state = tuple_prefix;
++                        tuple_level++;
++                        break;
 +
-+        case '(' :
-+          isParameter++;
-+          *e = *p;
-+          e++;
-+          break;
++                    case ')':
++                        *e = *p;
++                        e++;
++                        state = top;
++                        break;
 +
-+        case ')' :
-+          isParameter--;
-+          *e = *p;
-+          e++;
-+          break;
++                    default:
++                        *e = *p;
++                        e++;
++                        break;
++                }
++                break;
 +
-+        default:
-+          *e = *p;
-+          e++;
++            case tuple_prefix:
++                switch (*p)
++                {
++                    case 'V':
++                        state = tuple;
++                        break;
++
++                    case 'L':
++                        state = tuple_tag;
++                        break;
++                }
++                break;
++
++            case tuple:
++                switch (*p)
++                {
++                   case '{':
++                        ++tuple_level;
++                        state = tuple_prefix;
++                        break;
++
++                    case '}':
++                        if (--tuple_level == 0) {
++                            state = parameters;
++                        }
++                        break;
++
++                    default:
++                        *e = *p;
++                        e++;
++                        break;
++                }
++                break;
++
++            case tuple_tag:
++                switch (*p)
++                {
++                    case ';':
++                        state = tuple;
++                        break;
++                }
++                break;
 +        }
 +    }
-+
++    
 +    return erased;
 +}
 +
diff -r e4194228baf7 tuple-tsig.patch
--- a/tuple-tsig.patch	Mon Jul 18 10:48:06 2011 -0700
+++ b/tuple-tsig.patch	Sun Jul 24 21:53:07 2011 +0100
@@ -2,9 +2,9 @@
 Summary: http://mail.openjdk.java.net/pipermail/mlvm-dev/2011-July/003639.html
 Contributed-by: mikeb2701
 
-diff -r b0ff3165cd05 make/linux/makefiles/gcc.make
---- a/make/linux/makefiles/gcc.make	Sat Jul 16 13:06:16 2011 +0100
-+++ b/make/linux/makefiles/gcc.make	Sun Jul 17 13:13:57 2011 +0100
+diff -r 0a0e7843f28f make/linux/makefiles/gcc.make
+--- a/make/linux/makefiles/gcc.make	Sun Jul 24 17:22:03 2011 +0100
++++ b/make/linux/makefiles/gcc.make	Sun Jul 24 21:42:57 2011 +0100
 @@ -225,6 +225,8 @@
  DEBUG_CFLAGS += -gstabs
  endif
@@ -14,9 +14,9 @@
  # DEBUG_BINARIES overrides everything, use full -g debug information
  ifeq ($(DEBUG_BINARIES), true)
    DEBUG_CFLAGS = -g
-diff -r b0ff3165cd05 src/share/vm/classfile/classFileParser.cpp
---- a/src/share/vm/classfile/classFileParser.cpp	Sat Jul 16 13:06:16 2011 +0100
-+++ b/src/share/vm/classfile/classFileParser.cpp	Sun Jul 17 13:13:57 2011 +0100
+diff -r 0a0e7843f28f src/share/vm/classfile/classFileParser.cpp
+--- a/src/share/vm/classfile/classFileParser.cpp	Sun Jul 24 17:22:03 2011 +0100
++++ b/src/share/vm/classfile/classFileParser.cpp	Sun Jul 24 21:42:57 2011 +0100
 @@ -1615,13 +1615,11 @@
      verify_legal_method_modifiers(flags, is_interface, name, CHECK_(nullHandle));
    }
@@ -228,9 +228,9 @@
 +}
 +
 +
-diff -r b0ff3165cd05 src/share/vm/classfile/classFileParser.hpp
---- a/src/share/vm/classfile/classFileParser.hpp	Sat Jul 16 13:06:16 2011 +0100
-+++ b/src/share/vm/classfile/classFileParser.hpp	Sun Jul 17 13:13:57 2011 +0100
+diff -r 0a0e7843f28f src/share/vm/classfile/classFileParser.hpp
+--- a/src/share/vm/classfile/classFileParser.hpp	Sun Jul 24 17:22:03 2011 +0100
++++ b/src/share/vm/classfile/classFileParser.hpp	Sun Jul 24 21:42:57 2011 +0100
 @@ -222,13 +222,14 @@
    void verify_legal_field_name(Symbol* name, TRAPS);
    void verify_legal_method_name(Symbol* name, TRAPS);
@@ -247,9 +247,9 @@
  
    bool is_anonymous() {
      assert(EnableInvokeDynamic || _host_klass.is_null(), "");
-diff -r b0ff3165cd05 src/share/vm/prims/jvm.h
---- a/src/share/vm/prims/jvm.h	Sat Jul 16 13:06:16 2011 +0100
-+++ b/src/share/vm/prims/jvm.h	Sun Jul 17 13:13:57 2011 +0100
+diff -r 0a0e7843f28f src/share/vm/prims/jvm.h
+--- a/src/share/vm/prims/jvm.h	Sun Jul 24 17:22:03 2011 +0100
++++ b/src/share/vm/prims/jvm.h	Sun Jul 24 21:42:57 2011 +0100
 @@ -1111,6 +1111,8 @@
  #define JVM_SIGNATURE_SHORT             'S'
  #define JVM_SIGNATURE_VOID              'V'
@@ -259,9 +259,9 @@
  
  /*
   * A function defined by the byte-code verifier and called by the VM.
-diff -r b0ff3165cd05 src/share/vm/runtime/globals.hpp
---- a/src/share/vm/runtime/globals.hpp	Sat Jul 16 13:06:16 2011 +0100
-+++ b/src/share/vm/runtime/globals.hpp	Sun Jul 17 13:13:57 2011 +0100
+diff -r 0a0e7843f28f src/share/vm/runtime/globals.hpp
+--- a/src/share/vm/runtime/globals.hpp	Sun Jul 24 17:22:03 2011 +0100
++++ b/src/share/vm/runtime/globals.hpp	Sun Jul 24 21:42:57 2011 +0100
 @@ -3791,6 +3791,9 @@
    product(uintx, StringTableSize, 1009,                                     \
            "Number of buckets in the interned String table")                 \
@@ -272,9 +272,9 @@
    product(bool, UseVMInterruptibleIO, false,                                \
            "(Unstable, Solaris-specific) Thread interrupt before or with "   \
            "EINTR for I/O operations results in OS_INTRPT. The default value"\
-diff -r b0ff3165cd05 src/share/vm/runtime/signature.cpp
---- a/src/share/vm/runtime/signature.cpp	Sat Jul 16 13:06:16 2011 +0100
-+++ b/src/share/vm/runtime/signature.cpp	Sun Jul 17 13:13:57 2011 +0100
+diff -r 0a0e7843f28f src/share/vm/runtime/signature.cpp
+--- a/src/share/vm/runtime/signature.cpp	Sun Jul 24 17:22:03 2011 +0100
++++ b/src/share/vm/runtime/signature.cpp	Sun Jul 24 21:42:57 2011 +0100
 @@ -40,7 +40,7 @@
  // Signature  = "(" {Parameter} ")" ReturnType.
  // Parameter  = FieldType.
@@ -345,7 +345,7 @@
      default : ShouldNotReachHere();
    }
  }
-@@ -445,7 +492,30 @@
+@@ -445,7 +492,41 @@
            return -1;
          }
        }
@@ -358,8 +358,19 @@
 +      }
 +
 +      ++index;
-+      if (index < limit && type[index] == 'V') {
-+        for (index = index + 1; index < limit;) {
++      if (index < limit) {
++        ssize_t offset = -1;
++        if (type[index] == 'L') {
++          offset = is_valid_type(&type[index], limit - index);
++        } else if (type[index] == 'V') {
++          offset = 1;
++        }
++
++        if (-1 == offset) {
++          return -1;
++        }
++
++        for (index = index + offset; index < limit;) {
 +          if (type[index] == '}') {
 +            return index + 1;
 +          }
@@ -377,9 +388,9 @@
      default: ; // fall through
    }
    return -1;
-diff -r b0ff3165cd05 test/runtime/6804523/ClassTransformer.java
+diff -r 0a0e7843f28f test/runtime/6804523/ClassTransformer.java
 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/test/runtime/6804523/ClassTransformer.java	Sun Jul 17 13:13:57 2011 +0100
++++ b/test/runtime/6804523/ClassTransformer.java	Sun Jul 24 21:42:57 2011 +0100
 @@ -0,0 +1,110 @@
 +import static java.lang.System.arraycopy;
 +
@@ -491,9 +502,9 @@
 +        transformer.transform("(JJ)J", "({Ljava/math/Rational;JJ})J");
 +    }
 +}
-diff -r b0ff3165cd05 test/runtime/6804523/SimpleBoyerMoore.java
+diff -r 0a0e7843f28f test/runtime/6804523/SimpleBoyerMoore.java
 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/test/runtime/6804523/SimpleBoyerMoore.java	Sun Jul 17 13:13:57 2011 +0100
++++ b/test/runtime/6804523/SimpleBoyerMoore.java	Sun Jul 24 21:42:57 2011 +0100
 @@ -0,0 +1,114 @@
 +
 +
@@ -610,17 +621,17 @@
 +    }
 +}
 \ No newline at end of file
-diff -r b0ff3165cd05 test/runtime/6804523/Test6804523.sh
+diff -r 0a0e7843f28f test/runtime/6804523/Test6804523.sh
 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/test/runtime/6804523/Test6804523.sh	Sun Jul 17 13:13:57 2011 +0100
-@@ -0,0 +1,19 @@
++++ b/test/runtime/6804523/Test6804523.sh	Sun Jul 24 21:42:57 2011 +0100
+@@ -0,0 +1,21 @@
 +#!/bin/bash
 +
 +LOCATION=`dirname $0`
 +
 +if [ "$TEST_JAVA_HOME" == "" ]
 +then
-+	TEST_JAVA_HOME=$LOCATION/../../../../build/linux-i586-debug/bin
++	TEST_JAVA_HOME=$LOCATION/../../../../build/linux-amd64-debug/bin
 +fi
 +
 +rm -f $LOCATION/*.class
@@ -632,10 +643,12 @@
 +$TEST_JAVA_HOME/java -cp $LOCATION ClassTransformer $LOCATION/TupleSignature.class $LOCATION/TestTupleSignature.class
 +
 +echo "Running..."
-+$TEST_JAVA_HOME/java -Xverify:none -XX:+TupleSignatures TestTupleSignature
-diff -r b0ff3165cd05 test/runtime/6804523/TestTupleSignature.java
++$TEST_JAVA_HOME/java -XX:+TupleSignatures TestTupleSignature
++#echo "run -XX:+TupleSignatures TestTupleSignature"
++#gdb $TEST_JAVA_HOME/java
+diff -r 0a0e7843f28f test/runtime/6804523/TestTupleSignature.java
 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/test/runtime/6804523/TestTupleSignature.java	Sun Jul 17 13:13:57 2011 +0100
++++ b/test/runtime/6804523/TestTupleSignature.java	Sun Jul 24 21:42:57 2011 +0100
 @@ -0,0 +1,24 @@
 +public class TestTupleSignature {
 +	
@@ -661,9 +674,9 @@
 +	}
 +	
 +}
-diff -r b0ff3165cd05 test/runtime/6804523/TupleSignature.java
+diff -r 0a0e7843f28f test/runtime/6804523/TupleSignature.java
 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/test/runtime/6804523/TupleSignature.java	Sun Jul 17 13:13:57 2011 +0100
++++ b/test/runtime/6804523/TupleSignature.java	Sun Jul 24 21:42:57 2011 +0100
 @@ -0,0 +1,74 @@
 +public class TupleSignature {
 +	
@@ -739,9 +752,9 @@
 +		return i + j;
 +	}
 +}
-diff -r b9a96402be9a tuple-tsig.patch
+diff -r 0a0e7843f28f tuple-tsig.patch
 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/tuple-tsig.patch	Sun Jul 17 13:16:27 2011 +0100
++++ b/tuple-tsig.patch	Sun Jul 24 21:42:57 2011 +0100
 @@ -0,0 +1,737 @@
 +diff -r b0ff3165cd05 make/linux/makefiles/gcc.make
 +--- a/make/linux/makefiles/gcc.make	Sat Jul 16 13:06:16 2011 +0100
_______________________________________________
mlvm-dev mailing list
mlvm-dev@openjdk.java.net
http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev

Reply via email to