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