Mercurial > hg > truffle
changeset 16744:3507ad1b0c44
Clone value arrays in CompositeValue.clone().
author | Josef Eisl <josef.eisl@jku.at> |
---|---|
date | Mon, 11 Aug 2014 14:29:56 +0200 |
parents | 3bfeb592ed76 |
children | ef3c7944261b b60c111b43f9 |
files | graal/com.oracle.graal.lir/src/com/oracle/graal/lir/CompositeValue.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/CompositeValueClass.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/LIRIntrospection.java |
diffstat | 3 files changed, 19 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/CompositeValue.java Mon Aug 11 13:58:08 2014 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/CompositeValue.java Mon Aug 11 14:29:56 2014 +0200 @@ -89,11 +89,17 @@ @Override public final CompositeValue clone() { + CompositeValue compositeValue = null; try { - return (CompositeValue) super.clone(); + compositeValue = (CompositeValue) super.clone(); } catch (CloneNotSupportedException e) { throw new GraalInternalError(e); } + + // copy value arrays + getValueClass().copyValueArrays(compositeValue); + + return compositeValue; } }
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/CompositeValueClass.java Mon Aug 11 13:58:08 2014 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/CompositeValueClass.java Mon Aug 11 14:29:56 2014 +0200 @@ -172,4 +172,12 @@ EnumSet<OperandFlag> getFlags(ValuePosition pos) { return componentFlags[pos.getIndex()]; } + + void copyValueArrays(CompositeValue compositeValue) { + for (int i = directComponentCount; i < componentOffsets.length; i++) { + Value[] valueArray = getValueArray(compositeValue, componentOffsets[i]); + Value[] newValueArray = Arrays.copyOf(valueArray, valueArray.length); + setValueArray(compositeValue, componentOffsets[i], newValueArray); + } + } }
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/LIRIntrospection.java Mon Aug 11 13:58:08 2014 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/LIRIntrospection.java Mon Aug 11 14:29:56 2014 +0200 @@ -260,6 +260,10 @@ return (Value[]) unsafe.getObject(obj, offset); } + protected static void setValueArray(Object obj, long offset, Value[] valueArray) { + unsafe.putObject(obj, offset, valueArray); + } + protected void appendValues(StringBuilder result, Object obj, String start, String end, String startMultiple, String endMultiple, String[] prefix, long[]... moffsets) { int total = 0; for (long[] offsets : moffsets) {