< prev index next >

jdk/src/java.base/share/classes/jdk/experimental/value/ValueType.java

Print this page

        

@@ -66,10 +66,11 @@
             }
         },
         NEWARRAY,
         VALOAD,
         VASTORE,
+        ARRAYLENGTH,
         MULTINEWARRAY() {
             @Override
             ValueHandleKey key(Object dims) {
                return new ValueHandleKey(this, dims);
             }

@@ -341,10 +342,24 @@
             handleMap.put(key, result);
         }
         return result;
     }
 
+    public MethodHandle arrayLength() {
+        Class<?> arrayValueClass = arrayValueClass();
+        ValueHandleKey key = ValueHandleKind.ARRAYLENGTH.key();
+        MethodHandle result = handleMap.get(key);
+        if (result == null) {
+            result = MethodHandleBuilder.loadCode(boxLookup, mhName("arrayLength"), MethodType.methodType(int.class, arrayValueClass),
+                    C -> {
+                        C.load(0).arraylength().ireturn();
+                    });
+            handleMap.put(key, result);
+        }
+        return result;
+    }
+
     public MethodHandle arraySetter() {
         Class<?> arrayValueClass = arrayValueClass();
         ValueHandleKey key = ValueHandleKind.VASTORE.key();
         MethodHandle result = handleMap.get(key);
         if (result == null) {
< prev index next >