# HG changeset patch # User Lukas Stadler # Date 1370605440 -7200 # Node ID de3653e687385a1297e2eef4fe19eab9479fd0cd # Parent 8448a4e15f950e68456e9d3019bad46fa1df6fea proper assertions in VirtualizerToolImpl.setVirtualEntry diff -r 8448a4e15f95 -r de3653e68738 graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/VirtualizerToolImpl.java --- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/VirtualizerToolImpl.java Fri Jun 07 13:36:44 2013 +0200 +++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/VirtualizerToolImpl.java Fri Jun 07 13:44:00 2013 +0200 @@ -87,16 +87,24 @@ ObjectState obj = (ObjectState) objectState; assert obj != null && obj.isVirtual() : "not virtual: " + obj; ObjectState valueState = state.getObjectState(value); + ValueNode newValue = value; if (valueState == null) { - obj.setEntry(index, getReplacedValue(value)); + newValue = getReplacedValue(value); + assert obj.getEntry(index) == null || obj.getEntry(index).kind() == newValue.kind() || (isObjectEntry(obj.getEntry(index)) && isObjectEntry(newValue)); } else { - ValueNode newValue = value; if (valueState.getState() != EscapeState.Virtual) { newValue = valueState.getMaterializedValue(); + assert newValue.kind() == Kind.Object; + } else { + newValue = valueState.getVirtualObject(); } - assert obj.getEntry(index) == null || obj.getEntry(index).kind() == newValue.kind(); - obj.setEntry(index, newValue); + assert obj.getEntry(index) == null || isObjectEntry(obj.getEntry(index)); } + obj.setEntry(index, newValue); + } + + private static boolean isObjectEntry(ValueNode value) { + return value.kind() == Kind.Object || value instanceof VirtualObjectNode; } @Override