# HG changeset patch # User Doug Simon # Date 1353269455 -3600 # Node ID 9c71ad0a0652974d99972b0d5936268791f83ba5 # Parent abbe4faaf0c1cb3a53bc360ed9f81620fbf4bc7b extra assertion checking when initializing the values of a VirtualObject diff -r abbe4faaf0c1 -r 9c71ad0a0652 graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/VirtualObject.java --- a/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/VirtualObject.java Fri Nov 16 12:39:26 2012 +0100 +++ b/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/VirtualObject.java Sun Nov 18 21:10:55 2012 +0100 @@ -92,7 +92,7 @@ /** * Returns the type of the object whose allocation was removed during compilation. This can be either an instance of an array type. */ - public JavaType getType() { + public ResolvedJavaType getType() { return type; } @@ -110,12 +110,34 @@ return id; } + private static boolean checkValues(ResolvedJavaType type, Value[] values) { + if (values != null) { + if (!type.isArrayClass()) { + ResolvedJavaField[] fields = type.getInstanceFields(true); + assert fields.length == values.length : type + ": fields=" + Arrays.toString(fields) + ", field values=" + Arrays.toString(values); + for (int i = 0; i < values.length; i++) { + ResolvedJavaField field = fields[i]; + Kind valKind = values[i].getKind().getStackKind(); + assert valKind == field.getKind().getStackKind() : field + ": " + valKind + " != " + field.getKind().getStackKind(); + } + } else { + Kind componentKind = type.getComponentType().getKind().getStackKind(); + for (int i = 0; i < values.length; i++) { + assert values[i].getKind().getStackKind() == componentKind : values[i].getKind() + " != " + componentKind; + } + } + + } + return true; + } + /** * Overwrites the current set of values with a new one. * * @param values an array containing all the values to be stored into the object when it is recreated. */ public void setValues(Value[] values) { + assert checkValues(type, values); this.values = values; } diff -r abbe4faaf0c1 -r 9c71ad0a0652 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/DebugInfoBuilder.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/DebugInfoBuilder.java Fri Nov 16 12:39:26 2012 +0100 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/DebugInfoBuilder.java Sun Nov 18 21:10:55 2012 +0100 @@ -149,13 +149,13 @@ return toValue(((MaterializedObjectState) state).materializedValue()); } else { assert obj.entryCount() == 0 || state instanceof VirtualObjectState || obj instanceof BoxedVirtualObjectNode; - VirtualObject ciObj = virtualObjects.get(value); - if (ciObj == null) { - ciObj = VirtualObject.get(obj.type(), null, virtualObjects.size()); - virtualObjects.put(obj, ciObj); + VirtualObject vobject = virtualObjects.get(value); + if (vobject == null) { + vobject = VirtualObject.get(obj.type(), null, virtualObjects.size()); + virtualObjects.put(obj, vobject); } Debug.metric("StateVirtualObjects").increment(); - return ciObj; + return vobject; } } else if (value instanceof ConstantNode) { Debug.metric("StateConstants").increment();