Mercurial > hg > truffle
changeset 16770:8341b061e496
Clone CompositeValue in ValuePosition.set().
author | Josef Eisl <josef.eisl@jku.at> |
---|---|
date | Mon, 11 Aug 2014 18:07:31 +0200 |
parents | bcbc6b6a341f |
children | db2ac421649a |
files | graal/com.oracle.graal.lir/src/com/oracle/graal/lir/CompositeValueClass.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ValuePosition.java |
diffstat | 2 files changed, 6 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/CompositeValueClass.java Mon Aug 11 17:40:27 2014 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/CompositeValueClass.java Mon Aug 11 18:07:31 2014 +0200 @@ -165,8 +165,10 @@ return getValueForPosition(obj, componentOffsets, directComponentCount, pos); } - void setValue(CompositeValue obj, ValuePosition pos, Value value) { - setValueForPosition(obj, componentOffsets, directComponentCount, pos, value); + CompositeValue createUpdatedValue(CompositeValue compValue, ValuePosition pos, Value value) { + CompositeValue newCompValue = compValue.clone(); + setValueForPosition(newCompValue, componentOffsets, directComponentCount, pos, value); + return newCompValue; } EnumSet<OperandFlag> getFlags(ValuePosition pos) {
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ValuePosition.java Mon Aug 11 17:40:27 2014 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ValuePosition.java Mon Aug 11 18:07:31 2014 +0200 @@ -70,7 +70,8 @@ public void set(LIRInstruction inst, Value value) { if (isCompositePosition()) { CompositeValue compValue = (CompositeValue) outerPosition.get(inst); - compValue.getValueClass().setValue(compValue, this, value); + CompositeValue newCompValue = compValue.getValueClass().createUpdatedValue(compValue, this, value); + outerPosition.set(inst, newCompValue); } else { inst.getLIRInstructionClass().setValue(inst, this, value); }