/** @since 0.17 or earlier */ @Override public final Assumption getLeafAssumption() { Assumption assumption = leafAssumption; if (assumption != null) { return assumption; } else { CompilerDirectives.transferToInterpreterAndInvalidate(); Assumption prev; Assumption next; do { prev = LEAF_ASSUMPTION_UPDATER.get(this); if (prev != null) { return prev; } else { boolean isLeafShape = transitionMap == null; next = isLeafShape ? createLeafAssumption() : NeverValidAssumption.INSTANCE; } } while (!LEAF_ASSUMPTION_UPDATER.compareAndSet(this, prev, next)); return next; } }
/** @since 0.17 or earlier */ @Override public final Assumption getLeafAssumption() { Assumption assumption = leafAssumption; if (assumption != null) { return assumption; } else { CompilerDirectives.transferToInterpreterAndInvalidate(); Assumption prev; Assumption next; do { prev = LEAF_ASSUMPTION_UPDATER.get(this); if (prev != null) { return prev; } else { boolean isLeafShape = transitionMap == null; next = isLeafShape ? createLeafAssumption() : NeverValidAssumption.INSTANCE; } } while (!LEAF_ASSUMPTION_UPDATER.compareAndSet(this, prev, next)); return next; } }
@Override public final Assumption getLeafAssumption() { if (leafAssumption == null) { CompilerDirectives.transferToInterpreterAndInvalidate(); synchronized (getMutex()) { if (leafAssumption == null) { leafAssumption = isLeafHelper() ? createLeafAssumption() : NeverValidAssumption.INSTANCE; } } } return leafAssumption; }