# HG changeset patch # User Christian Wimmer # Date 1410918721 25200 # Node ID 1a02fc45776f5a0fa78dba82031f9c967ae69b8a # Parent 71e56d7bc8882a4ecc56c3e502bfd1a950131501 Allow customization by subclasses diff -r 71e56d7bc888 -r 1a02fc45776f graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewArrayNode.java --- 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. 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()); diff -r 71e56d7bc888 -r 1a02fc45776f graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewInstanceNode.java --- 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());