diff graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewInstanceNode.java @ 7006:51b6e594b0cd

refactor EscapeAnalyzeable (remove EscapeOp)
author Lukas Stadler <lukas.stadler@jku.at>
date Tue, 20 Nov 2012 13:25:28 +0100
parents 49cd16dfb10c
children 94596bbec6f0
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewInstanceNode.java	Fri Nov 16 17:21:10 2012 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewInstanceNode.java	Tue Nov 20 13:25:28 2012 +0100
@@ -83,7 +83,7 @@
         tool.getRuntime().lower(this, tool);
     }
 
-    private void fillEscapeFields(ResolvedJavaType type, List<ResolvedJavaField> escapeFields) {
+    private static void fillEscapeFields(ResolvedJavaType type, List<ResolvedJavaField> escapeFields) {
         if (type != null) {
             fillEscapeFields(type.getSuperclass(), escapeFields);
             for (ResolvedJavaField field : type.getDeclaredFields()) {
@@ -92,34 +92,24 @@
         }
     }
 
+    public static ResolvedJavaField[] getEscapeFields(ResolvedJavaType type) {
+        List<ResolvedJavaField> escapeFields = new ArrayList<>();
+        fillEscapeFields(type, escapeFields);
+        ResolvedJavaField[] fields = escapeFields.toArray(new ResolvedJavaField[escapeFields.size()]);
+        return fields;
+    }
+
     @Override
-    public EscapeOp getEscapeOp() {
+    public ObjectDesc[] getAllocations(long nextVirtualId) {
         if (instanceClass != null) {
             assert !instanceClass().isArrayClass();
-            List<ResolvedJavaField> escapeFields = new ArrayList<>();
-            fillEscapeFields(instanceClass(), escapeFields);
-            final ResolvedJavaField[] fields = escapeFields.toArray(new ResolvedJavaField[escapeFields.size()]);
-            return new EscapeOp() {
-
-                @Override
-                public ValueNode[] fieldState() {
-                    ValueNode[] state = new ValueNode[fields.length];
-                    for (int i = 0; i < state.length; i++) {
-                        state[i] = ConstantNode.defaultForKind(fields[i].getType().getKind(), graph());
-                    }
-                    return state;
-                }
-
-                @Override
-                public VirtualObjectNode virtualObject(long virtualId) {
-                    return new VirtualInstanceNode(virtualId, instanceClass(), fields);
-                }
-
-                @Override
-                public int lockCount() {
-                    return 0;
-                }
-            };
+            ResolvedJavaField[] fields = getEscapeFields(instanceClass());
+            ValueNode[] state = new ValueNode[fields.length];
+            for (int i = 0; i < state.length; i++) {
+                state[i] = ConstantNode.defaultForKind(fields[i].getType().getKind(), graph());
+            }
+            VirtualObjectNode virtualObject = new VirtualInstanceNode(nextVirtualId, instanceClass(), fields);
+            return new ObjectDesc[]{new ObjectDesc(virtualObject, state, 0)};
         }
         return null;
     }