# HG changeset patch # User Andreas Woess # Date 1439816314 -7200 # Node ID 5d9e5f866821832c2bdf40a8aab7bf7626ef7013 # Parent 93bfc9602271e821d8bca9340428ec166933a46c add Shape.Allocator#copy() diff -r 93bfc9602271 -r 5d9e5f866821 truffle/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/Shape.java --- a/truffle/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/Shape.java Mon Aug 17 15:49:18 2015 +0200 +++ b/truffle/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/Shape.java Mon Aug 17 14:58:34 2015 +0200 @@ -280,6 +280,11 @@ public abstract Location declaredLocation(Object value); public abstract Allocator addLocation(Location location); + + /** + * Creates an copy of this allocator. + */ + public abstract Allocator copy(); } /** diff -r 93bfc9602271 -r 5d9e5f866821 truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/ShapeImpl.java --- a/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/ShapeImpl.java Mon Aug 17 15:49:18 2015 +0200 +++ b/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/ShapeImpl.java Mon Aug 17 14:58:34 2015 +0200 @@ -910,7 +910,7 @@ return null; } - public abstract static class BaseAllocator extends Allocator implements LocationVisitor { + public abstract static class BaseAllocator extends Allocator implements LocationVisitor, Cloneable { protected final LayoutImpl layout; protected int objectArraySize; protected int objectFieldSize; @@ -1046,6 +1046,20 @@ public void visitPrimitiveField(int index, int count) { primitiveFieldSize = Math.max(primitiveFieldSize, index + count); } + + @Override + public final BaseAllocator copy() { + return clone(); + } + + @Override + protected final BaseAllocator clone() { + try { + return (BaseAllocator) super.clone(); + } catch (CloneNotSupportedException e) { + throw new AssertionError(e); + } + } } private static void debugRegisterShape(ShapeImpl newShape) {