< prev index next >

src/java.base/share/classes/jdk/internal/org/objectweb/asm/Type.java

Print this page

        

@@ -449,11 +449,11 @@
             char car = desc.charAt(c++);
             if (car == ')') {
                 car = desc.charAt(c);
                 return n << 2
                         | (car == 'V' ? 0 : (car == 'D' || car == 'J' ? 2 : 1));
-            } else if (car == 'L') {
+            } else if (car == 'L' || car == 'Q') {
                 while (desc.charAt(c++) != ';') {
                 }
                 n += 1;
             } else if (car == '[') {
                 while ((car = desc.charAt(c)) == '[') {

@@ -505,18 +505,19 @@
         case '[':
             len = 1;
             while (buf[off + len] == '[') {
                 ++len;
             }
-            if (buf[off + len] == 'L') {
+            if (buf[off + len] == 'L' || buf[off + len] == 'Q') {
                 ++len;
                 while (buf[off + len] != ';') {
                     ++len;
                 }
             }
             return new Type(ARRAY, buf, off, len + 1);
         case 'L':
+        case 'Q':
             len = 1;
             while (buf[off + len] != ';') {
                 ++len;
             }
             return new Type(OBJECT, buf, off + 1, len - 1);

@@ -815,12 +816,19 @@
                 return;
             } else if (d.isArray()) {
                 buf.append('[');
                 d = d.getComponentType();
             } else {
-                buf.append('L');
                 String name = d.getName();
+                // Workarounds nasgen build that depends on ASM but compiled with
+                // the bootstrap JDK.  Can't use Class::isValue and Class::asValueType
+                int index = d.getTypeName().lastIndexOf("/val");
+                if (index > 0) {
+                    buf.append('Q');
+                } else {
+                    buf.append('L');
+                }
                 int len = name.length();
                 for (int i = 0; i < len; ++i) {
                     char car = name.charAt(i);
                     buf.append(car == '.' ? '/' : car);
                 }
< prev index next >