Mercurial > hg > truffle
comparison graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/VirtualizerToolImpl.java @ 9942:de3653e68738
proper assertions in VirtualizerToolImpl.setVirtualEntry
author | Lukas Stadler <lukas.stadler@jku.at> |
---|---|
date | Fri, 07 Jun 2013 13:44:00 +0200 |
parents | 063a712fe8d8 |
children | eef9281ec13b |
comparison
equal
deleted
inserted
replaced
9941:8448a4e15f95 | 9942:de3653e68738 |
---|---|
85 @Override | 85 @Override |
86 public void setVirtualEntry(State objectState, int index, ValueNode value) { | 86 public void setVirtualEntry(State objectState, int index, ValueNode value) { |
87 ObjectState obj = (ObjectState) objectState; | 87 ObjectState obj = (ObjectState) objectState; |
88 assert obj != null && obj.isVirtual() : "not virtual: " + obj; | 88 assert obj != null && obj.isVirtual() : "not virtual: " + obj; |
89 ObjectState valueState = state.getObjectState(value); | 89 ObjectState valueState = state.getObjectState(value); |
90 ValueNode newValue = value; | |
90 if (valueState == null) { | 91 if (valueState == null) { |
91 obj.setEntry(index, getReplacedValue(value)); | 92 newValue = getReplacedValue(value); |
92 } else { | 93 assert obj.getEntry(index) == null || obj.getEntry(index).kind() == newValue.kind() || (isObjectEntry(obj.getEntry(index)) && isObjectEntry(newValue)); |
93 ValueNode newValue = value; | 94 } else { |
94 if (valueState.getState() != EscapeState.Virtual) { | 95 if (valueState.getState() != EscapeState.Virtual) { |
95 newValue = valueState.getMaterializedValue(); | 96 newValue = valueState.getMaterializedValue(); |
97 assert newValue.kind() == Kind.Object; | |
98 } else { | |
99 newValue = valueState.getVirtualObject(); | |
96 } | 100 } |
97 assert obj.getEntry(index) == null || obj.getEntry(index).kind() == newValue.kind(); | 101 assert obj.getEntry(index) == null || isObjectEntry(obj.getEntry(index)); |
98 obj.setEntry(index, newValue); | 102 } |
99 } | 103 obj.setEntry(index, newValue); |
104 } | |
105 | |
106 private static boolean isObjectEntry(ValueNode value) { | |
107 return value.kind() == Kind.Object || value instanceof VirtualObjectNode; | |
100 } | 108 } |
101 | 109 |
102 @Override | 110 @Override |
103 public ValueNode getMaterializedValue(ValueNode value) { | 111 public ValueNode getMaterializedValue(ValueNode value) { |
104 ObjectState obj = state.getObjectState(value); | 112 ObjectState obj = state.getObjectState(value); |