Mercurial > hg > truffle
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());