changeset 17133:1a02fc45776f

Allow customization by subclasses
author Christian Wimmer <christian.wimmer@oracle.com>
date Tue, 16 Sep 2014 18:52:01 -0700
parents 71e56d7bc888
children 63b359cf25ad
files graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewArrayNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewInstanceNode.java
diffstat 2 files changed, 11 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewArrayNode.java	Tue Sep 16 18:49:10 2014 -0700
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewArrayNode.java	Tue Sep 16 18:52:01 2014 -0700
@@ -81,13 +81,17 @@
                 for (int i = 0; i < constantLength; i++) {
                     state[i] = defaultForKind;
                 }
-                VirtualObjectNode virtualObject = VirtualArrayNode.create(elementType(), constantLength);
+                VirtualObjectNode virtualObject = createVirtualArrayNode(constantLength);
                 tool.createVirtualObject(virtualObject, state, Collections.<MonitorIdNode> emptyList());
                 tool.replaceWithVirtual(virtualObject);
             }
         }
     }
 
+    protected VirtualArrayNode createVirtualArrayNode(int constantLength) {
+        return VirtualArrayNode.create(elementType(), constantLength);
+    }
+
     /* Factored out in a separate method so that subclasses can override it. */
     protected ConstantNode defaultElementValue() {
         return ConstantNode.defaultForKind(elementType().getKind(), graph());
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewInstanceNode.java	Tue Sep 16 18:49:10 2014 -0700
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewInstanceNode.java	Tue Sep 16 18:52:01 2014 -0700
@@ -51,7 +51,7 @@
         return USE_GENERATED_NODES ? new NewInstanceNodeGen(type, fillContents) : new NewInstanceNode(type, fillContents);
     }
 
-    NewInstanceNode(ResolvedJavaType type, boolean fillContents) {
+    protected NewInstanceNode(ResolvedJavaType type, boolean fillContents) {
         super(StampFactory.exactNonNull(type), fillContents);
         assert !type.isArray() && !type.isInterface() && !type.isPrimitive();
         this.instanceClass = type;
@@ -73,7 +73,7 @@
          * they're excluded from escape analysis.
          */
         if (!tool.getMetaAccessProvider().lookupJavaType(Reference.class).isAssignableFrom(instanceClass)) {
-            VirtualInstanceNode virtualObject = VirtualInstanceNode.create(instanceClass(), true);
+            VirtualInstanceNode virtualObject = createVirtualInstanceNode(true);
             ResolvedJavaField[] fields = virtualObject.getFields();
             ValueNode[] state = new ValueNode[fields.length];
             for (int i = 0; i < state.length; i++) {
@@ -84,6 +84,10 @@
         }
     }
 
+    protected VirtualInstanceNode createVirtualInstanceNode(boolean hasIdentity) {
+        return VirtualInstanceNode.create(instanceClass(), hasIdentity);
+    }
+
     /* Factored out in a separate method so that subclasses can override it. */
     protected ConstantNode defaultFieldValue(ResolvedJavaField field) {
         return ConstantNode.defaultForKind(field.getType().getKind(), graph());