changeset 22176:cd7ee4a382e4

Remove obsolete unsafeFieldOffsetProvider from NodeFieldAccessor
author Andreas Woess <andreas.woess@oracle.com>
date Fri, 18 Sep 2015 17:07:55 +0200
parents 5d2a12c9aae1
children 396c1d17a11a
files truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/NodeFieldAccessor.java
diffstat 1 files changed, 21 insertions(+), 39 deletions(-) [+]
line wrap: on
line diff
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/NodeFieldAccessor.java	Fri Sep 18 16:37:04 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/NodeFieldAccessor.java	Fri Sep 18 17:07:55 2015 +0200
@@ -24,11 +24,12 @@
  */
 package com.oracle.truffle.api.nodes;
 
+import java.lang.reflect.Field;
+
+import sun.misc.Unsafe;
+
 import com.oracle.truffle.api.nodes.Node.Child;
 import com.oracle.truffle.api.nodes.Node.Children;
-import com.oracle.truffle.api.nodes.NodeUtil.FieldOffsetProvider;
-import java.lang.reflect.Field;
-import sun.misc.Unsafe;
 
 /**
  * Information about a field in a {@link Node} class.
@@ -92,41 +93,6 @@
 
     public abstract Object loadValue(Node node);
 
-    private static final Unsafe unsafe = getUnsafe();
-
-    private static Unsafe getUnsafe() {
-        try {
-            return Unsafe.getUnsafe();
-        } catch (SecurityException e) {
-        }
-        try {
-            Field theUnsafeInstance = Unsafe.class.getDeclaredField("theUnsafe");
-            theUnsafeInstance.setAccessible(true);
-            return (Unsafe) theUnsafeInstance.get(Unsafe.class);
-        } catch (Exception e) {
-            throw new RuntimeException("exception while trying to get Unsafe.theUnsafe via reflection:", e);
-        }
-    }
-
-    private static final FieldOffsetProvider unsafeFieldOffsetProvider = new FieldOffsetProvider() {
-
-        @Override
-        public long objectFieldOffset(Field field) {
-            return unsafe.objectFieldOffset(field);
-        }
-
-        @Override
-        public int getTypeSize(Class<?> clazz) {
-            if (!clazz.isPrimitive()) {
-                return Unsafe.ARRAY_OBJECT_INDEX_SCALE;
-            } else if (clazz == int.class) {
-                return Unsafe.ARRAY_INT_INDEX_SCALE;
-            } else {
-                throw new UnsupportedOperationException("unsupported field type: " + clazz);
-            }
-        }
-    };
-
     public abstract static class AbstractUnsafeNodeFieldAccessor extends NodeFieldAccessor {
 
         protected AbstractUnsafeNodeFieldAccessor(NodeFieldKind kind, Class<?> declaringClass, String name, Class<?> type) {
@@ -175,6 +141,22 @@
                 return unsafe.getObject(node, getOffset());
             }
         }
+
+        private static final Unsafe unsafe = getUnsafe();
+
+        private static Unsafe getUnsafe() {
+            try {
+                return Unsafe.getUnsafe();
+            } catch (SecurityException e) {
+            }
+            try {
+                Field theUnsafeInstance = Unsafe.class.getDeclaredField("theUnsafe");
+                theUnsafeInstance.setAccessible(true);
+                return (Unsafe) theUnsafeInstance.get(Unsafe.class);
+            } catch (Exception e) {
+                throw new RuntimeException("exception while trying to get Unsafe.theUnsafe via reflection:", e);
+            }
+        }
     }
 
     private static final class UnsafeNodeField extends AbstractUnsafeNodeFieldAccessor {
@@ -182,7 +164,7 @@
 
         protected UnsafeNodeField(NodeFieldKind kind, Field field) {
             super(kind, field.getDeclaringClass(), field.getName(), field.getType());
-            this.offset = unsafeFieldOffsetProvider.objectFieldOffset(field);
+            this.offset = AbstractUnsafeNodeFieldAccessor.unsafe.objectFieldOffset(field);
         }
 
         @Override