Mercurial > hg > truffle
diff graal/com.oracle.truffle.object/src/com/oracle/truffle/object/Transition.java @ 21901:19340125f182
Truffle: model property replace as direct transition
author | Andreas Woess <andreas.woess@oracle.com> |
---|---|
date | Wed, 10 Jun 2015 20:06:13 +0200 |
parents | ce46f909c176 |
children |
line wrap: on
line diff
--- a/graal/com.oracle.truffle.object/src/com/oracle/truffle/object/Transition.java Wed Jun 10 20:05:52 2015 +0200 +++ b/graal/com.oracle.truffle.object/src/com/oracle/truffle/object/Transition.java Wed Jun 10 20:06:13 2015 +0200 @@ -133,10 +133,10 @@ } } - public static final class ReplacePropertyTransition extends PropertyTransition { + public abstract static class AbstractReplacePropertyTransition extends PropertyTransition { private final Property after; - public ReplacePropertyTransition(Property before, Property after) { + public AbstractReplacePropertyTransition(Property before, Property after) { super(before); this.after = after; } @@ -150,11 +150,41 @@ } @Override + public boolean equals(Object obj) { + return super.equals(obj) && this.after.equals(((AbstractReplacePropertyTransition) obj).after); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + after.hashCode(); + return result; + } + } + + public static final class IndirectReplacePropertyTransition extends AbstractReplacePropertyTransition { + public IndirectReplacePropertyTransition(Property before, Property after) { + super(before, after); + } + + @Override public boolean isDirect() { return false; } } + public static final class DirectReplacePropertyTransition extends AbstractReplacePropertyTransition { + public DirectReplacePropertyTransition(Property before, Property after) { + super(before, after); + } + + @Override + public boolean isDirect() { + return true; + } + } + public static final class ReservePrimitiveArrayTransition extends Transition { public ReservePrimitiveArrayTransition() { }