All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.oracle.graal.python.nodes.attributes.ReadAttributeFromDynamicObjectNodeGen Maven / Gradle / Ivy

There is a newer version: 24.1.1
Show newest version
// CheckStyle: start generated
package com.oracle.graal.python.nodes.attributes;

import com.oracle.graal.python.nodes.util.CastToTruffleStringNode;
import com.oracle.graal.python.nodes.util.CastToTruffleStringNodeGen;
import com.oracle.graal.python.runtime.PythonOptions;
import com.oracle.truffle.api.Assumption;
import com.oracle.truffle.api.CompilerDirectives;
import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
import com.oracle.truffle.api.dsl.DSLSupport;
import com.oracle.truffle.api.dsl.GeneratedBy;
import com.oracle.truffle.api.dsl.NeverDefault;
import com.oracle.truffle.api.dsl.UnsupportedSpecializationException;
import com.oracle.truffle.api.dsl.DSLSupport.SpecializationDataNode;
import com.oracle.truffle.api.dsl.InlineSupport.InlineTarget;
import com.oracle.truffle.api.dsl.InlineSupport.ReferenceField;
import com.oracle.truffle.api.dsl.InlineSupport.StateField;
import com.oracle.truffle.api.dsl.InlineSupport.UnsafeAccessedField;
import com.oracle.truffle.api.library.LibraryFactory;
import com.oracle.truffle.api.nodes.DenyReplace;
import com.oracle.truffle.api.nodes.ExplodeLoop;
import com.oracle.truffle.api.nodes.Node;
import com.oracle.truffle.api.nodes.NodeCost;
import com.oracle.truffle.api.object.DynamicObject;
import com.oracle.truffle.api.object.DynamicObjectLibrary;
import com.oracle.truffle.api.object.HiddenKey;
import com.oracle.truffle.api.object.Location;
import com.oracle.truffle.api.object.Shape;
import com.oracle.truffle.api.strings.TruffleString;
import com.oracle.truffle.api.utilities.TruffleWeakReference;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.VarHandle;
import java.lang.invoke.MethodHandles.Lookup;
import java.util.Objects;

/**
 * Debug Info: 
 *   Specialization {@link ReadAttributeFromDynamicObjectNode#readFinalAttr}
 *     Activation probability: 0.23929
 *     With/without class size: 12/24 bytes
 *   Specialization {@link ReadAttributeFromDynamicObjectNode#readFinalPrimitiveAttr}
 *     Activation probability: 0.20714
 *     With/without class size: 11/24 bytes
 *   Specialization {@link ReadAttributeFromDynamicObjectNode#readDirect}
 *     Activation probability: 0.17500
 *     With/without class size: 8/4 bytes
 *   Specialization {@link ReadAttributeFromDynamicObjectNode#readDirectHidden}
 *     Activation probability: 0.14286
 *     With/without class size: 7/4 bytes
 *   Specialization {@link ReadAttributeFromDynamicObjectNode#readDirectHidden}
 *     Activation probability: 0.11071
 *     With/without class size: 5/0 bytes
 *   Specialization {@link ReadAttributeFromDynamicObjectNode#read}
 *     Activation probability: 0.07857
 *     With/without class size: 7/17 bytes
 *   Specialization {@link ReadAttributeFromDynamicObjectNode#read}
 *     Activation probability: 0.04643
 *     With/without class size: 5/13 bytes
 * 
*/ @GeneratedBy(ReadAttributeFromDynamicObjectNode.class) @SuppressWarnings({"javadoc", "unused"}) public final class ReadAttributeFromDynamicObjectNodeGen extends ReadAttributeFromDynamicObjectNode { private static final StateField READ0__READ_ATTRIBUTE_FROM_DYNAMIC_OBJECT_NODE_READ0_STATE_0_UPDATER = StateField.create(Read0Data.lookup_(), "read0_state_0_"); private static final StateField READ1__READ_ATTRIBUTE_FROM_DYNAMIC_OBJECT_NODE_READ1_STATE_0_UPDATER = StateField.create(Read1Data.lookup_(), "read1_state_0_"); static final ReferenceField READ_FINAL_ATTR_CACHE_UPDATER = ReferenceField.create(MethodHandles.lookup(), "readFinalAttr_cache", ReadFinalAttrData.class); static final ReferenceField READ_FINAL_PRIMITIVE_ATTR_CACHE_UPDATER = ReferenceField.create(MethodHandles.lookup(), "readFinalPrimitiveAttr_cache", ReadFinalPrimitiveAttrData.class); static final ReferenceField READ_DIRECT_CACHE_UPDATER = ReferenceField.create(MethodHandles.lookup(), "readDirect_cache", ReadDirectData.class); static final ReferenceField READ_DIRECT_HIDDEN0_CACHE_UPDATER = ReferenceField.create(MethodHandles.lookup(), "readDirectHidden0_cache", ReadDirectHidden0Data.class); static final ReferenceField READ0_CACHE_UPDATER = ReferenceField.create(MethodHandles.lookup(), "read0_cache", Read0Data.class); /** * Source Info:
     *   Specialization: {@link ReadAttributeFromDynamicObjectNode#read}
     *   Parameter: {@link CastToTruffleStringNode} castNode
     *   Inline method: {@link CastToTruffleStringNodeGen#inline}
*/ private static final CastToTruffleStringNode INLINED_READ0_CAST_NODE_ = CastToTruffleStringNodeGen.inline(InlineTarget.create(CastToTruffleStringNode.class, READ0__READ_ATTRIBUTE_FROM_DYNAMIC_OBJECT_NODE_READ0_STATE_0_UPDATER.subUpdater(0, 8), ReferenceField.create(Read0Data.lookup_(), "read0_castNode__field1_", Node.class), ReferenceField.create(Read0Data.lookup_(), "read0_castNode__field2_", Node.class), ReferenceField.create(Read0Data.lookup_(), "read0_castNode__field3_", Node.class))); /** * Source Info:
     *   Specialization: {@link ReadAttributeFromDynamicObjectNode#read}
     *   Parameter: {@link CastToTruffleStringNode} castNode
     *   Inline method: {@link CastToTruffleStringNodeGen#inline}
*/ private static final CastToTruffleStringNode INLINED_READ1_CAST_NODE_ = CastToTruffleStringNodeGen.inline(InlineTarget.create(CastToTruffleStringNode.class, READ1__READ_ATTRIBUTE_FROM_DYNAMIC_OBJECT_NODE_READ1_STATE_0_UPDATER.subUpdater(0, 8), ReferenceField.create(Read1Data.lookup_(), "read1_castNode__field1_", Node.class), ReferenceField.create(Read1Data.lookup_(), "read1_castNode__field2_", Node.class), ReferenceField.create(Read1Data.lookup_(), "read1_castNode__field3_", Node.class))); private static final Uncached UNCACHED = new Uncached(); private static final LibraryFactory DYNAMIC_OBJECT_LIBRARY_ = LibraryFactory.resolve(DynamicObjectLibrary.class); /** * State Info:
     *   0: SpecializationActive {@link ReadAttributeFromDynamicObjectNode#readFinalAttr}
     *   1: SpecializationActive {@link ReadAttributeFromDynamicObjectNode#readDirect}
     *   2: SpecializationActive {@link ReadAttributeFromDynamicObjectNode#read}
     *   3: SpecializationActive {@link ReadAttributeFromDynamicObjectNode#read}
     *   4: SpecializationActive {@link ReadAttributeFromDynamicObjectNode#readFinalPrimitiveAttr}
     *   5: SpecializationActive {@link ReadAttributeFromDynamicObjectNode#readDirectHidden}
     *   6: SpecializationActive {@link ReadAttributeFromDynamicObjectNode#readDirectHidden}
     * 
*/ @CompilationFinal private int state_0_; @UnsafeAccessedField @CompilationFinal private ReadFinalAttrData readFinalAttr_cache; @UnsafeAccessedField @CompilationFinal private ReadFinalPrimitiveAttrData readFinalPrimitiveAttr_cache; @UnsafeAccessedField @Child private ReadDirectData readDirect_cache; @UnsafeAccessedField @Child private ReadDirectHidden0Data readDirectHidden0_cache; @UnsafeAccessedField @Child private Read0Data read0_cache; @Child private Read1Data read1_cache; private ReadAttributeFromDynamicObjectNodeGen() { } @ExplodeLoop @Override public Object execute(Object arg0Value, Object arg1Value) { int state_0 = this.state_0_; if (state_0 != 0 /* is SpecializationActive[ReadAttributeFromDynamicObjectNode.readFinalAttr(DynamicObject, TruffleString, TruffleString, DynamicObject, Shape, Location, Assumption, Object)] || SpecializationActive[ReadAttributeFromDynamicObjectNode.readFinalPrimitiveAttr(DynamicObject, TruffleString, TruffleString, DynamicObject, Shape, Location, Assumption, Object)] || SpecializationActive[ReadAttributeFromDynamicObjectNode.readDirect(DynamicObject, TruffleString, DynamicObjectLibrary)] || SpecializationActive[ReadAttributeFromDynamicObjectNode.readDirectHidden(DynamicObject, Object, DynamicObjectLibrary)] || SpecializationActive[ReadAttributeFromDynamicObjectNode.readDirectHidden(DynamicObject, Object, DynamicObjectLibrary)] || SpecializationActive[ReadAttributeFromDynamicObjectNode.read(DynamicObject, Object, Node, CastToTruffleStringNode, DynamicObjectLibrary)] || SpecializationActive[ReadAttributeFromDynamicObjectNode.read(DynamicObject, Object, Node, CastToTruffleStringNode, DynamicObjectLibrary)] */ && arg0Value instanceof DynamicObject) { DynamicObject arg0Value_ = (DynamicObject) arg0Value; if ((state_0 & 0b10011) != 0 /* is SpecializationActive[ReadAttributeFromDynamicObjectNode.readFinalAttr(DynamicObject, TruffleString, TruffleString, DynamicObject, Shape, Location, Assumption, Object)] || SpecializationActive[ReadAttributeFromDynamicObjectNode.readFinalPrimitiveAttr(DynamicObject, TruffleString, TruffleString, DynamicObject, Shape, Location, Assumption, Object)] || SpecializationActive[ReadAttributeFromDynamicObjectNode.readDirect(DynamicObject, TruffleString, DynamicObjectLibrary)] */ && arg1Value instanceof TruffleString) { TruffleString arg1Value_ = (TruffleString) arg1Value; if ((state_0 & 0b1) != 0 /* is SpecializationActive[ReadAttributeFromDynamicObjectNode.readFinalAttr(DynamicObject, TruffleString, TruffleString, DynamicObject, Shape, Location, Assumption, Object)] */) { ReadFinalAttrData s0_ = this.readFinalAttr_cache; if (s0_ != null) { if (!Assumption.isValidAssumption(s0_.assumption0_) || !Assumption.isValidAssumption(s0_.assumption1_)) { CompilerDirectives.transferToInterpreterAndInvalidate(); removeReadFinalAttr_(s0_); return executeAndSpecialize(arg0Value_, arg1Value_); } { DynamicObject cachedObject__ = (s0_.weakCachedObjectGen__.get()); assert DSLSupport.assertIdempotence((isSingleContext())); if ((cachedObject__ != null) && (arg0Value_ == cachedObject__) && (ReadAttributeFromDynamicObjectNode.isLongLivedObject(cachedObject__)) && (arg1Value_ == s0_.cachedKey_) && (arg0Value_.getShape() == s0_.cachedShape_) && (ReadAttributeFromDynamicObjectNode.locationIsAssumedFinal(s0_.loc_))) { Object value__ = (s0_.weakValueGen__.get()); if ((value__ != null) && (!(ReadAttributeFromDynamicObjectNode.isPrimitive(value__)))) { return ReadAttributeFromDynamicObjectNode.readFinalAttr(arg0Value_, arg1Value_, s0_.cachedKey_, cachedObject__, s0_.cachedShape_, s0_.loc_, s0_.propertyAssumption_, value__); } } } } } if ((state_0 & 0b10000) != 0 /* is SpecializationActive[ReadAttributeFromDynamicObjectNode.readFinalPrimitiveAttr(DynamicObject, TruffleString, TruffleString, DynamicObject, Shape, Location, Assumption, Object)] */) { ReadFinalPrimitiveAttrData s1_ = this.readFinalPrimitiveAttr_cache; if (s1_ != null) { if (!Assumption.isValidAssumption(s1_.assumption0_) || !Assumption.isValidAssumption(s1_.assumption1_)) { CompilerDirectives.transferToInterpreterAndInvalidate(); removeReadFinalPrimitiveAttr_(s1_); return executeAndSpecialize(arg0Value_, arg1Value_); } { DynamicObject cachedObject__1 = (s1_.weakCachedObjectGen__.get()); assert DSLSupport.assertIdempotence((isSingleContext())); if ((cachedObject__1 != null) && (arg0Value_ == cachedObject__1) && (ReadAttributeFromDynamicObjectNode.isLongLivedObject(cachedObject__1)) && (arg1Value_ == s1_.cachedKey_) && (arg0Value_.getShape() == s1_.cachedShape_) && (ReadAttributeFromDynamicObjectNode.locationIsAssumedFinal(s1_.loc_))) { assert DSLSupport.assertIdempotence((ReadAttributeFromDynamicObjectNode.isPrimitive(s1_.value_))); return ReadAttributeFromDynamicObjectNode.readFinalPrimitiveAttr(arg0Value_, arg1Value_, s1_.cachedKey_, cachedObject__1, s1_.cachedShape_, s1_.loc_, s1_.propertyAssumption_, s1_.value_); } } } } if ((state_0 & 0b10) != 0 /* is SpecializationActive[ReadAttributeFromDynamicObjectNode.readDirect(DynamicObject, TruffleString, DynamicObjectLibrary)] */) { ReadDirectData s2_ = this.readDirect_cache; while (s2_ != null) { if ((s2_.dylib_.accepts(arg0Value_))) { return ReadAttributeFromDynamicObjectNode.readDirect(arg0Value_, arg1Value_, s2_.dylib_); } s2_ = s2_.next_; } } } if ((state_0 & 0b1101100) != 0 /* is SpecializationActive[ReadAttributeFromDynamicObjectNode.readDirectHidden(DynamicObject, Object, DynamicObjectLibrary)] || SpecializationActive[ReadAttributeFromDynamicObjectNode.readDirectHidden(DynamicObject, Object, DynamicObjectLibrary)] || SpecializationActive[ReadAttributeFromDynamicObjectNode.read(DynamicObject, Object, Node, CastToTruffleStringNode, DynamicObjectLibrary)] || SpecializationActive[ReadAttributeFromDynamicObjectNode.read(DynamicObject, Object, Node, CastToTruffleStringNode, DynamicObjectLibrary)] */) { if ((state_0 & 0b100000) != 0 /* is SpecializationActive[ReadAttributeFromDynamicObjectNode.readDirectHidden(DynamicObject, Object, DynamicObjectLibrary)] */) { ReadDirectHidden0Data s3_ = this.readDirectHidden0_cache; while (s3_ != null) { if ((s3_.dylib_.accepts(arg0Value_)) && (ObjectAttributeNode.isHiddenKey(arg1Value))) { return ReadAttributeFromDynamicObjectNode.readDirectHidden(arg0Value_, arg1Value, s3_.dylib_); } s3_ = s3_.next_; } } if ((state_0 & 0b1000000) != 0 /* is SpecializationActive[ReadAttributeFromDynamicObjectNode.readDirectHidden(DynamicObject, Object, DynamicObjectLibrary)] */) { if ((ObjectAttributeNode.isHiddenKey(arg1Value))) { return this.readDirectHidden1Boundary(state_0, arg0Value_, arg1Value); } } if ((state_0 & 0b100) != 0 /* is SpecializationActive[ReadAttributeFromDynamicObjectNode.read(DynamicObject, Object, Node, CastToTruffleStringNode, DynamicObjectLibrary)] */) { Read0Data s5_ = this.read0_cache; while (s5_ != null) { if ((s5_.dylib_.accepts(arg0Value_)) && (!(ObjectAttributeNode.isHiddenKey(arg1Value)))) { Node inliningTarget__ = (s5_); return ReadAttributeFromDynamicObjectNode.read(arg0Value_, arg1Value, inliningTarget__, INLINED_READ0_CAST_NODE_, s5_.dylib_); } s5_ = s5_.next_; } } if ((state_0 & 0b1000) != 0 /* is SpecializationActive[ReadAttributeFromDynamicObjectNode.read(DynamicObject, Object, Node, CastToTruffleStringNode, DynamicObjectLibrary)] */) { Read1Data s6_ = this.read1_cache; if (s6_ != null) { if ((!(ObjectAttributeNode.isHiddenKey(arg1Value)))) { return this.read1Boundary(state_0, s6_, arg0Value_, arg1Value); } } } } } CompilerDirectives.transferToInterpreterAndInvalidate(); return executeAndSpecialize(arg0Value, arg1Value); } @SuppressWarnings("static-method") @TruffleBoundary private Object readDirectHidden1Boundary(int state_0, DynamicObject arg0Value_, Object arg1Value) { { DynamicObjectLibrary dylib__ = (DYNAMIC_OBJECT_LIBRARY_.getUncached(arg0Value_)); return ReadAttributeFromDynamicObjectNode.readDirectHidden(arg0Value_, arg1Value, dylib__); } } @SuppressWarnings("static-method") @TruffleBoundary private Object read1Boundary(int state_0, Read1Data s6_, DynamicObject arg0Value_, Object arg1Value) { { Node inliningTarget__ = (s6_); DynamicObjectLibrary dylib__1 = (DYNAMIC_OBJECT_LIBRARY_.getUncached(arg0Value_)); return ReadAttributeFromDynamicObjectNode.read(arg0Value_, arg1Value, inliningTarget__, INLINED_READ1_CAST_NODE_, dylib__1); } } @ExplodeLoop @Override public Object execute(Object arg0Value, HiddenKey arg1Value) { int state_0 = this.state_0_; if ((state_0 & 0b1101100) != 0 /* is SpecializationActive[ReadAttributeFromDynamicObjectNode.readDirectHidden(DynamicObject, Object, DynamicObjectLibrary)] || SpecializationActive[ReadAttributeFromDynamicObjectNode.readDirectHidden(DynamicObject, Object, DynamicObjectLibrary)] || SpecializationActive[ReadAttributeFromDynamicObjectNode.read(DynamicObject, Object, Node, CastToTruffleStringNode, DynamicObjectLibrary)] || SpecializationActive[ReadAttributeFromDynamicObjectNode.read(DynamicObject, Object, Node, CastToTruffleStringNode, DynamicObjectLibrary)] */ && arg0Value instanceof DynamicObject) { DynamicObject arg0Value_ = (DynamicObject) arg0Value; if ((state_0 & 0b100000) != 0 /* is SpecializationActive[ReadAttributeFromDynamicObjectNode.readDirectHidden(DynamicObject, Object, DynamicObjectLibrary)] */) { ReadDirectHidden0Data s3_ = this.readDirectHidden0_cache; while (s3_ != null) { if ((s3_.dylib_.accepts(arg0Value_)) && (ObjectAttributeNode.isHiddenKey(arg1Value))) { return ReadAttributeFromDynamicObjectNode.readDirectHidden(arg0Value_, arg1Value, s3_.dylib_); } s3_ = s3_.next_; } } if ((state_0 & 0b1000000) != 0 /* is SpecializationActive[ReadAttributeFromDynamicObjectNode.readDirectHidden(DynamicObject, Object, DynamicObjectLibrary)] */) { if ((ObjectAttributeNode.isHiddenKey(arg1Value))) { return this.readDirectHidden1Boundary0(state_0, arg0Value_, arg1Value); } } if ((state_0 & 0b100) != 0 /* is SpecializationActive[ReadAttributeFromDynamicObjectNode.read(DynamicObject, Object, Node, CastToTruffleStringNode, DynamicObjectLibrary)] */) { Read0Data s5_ = this.read0_cache; while (s5_ != null) { if ((s5_.dylib_.accepts(arg0Value_)) && (!(ObjectAttributeNode.isHiddenKey(arg1Value)))) { Node inliningTarget__ = (s5_); return ReadAttributeFromDynamicObjectNode.read(arg0Value_, arg1Value, inliningTarget__, INLINED_READ0_CAST_NODE_, s5_.dylib_); } s5_ = s5_.next_; } } if ((state_0 & 0b1000) != 0 /* is SpecializationActive[ReadAttributeFromDynamicObjectNode.read(DynamicObject, Object, Node, CastToTruffleStringNode, DynamicObjectLibrary)] */) { Read1Data s6_ = this.read1_cache; if (s6_ != null) { if ((!(ObjectAttributeNode.isHiddenKey(arg1Value)))) { return this.read1Boundary1(state_0, s6_, arg0Value_, arg1Value); } } } } CompilerDirectives.transferToInterpreterAndInvalidate(); return executeAndSpecialize(arg0Value, arg1Value); } @SuppressWarnings("static-method") @TruffleBoundary private Object readDirectHidden1Boundary0(int state_0, DynamicObject arg0Value_, HiddenKey arg1Value) { { DynamicObjectLibrary dylib__ = (DYNAMIC_OBJECT_LIBRARY_.getUncached(arg0Value_)); return ReadAttributeFromDynamicObjectNode.readDirectHidden(arg0Value_, arg1Value, dylib__); } } @SuppressWarnings("static-method") @TruffleBoundary private Object read1Boundary1(int state_0, Read1Data s6_, DynamicObject arg0Value_, HiddenKey arg1Value) { { Node inliningTarget__ = (s6_); DynamicObjectLibrary dylib__1 = (DYNAMIC_OBJECT_LIBRARY_.getUncached(arg0Value_)); return ReadAttributeFromDynamicObjectNode.read(arg0Value_, arg1Value, inliningTarget__, INLINED_READ1_CAST_NODE_, dylib__1); } } @ExplodeLoop @Override public Object execute(Object arg0Value, TruffleString arg1Value) { int state_0 = this.state_0_; if (state_0 != 0 /* is SpecializationActive[ReadAttributeFromDynamicObjectNode.readFinalAttr(DynamicObject, TruffleString, TruffleString, DynamicObject, Shape, Location, Assumption, Object)] || SpecializationActive[ReadAttributeFromDynamicObjectNode.readFinalPrimitiveAttr(DynamicObject, TruffleString, TruffleString, DynamicObject, Shape, Location, Assumption, Object)] || SpecializationActive[ReadAttributeFromDynamicObjectNode.readDirect(DynamicObject, TruffleString, DynamicObjectLibrary)] || SpecializationActive[ReadAttributeFromDynamicObjectNode.readDirectHidden(DynamicObject, Object, DynamicObjectLibrary)] || SpecializationActive[ReadAttributeFromDynamicObjectNode.readDirectHidden(DynamicObject, Object, DynamicObjectLibrary)] || SpecializationActive[ReadAttributeFromDynamicObjectNode.read(DynamicObject, Object, Node, CastToTruffleStringNode, DynamicObjectLibrary)] || SpecializationActive[ReadAttributeFromDynamicObjectNode.read(DynamicObject, Object, Node, CastToTruffleStringNode, DynamicObjectLibrary)] */ && arg0Value instanceof DynamicObject) { DynamicObject arg0Value_ = (DynamicObject) arg0Value; if ((state_0 & 0b10011) != 0 /* is SpecializationActive[ReadAttributeFromDynamicObjectNode.readFinalAttr(DynamicObject, TruffleString, TruffleString, DynamicObject, Shape, Location, Assumption, Object)] || SpecializationActive[ReadAttributeFromDynamicObjectNode.readFinalPrimitiveAttr(DynamicObject, TruffleString, TruffleString, DynamicObject, Shape, Location, Assumption, Object)] || SpecializationActive[ReadAttributeFromDynamicObjectNode.readDirect(DynamicObject, TruffleString, DynamicObjectLibrary)] */) { if ((state_0 & 0b1) != 0 /* is SpecializationActive[ReadAttributeFromDynamicObjectNode.readFinalAttr(DynamicObject, TruffleString, TruffleString, DynamicObject, Shape, Location, Assumption, Object)] */) { ReadFinalAttrData s0_ = this.readFinalAttr_cache; if (s0_ != null) { if (!Assumption.isValidAssumption(s0_.assumption0_) || !Assumption.isValidAssumption(s0_.assumption1_)) { CompilerDirectives.transferToInterpreterAndInvalidate(); removeReadFinalAttr_(s0_); return executeAndSpecialize(arg0Value_, arg1Value); } { DynamicObject cachedObject__ = (s0_.weakCachedObjectGen__.get()); assert DSLSupport.assertIdempotence((isSingleContext())); if ((cachedObject__ != null) && (arg0Value_ == cachedObject__) && (ReadAttributeFromDynamicObjectNode.isLongLivedObject(cachedObject__)) && (arg1Value == s0_.cachedKey_) && (arg0Value_.getShape() == s0_.cachedShape_) && (ReadAttributeFromDynamicObjectNode.locationIsAssumedFinal(s0_.loc_))) { Object value__ = (s0_.weakValueGen__.get()); if ((value__ != null) && (!(ReadAttributeFromDynamicObjectNode.isPrimitive(value__)))) { return ReadAttributeFromDynamicObjectNode.readFinalAttr(arg0Value_, arg1Value, s0_.cachedKey_, cachedObject__, s0_.cachedShape_, s0_.loc_, s0_.propertyAssumption_, value__); } } } } } if ((state_0 & 0b10000) != 0 /* is SpecializationActive[ReadAttributeFromDynamicObjectNode.readFinalPrimitiveAttr(DynamicObject, TruffleString, TruffleString, DynamicObject, Shape, Location, Assumption, Object)] */) { ReadFinalPrimitiveAttrData s1_ = this.readFinalPrimitiveAttr_cache; if (s1_ != null) { if (!Assumption.isValidAssumption(s1_.assumption0_) || !Assumption.isValidAssumption(s1_.assumption1_)) { CompilerDirectives.transferToInterpreterAndInvalidate(); removeReadFinalPrimitiveAttr_(s1_); return executeAndSpecialize(arg0Value_, arg1Value); } { DynamicObject cachedObject__1 = (s1_.weakCachedObjectGen__.get()); assert DSLSupport.assertIdempotence((isSingleContext())); if ((cachedObject__1 != null) && (arg0Value_ == cachedObject__1) && (ReadAttributeFromDynamicObjectNode.isLongLivedObject(cachedObject__1)) && (arg1Value == s1_.cachedKey_) && (arg0Value_.getShape() == s1_.cachedShape_) && (ReadAttributeFromDynamicObjectNode.locationIsAssumedFinal(s1_.loc_))) { assert DSLSupport.assertIdempotence((ReadAttributeFromDynamicObjectNode.isPrimitive(s1_.value_))); return ReadAttributeFromDynamicObjectNode.readFinalPrimitiveAttr(arg0Value_, arg1Value, s1_.cachedKey_, cachedObject__1, s1_.cachedShape_, s1_.loc_, s1_.propertyAssumption_, s1_.value_); } } } } if ((state_0 & 0b10) != 0 /* is SpecializationActive[ReadAttributeFromDynamicObjectNode.readDirect(DynamicObject, TruffleString, DynamicObjectLibrary)] */) { ReadDirectData s2_ = this.readDirect_cache; while (s2_ != null) { if ((s2_.dylib_.accepts(arg0Value_))) { return ReadAttributeFromDynamicObjectNode.readDirect(arg0Value_, arg1Value, s2_.dylib_); } s2_ = s2_.next_; } } } if ((state_0 & 0b1101100) != 0 /* is SpecializationActive[ReadAttributeFromDynamicObjectNode.readDirectHidden(DynamicObject, Object, DynamicObjectLibrary)] || SpecializationActive[ReadAttributeFromDynamicObjectNode.readDirectHidden(DynamicObject, Object, DynamicObjectLibrary)] || SpecializationActive[ReadAttributeFromDynamicObjectNode.read(DynamicObject, Object, Node, CastToTruffleStringNode, DynamicObjectLibrary)] || SpecializationActive[ReadAttributeFromDynamicObjectNode.read(DynamicObject, Object, Node, CastToTruffleStringNode, DynamicObjectLibrary)] */) { if ((state_0 & 0b100000) != 0 /* is SpecializationActive[ReadAttributeFromDynamicObjectNode.readDirectHidden(DynamicObject, Object, DynamicObjectLibrary)] */) { ReadDirectHidden0Data s3_ = this.readDirectHidden0_cache; while (s3_ != null) { if ((s3_.dylib_.accepts(arg0Value_)) && (ObjectAttributeNode.isHiddenKey(arg1Value))) { return ReadAttributeFromDynamicObjectNode.readDirectHidden(arg0Value_, arg1Value, s3_.dylib_); } s3_ = s3_.next_; } } if ((state_0 & 0b1000000) != 0 /* is SpecializationActive[ReadAttributeFromDynamicObjectNode.readDirectHidden(DynamicObject, Object, DynamicObjectLibrary)] */) { if ((ObjectAttributeNode.isHiddenKey(arg1Value))) { return this.readDirectHidden1Boundary2(state_0, arg0Value_, arg1Value); } } if ((state_0 & 0b100) != 0 /* is SpecializationActive[ReadAttributeFromDynamicObjectNode.read(DynamicObject, Object, Node, CastToTruffleStringNode, DynamicObjectLibrary)] */) { Read0Data s5_ = this.read0_cache; while (s5_ != null) { if ((s5_.dylib_.accepts(arg0Value_)) && (!(ObjectAttributeNode.isHiddenKey(arg1Value)))) { Node inliningTarget__ = (s5_); return ReadAttributeFromDynamicObjectNode.read(arg0Value_, arg1Value, inliningTarget__, INLINED_READ0_CAST_NODE_, s5_.dylib_); } s5_ = s5_.next_; } } if ((state_0 & 0b1000) != 0 /* is SpecializationActive[ReadAttributeFromDynamicObjectNode.read(DynamicObject, Object, Node, CastToTruffleStringNode, DynamicObjectLibrary)] */) { Read1Data s6_ = this.read1_cache; if (s6_ != null) { if ((!(ObjectAttributeNode.isHiddenKey(arg1Value)))) { return this.read1Boundary3(state_0, s6_, arg0Value_, arg1Value); } } } } } CompilerDirectives.transferToInterpreterAndInvalidate(); return executeAndSpecialize(arg0Value, arg1Value); } @SuppressWarnings("static-method") @TruffleBoundary private Object readDirectHidden1Boundary2(int state_0, DynamicObject arg0Value_, TruffleString arg1Value) { { DynamicObjectLibrary dylib__ = (DYNAMIC_OBJECT_LIBRARY_.getUncached(arg0Value_)); return ReadAttributeFromDynamicObjectNode.readDirectHidden(arg0Value_, arg1Value, dylib__); } } @SuppressWarnings("static-method") @TruffleBoundary private Object read1Boundary3(int state_0, Read1Data s6_, DynamicObject arg0Value_, TruffleString arg1Value) { { Node inliningTarget__ = (s6_); DynamicObjectLibrary dylib__1 = (DYNAMIC_OBJECT_LIBRARY_.getUncached(arg0Value_)); return ReadAttributeFromDynamicObjectNode.read(arg0Value_, arg1Value, inliningTarget__, INLINED_READ1_CAST_NODE_, dylib__1); } } @SuppressWarnings("unused") private Object executeAndSpecialize(Object arg0Value, Object arg1Value) { int state_0 = this.state_0_; if (arg0Value instanceof DynamicObject) { DynamicObject arg0Value_ = (DynamicObject) arg0Value; if (arg1Value instanceof TruffleString) { TruffleString arg1Value_ = (TruffleString) arg1Value; { Object value__ = null; DynamicObject cachedObject__ = null; if (((state_0 & 0b1110)) == 0 /* is-not SpecializationActive[ReadAttributeFromDynamicObjectNode.readDirect(DynamicObject, TruffleString, DynamicObjectLibrary)] && SpecializationActive[ReadAttributeFromDynamicObjectNode.read(DynamicObject, Object, Node, CastToTruffleStringNode, DynamicObjectLibrary)] && SpecializationActive[ReadAttributeFromDynamicObjectNode.read(DynamicObject, Object, Node, CastToTruffleStringNode, DynamicObjectLibrary)] */) { while (true) { int count0_ = 0; ReadFinalAttrData s0_ = READ_FINAL_ATTR_CACHE_UPDATER.getVolatile(this); ReadFinalAttrData s0_original = s0_; while (s0_ != null) { { cachedObject__ = (s0_.weakCachedObjectGen__.get()); assert DSLSupport.assertIdempotence((isSingleContext())); if ((cachedObject__ != null) && (arg0Value_ == cachedObject__) && (ReadAttributeFromDynamicObjectNode.isLongLivedObject(cachedObject__)) && (arg1Value_ == s0_.cachedKey_) && (arg0Value_.getShape() == s0_.cachedShape_) && (ReadAttributeFromDynamicObjectNode.locationIsAssumedFinal(s0_.loc_))) { value__ = (s0_.weakValueGen__.get()); if ((value__ != null) && (!(ReadAttributeFromDynamicObjectNode.isPrimitive(value__))) && Assumption.isValidAssumption(s0_.assumption0_) && Assumption.isValidAssumption(s0_.assumption1_)) { break; } } } count0_++; s0_ = null; break; } if (s0_ == null && count0_ < 1) { if ((isSingleContext())) { TruffleWeakReference weakCachedObjectGen___ = (new TruffleWeakReference<>(arg0Value_)); cachedObject__ = (weakCachedObjectGen___.get()); if ((cachedObject__ != null) && (arg0Value_ == cachedObject__) && (ReadAttributeFromDynamicObjectNode.isLongLivedObject(cachedObject__))) { Shape cachedShape__ = (arg0Value_.getShape()); // assert (arg1Value_ == s0_.cachedKey_); if ((arg0Value_.getShape() == cachedShape__)) { TruffleString cachedKey__ = (arg1Value_); Location loc__ = (ObjectAttributeNode.getLocationOrNull(cachedShape__.getProperty(cachedKey__))); if ((ReadAttributeFromDynamicObjectNode.locationIsAssumedFinal(loc__))) { TruffleWeakReference weakValueGen___ = (new TruffleWeakReference<>(ReadAttributeFromDynamicObjectNode.getAttribute(arg0Value_, arg1Value_))); value__ = (weakValueGen___.get()); if ((value__ != null) && (!(ReadAttributeFromDynamicObjectNode.isPrimitive(value__)))) { Assumption assumption0 = (cachedShape__.getValidAssumption()); if (Assumption.isValidAssumption(assumption0)) { Assumption assumption1 = (loc__.getFinalAssumption()); if (Assumption.isValidAssumption(assumption1)) { s0_ = new ReadFinalAttrData(); s0_.weakValueGen__ = weakValueGen___; s0_.weakCachedObjectGen__ = weakCachedObjectGen___; s0_.cachedKey_ = cachedKey__; Objects.requireNonNull(cachedShape__, "Specialization 'readFinalAttr(DynamicObject, TruffleString, TruffleString, DynamicObject, Shape, Location, Assumption, Object)' cache 'cachedShape' returned a 'null' default value. The cache initializer must never return a default value for this cache. Use @Cached(neverDefault=false) to allow default values for this cached value or make sure the cache initializer never returns 'null'."); s0_.cachedShape_ = cachedShape__; s0_.loc_ = loc__; s0_.propertyAssumption_ = (arg0Value_.getShape().getPropertyAssumption(arg1Value_)); s0_.assumption0_ = assumption0; s0_.assumption1_ = assumption1; if (!READ_FINAL_ATTR_CACHE_UPDATER.compareAndSet(this, s0_original, s0_)) { continue; } state_0 = state_0 | 0b1 /* add SpecializationActive[ReadAttributeFromDynamicObjectNode.readFinalAttr(DynamicObject, TruffleString, TruffleString, DynamicObject, Shape, Location, Assumption, Object)] */; this.state_0_ = state_0; } } } } } } } } if (s0_ != null) { return ReadAttributeFromDynamicObjectNode.readFinalAttr(arg0Value_, arg1Value_, s0_.cachedKey_, cachedObject__, s0_.cachedShape_, s0_.loc_, s0_.propertyAssumption_, value__); } break; } } } { DynamicObject cachedObject__1 = null; if (((state_0 & 0b1110)) == 0 /* is-not SpecializationActive[ReadAttributeFromDynamicObjectNode.readDirect(DynamicObject, TruffleString, DynamicObjectLibrary)] && SpecializationActive[ReadAttributeFromDynamicObjectNode.read(DynamicObject, Object, Node, CastToTruffleStringNode, DynamicObjectLibrary)] && SpecializationActive[ReadAttributeFromDynamicObjectNode.read(DynamicObject, Object, Node, CastToTruffleStringNode, DynamicObjectLibrary)] */) { while (true) { int count1_ = 0; ReadFinalPrimitiveAttrData s1_ = READ_FINAL_PRIMITIVE_ATTR_CACHE_UPDATER.getVolatile(this); ReadFinalPrimitiveAttrData s1_original = s1_; while (s1_ != null) { { cachedObject__1 = (s1_.weakCachedObjectGen__.get()); assert DSLSupport.assertIdempotence((isSingleContext())); if ((cachedObject__1 != null) && (arg0Value_ == cachedObject__1) && (ReadAttributeFromDynamicObjectNode.isLongLivedObject(cachedObject__1)) && (arg1Value_ == s1_.cachedKey_) && (arg0Value_.getShape() == s1_.cachedShape_) && (ReadAttributeFromDynamicObjectNode.locationIsAssumedFinal(s1_.loc_))) { assert DSLSupport.assertIdempotence((ReadAttributeFromDynamicObjectNode.isPrimitive(s1_.value_))); if (Assumption.isValidAssumption(s1_.assumption0_) && Assumption.isValidAssumption(s1_.assumption1_)) { break; } } } count1_++; s1_ = null; break; } if (s1_ == null && count1_ < 1) { if ((isSingleContext())) { TruffleWeakReference weakCachedObjectGen___1 = (new TruffleWeakReference<>(arg0Value_)); cachedObject__1 = (weakCachedObjectGen___1.get()); if ((cachedObject__1 != null) && (arg0Value_ == cachedObject__1) && (ReadAttributeFromDynamicObjectNode.isLongLivedObject(cachedObject__1))) { Shape cachedShape__1 = (arg0Value_.getShape()); // assert (arg1Value_ == s1_.cachedKey_); if ((arg0Value_.getShape() == cachedShape__1)) { TruffleString cachedKey__1 = (arg1Value_); Location loc__1 = (ObjectAttributeNode.getLocationOrNull(cachedShape__1.getProperty(cachedKey__1))); if ((ReadAttributeFromDynamicObjectNode.locationIsAssumedFinal(loc__1))) { Object value__1 = (ReadAttributeFromDynamicObjectNode.getAttribute(arg0Value_, arg1Value_)); if ((ReadAttributeFromDynamicObjectNode.isPrimitive(value__1))) { Assumption assumption0 = (cachedShape__1.getValidAssumption()); if (Assumption.isValidAssumption(assumption0)) { Assumption assumption1 = (loc__1.getFinalAssumption()); if (Assumption.isValidAssumption(assumption1)) { s1_ = new ReadFinalPrimitiveAttrData(); s1_.weakCachedObjectGen__ = weakCachedObjectGen___1; s1_.cachedKey_ = cachedKey__1; Objects.requireNonNull(cachedShape__1, "Specialization 'readFinalPrimitiveAttr(DynamicObject, TruffleString, TruffleString, DynamicObject, Shape, Location, Assumption, Object)' cache 'cachedShape' returned a 'null' default value. The cache initializer must never return a default value for this cache. Use @Cached(neverDefault=false) to allow default values for this cached value or make sure the cache initializer never returns 'null'."); s1_.cachedShape_ = cachedShape__1; s1_.loc_ = loc__1; s1_.propertyAssumption_ = (arg0Value_.getShape().getPropertyAssumption(arg1Value_)); s1_.value_ = value__1; s1_.assumption0_ = assumption0; s1_.assumption1_ = assumption1; if (!READ_FINAL_PRIMITIVE_ATTR_CACHE_UPDATER.compareAndSet(this, s1_original, s1_)) { continue; } state_0 = state_0 | 0b10000 /* add SpecializationActive[ReadAttributeFromDynamicObjectNode.readFinalPrimitiveAttr(DynamicObject, TruffleString, TruffleString, DynamicObject, Shape, Location, Assumption, Object)] */; this.state_0_ = state_0; } } } } } } } } if (s1_ != null) { return ReadAttributeFromDynamicObjectNode.readFinalPrimitiveAttr(arg0Value_, arg1Value_, s1_.cachedKey_, cachedObject__1, s1_.cachedShape_, s1_.loc_, s1_.propertyAssumption_, s1_.value_); } break; } } } if (((state_0 & 0b1100)) == 0 /* is-not SpecializationActive[ReadAttributeFromDynamicObjectNode.read(DynamicObject, Object, Node, CastToTruffleStringNode, DynamicObjectLibrary)] && SpecializationActive[ReadAttributeFromDynamicObjectNode.read(DynamicObject, Object, Node, CastToTruffleStringNode, DynamicObjectLibrary)] */) { while (true) { int count2_ = 0; ReadDirectData s2_ = READ_DIRECT_CACHE_UPDATER.getVolatile(this); ReadDirectData s2_original = s2_; while (s2_ != null) { if ((s2_.dylib_.accepts(arg0Value_))) { break; } count2_++; s2_ = s2_.next_; } if (s2_ == null) { // assert (s2_.dylib_.accepts(arg0Value_)); if (count2_ < (PythonOptions.getAttributeAccessInlineCacheMaxDepth())) { s2_ = this.insert(new ReadDirectData(s2_original)); DynamicObjectLibrary dylib__2 = s2_.insert((DYNAMIC_OBJECT_LIBRARY_.create(arg0Value_))); Objects.requireNonNull(dylib__2, "Specialization 'readDirect(DynamicObject, TruffleString, DynamicObjectLibrary)' cache 'dylib' returned a 'null' default value. The cache initializer must never return a default value for this cache. Use @Cached(neverDefault=false) to allow default values for this cached value or make sure the cache initializer never returns 'null'."); s2_.dylib_ = dylib__2; if (!READ_DIRECT_CACHE_UPDATER.compareAndSet(this, s2_original, s2_)) { continue; } this.readFinalAttr_cache = null; this.readFinalPrimitiveAttr_cache = null; state_0 = state_0 & 0xffffffee /* remove SpecializationActive[ReadAttributeFromDynamicObjectNode.readFinalAttr(DynamicObject, TruffleString, TruffleString, DynamicObject, Shape, Location, Assumption, Object)], SpecializationActive[ReadAttributeFromDynamicObjectNode.readFinalPrimitiveAttr(DynamicObject, TruffleString, TruffleString, DynamicObject, Shape, Location, Assumption, Object)] */; state_0 = state_0 | 0b10 /* add SpecializationActive[ReadAttributeFromDynamicObjectNode.readDirect(DynamicObject, TruffleString, DynamicObjectLibrary)] */; this.state_0_ = state_0; } } if (s2_ != null) { return ReadAttributeFromDynamicObjectNode.readDirect(arg0Value_, arg1Value_, s2_.dylib_); } break; } } } if (((state_0 & 0b1000000)) == 0 /* is-not SpecializationActive[ReadAttributeFromDynamicObjectNode.readDirectHidden(DynamicObject, Object, DynamicObjectLibrary)] */) { while (true) { int count3_ = 0; ReadDirectHidden0Data s3_ = READ_DIRECT_HIDDEN0_CACHE_UPDATER.getVolatile(this); ReadDirectHidden0Data s3_original = s3_; while (s3_ != null) { if ((s3_.dylib_.accepts(arg0Value_)) && (ObjectAttributeNode.isHiddenKey(arg1Value))) { break; } count3_++; s3_ = s3_.next_; } if (s3_ == null) { if ((ObjectAttributeNode.isHiddenKey(arg1Value)) && count3_ < (PythonOptions.getAttributeAccessInlineCacheMaxDepth())) { // assert (s3_.dylib_.accepts(arg0Value_)); s3_ = this.insert(new ReadDirectHidden0Data(s3_original)); DynamicObjectLibrary dylib__ = s3_.insert((DYNAMIC_OBJECT_LIBRARY_.create(arg0Value_))); Objects.requireNonNull(dylib__, "Specialization 'readDirectHidden(DynamicObject, Object, DynamicObjectLibrary)' cache 'dylib' returned a 'null' default value. The cache initializer must never return a default value for this cache. Use @Cached(neverDefault=false) to allow default values for this cached value or make sure the cache initializer never returns 'null'."); s3_.dylib_ = dylib__; if (!READ_DIRECT_HIDDEN0_CACHE_UPDATER.compareAndSet(this, s3_original, s3_)) { continue; } state_0 = state_0 | 0b100000 /* add SpecializationActive[ReadAttributeFromDynamicObjectNode.readDirectHidden(DynamicObject, Object, DynamicObjectLibrary)] */; this.state_0_ = state_0; } } if (s3_ != null) { return ReadAttributeFromDynamicObjectNode.readDirectHidden(arg0Value_, arg1Value, s3_.dylib_); } break; } } { DynamicObjectLibrary dylib__ = null; if ((ObjectAttributeNode.isHiddenKey(arg1Value))) { dylib__ = (DYNAMIC_OBJECT_LIBRARY_.getUncached(arg0Value_)); this.readDirectHidden0_cache = null; state_0 = state_0 & 0xffffffdf /* remove SpecializationActive[ReadAttributeFromDynamicObjectNode.readDirectHidden(DynamicObject, Object, DynamicObjectLibrary)] */; state_0 = state_0 | 0b1000000 /* add SpecializationActive[ReadAttributeFromDynamicObjectNode.readDirectHidden(DynamicObject, Object, DynamicObjectLibrary)] */; this.state_0_ = state_0; return ReadAttributeFromDynamicObjectNode.readDirectHidden(arg0Value_, arg1Value, dylib__); } } { Node inliningTarget__ = null; if (((state_0 & 0b1000)) == 0 /* is-not SpecializationActive[ReadAttributeFromDynamicObjectNode.read(DynamicObject, Object, Node, CastToTruffleStringNode, DynamicObjectLibrary)] */) { while (true) { int count5_ = 0; Read0Data s5_ = READ0_CACHE_UPDATER.getVolatile(this); Read0Data s5_original = s5_; while (s5_ != null) { if ((s5_.dylib_.accepts(arg0Value_)) && (!(ObjectAttributeNode.isHiddenKey(arg1Value)))) { inliningTarget__ = (s5_); break; } count5_++; s5_ = s5_.next_; } if (s5_ == null) { if ((!(ObjectAttributeNode.isHiddenKey(arg1Value))) && count5_ < (PythonOptions.getAttributeAccessInlineCacheMaxDepth())) { // assert (s5_.dylib_.accepts(arg0Value_)); s5_ = this.insert(new Read0Data(s5_original)); inliningTarget__ = (s5_); DynamicObjectLibrary dylib__1 = s5_.insert((DYNAMIC_OBJECT_LIBRARY_.create(arg0Value_))); Objects.requireNonNull(dylib__1, "Specialization 'read(DynamicObject, Object, Node, CastToTruffleStringNode, DynamicObjectLibrary)' cache 'dylib' returned a 'null' default value. The cache initializer must never return a default value for this cache. Use @Cached(neverDefault=false) to allow default values for this cached value or make sure the cache initializer never returns 'null'."); s5_.dylib_ = dylib__1; if (!READ0_CACHE_UPDATER.compareAndSet(this, s5_original, s5_)) { continue; } this.readFinalAttr_cache = null; this.readFinalPrimitiveAttr_cache = null; this.readDirect_cache = null; state_0 = state_0 & 0xffffffec /* remove SpecializationActive[ReadAttributeFromDynamicObjectNode.readFinalAttr(DynamicObject, TruffleString, TruffleString, DynamicObject, Shape, Location, Assumption, Object)], SpecializationActive[ReadAttributeFromDynamicObjectNode.readFinalPrimitiveAttr(DynamicObject, TruffleString, TruffleString, DynamicObject, Shape, Location, Assumption, Object)], SpecializationActive[ReadAttributeFromDynamicObjectNode.readDirect(DynamicObject, TruffleString, DynamicObjectLibrary)] */; state_0 = state_0 | 0b100 /* add SpecializationActive[ReadAttributeFromDynamicObjectNode.read(DynamicObject, Object, Node, CastToTruffleStringNode, DynamicObjectLibrary)] */; this.state_0_ = state_0; } } if (s5_ != null) { return ReadAttributeFromDynamicObjectNode.read(arg0Value_, arg1Value, inliningTarget__, INLINED_READ0_CAST_NODE_, s5_.dylib_); } break; } } } { DynamicObjectLibrary dylib__1 = null; Node inliningTarget__ = null; if ((!(ObjectAttributeNode.isHiddenKey(arg1Value)))) { Read1Data s6_ = this.insert(new Read1Data()); inliningTarget__ = (s6_); dylib__1 = (DYNAMIC_OBJECT_LIBRARY_.getUncached(arg0Value_)); VarHandle.storeStoreFence(); this.read1_cache = s6_; this.readFinalAttr_cache = null; this.readFinalPrimitiveAttr_cache = null; this.readDirect_cache = null; this.read0_cache = null; state_0 = state_0 & 0xffffffe8 /* remove SpecializationActive[ReadAttributeFromDynamicObjectNode.readFinalAttr(DynamicObject, TruffleString, TruffleString, DynamicObject, Shape, Location, Assumption, Object)], SpecializationActive[ReadAttributeFromDynamicObjectNode.readFinalPrimitiveAttr(DynamicObject, TruffleString, TruffleString, DynamicObject, Shape, Location, Assumption, Object)], SpecializationActive[ReadAttributeFromDynamicObjectNode.readDirect(DynamicObject, TruffleString, DynamicObjectLibrary)], SpecializationActive[ReadAttributeFromDynamicObjectNode.read(DynamicObject, Object, Node, CastToTruffleStringNode, DynamicObjectLibrary)] */; state_0 = state_0 | 0b1000 /* add SpecializationActive[ReadAttributeFromDynamicObjectNode.read(DynamicObject, Object, Node, CastToTruffleStringNode, DynamicObjectLibrary)] */; this.state_0_ = state_0; return ReadAttributeFromDynamicObjectNode.read(arg0Value_, arg1Value, inliningTarget__, INLINED_READ1_CAST_NODE_, dylib__1); } } } throw new UnsupportedSpecializationException(this, new Node[] {null, null}, arg0Value, arg1Value); } @Override public NodeCost getCost() { int state_0 = this.state_0_; if (state_0 == 0) { return NodeCost.UNINITIALIZED; } else { if ((state_0 & (state_0 - 1)) == 0 /* is-single */) { ReadDirectData s2_ = this.readDirect_cache; ReadDirectHidden0Data s3_ = this.readDirectHidden0_cache; Read0Data s5_ = this.read0_cache; if ((s2_ == null || s2_.next_ == null) && (s3_ == null || s3_.next_ == null) && (s5_ == null || s5_.next_ == null)) { return NodeCost.MONOMORPHIC; } } } return NodeCost.POLYMORPHIC; } void removeReadFinalAttr_(ReadFinalAttrData s0_) { this.state_0_ = state_0_ & 0xfffffffe /* remove SpecializationActive[ReadAttributeFromDynamicObjectNode.readFinalAttr(DynamicObject, TruffleString, TruffleString, DynamicObject, Shape, Location, Assumption, Object)] */; this.readFinalAttr_cache = null; } void removeReadFinalPrimitiveAttr_(ReadFinalPrimitiveAttrData s1_) { this.state_0_ = state_0_ & 0xffffffef /* remove SpecializationActive[ReadAttributeFromDynamicObjectNode.readFinalPrimitiveAttr(DynamicObject, TruffleString, TruffleString, DynamicObject, Shape, Location, Assumption, Object)] */; this.readFinalPrimitiveAttr_cache = null; } @NeverDefault public static ReadAttributeFromDynamicObjectNode create() { return new ReadAttributeFromDynamicObjectNodeGen(); } @NeverDefault public static ReadAttributeFromDynamicObjectNode getUncached() { return ReadAttributeFromDynamicObjectNodeGen.UNCACHED; } @GeneratedBy(ReadAttributeFromDynamicObjectNode.class) @DenyReplace private static final class ReadFinalAttrData implements SpecializationDataNode { /** * Source Info:
         *   Specialization: {@link ReadAttributeFromDynamicObjectNode#readFinalAttr}
         *   Parameter: {@link TruffleWeakReference} weakValueGen_
*/ @CompilationFinal TruffleWeakReference weakValueGen__; /** * Source Info:
         *   Specialization: {@link ReadAttributeFromDynamicObjectNode#readFinalAttr}
         *   Parameter: {@link TruffleWeakReference} weakCachedObjectGen_
*/ @CompilationFinal TruffleWeakReference weakCachedObjectGen__; /** * Source Info:
         *   Specialization: {@link ReadAttributeFromDynamicObjectNode#readFinalAttr}
         *   Parameter: {@link TruffleString} cachedKey
*/ @CompilationFinal TruffleString cachedKey_; /** * Source Info:
         *   Specialization: {@link ReadAttributeFromDynamicObjectNode#readFinalAttr}
         *   Parameter: {@link Shape} cachedShape
*/ @CompilationFinal Shape cachedShape_; /** * Source Info:
         *   Specialization: {@link ReadAttributeFromDynamicObjectNode#readFinalAttr}
         *   Parameter: {@link Location} loc
*/ @CompilationFinal Location loc_; /** * Source Info:
         *   Specialization: {@link ReadAttributeFromDynamicObjectNode#readFinalAttr}
         *   Parameter: {@link Assumption} propertyAssumption
*/ @CompilationFinal Assumption propertyAssumption_; @CompilationFinal Assumption assumption0_; @CompilationFinal Assumption assumption1_; ReadFinalAttrData() { } } @GeneratedBy(ReadAttributeFromDynamicObjectNode.class) @DenyReplace private static final class ReadFinalPrimitiveAttrData implements SpecializationDataNode { /** * Source Info:
         *   Specialization: {@link ReadAttributeFromDynamicObjectNode#readFinalPrimitiveAttr}
         *   Parameter: {@link TruffleWeakReference} weakCachedObjectGen_
*/ @CompilationFinal TruffleWeakReference weakCachedObjectGen__; /** * Source Info:
         *   Specialization: {@link ReadAttributeFromDynamicObjectNode#readFinalPrimitiveAttr}
         *   Parameter: {@link TruffleString} cachedKey
*/ @CompilationFinal TruffleString cachedKey_; /** * Source Info:
         *   Specialization: {@link ReadAttributeFromDynamicObjectNode#readFinalPrimitiveAttr}
         *   Parameter: {@link Shape} cachedShape
*/ @CompilationFinal Shape cachedShape_; /** * Source Info:
         *   Specialization: {@link ReadAttributeFromDynamicObjectNode#readFinalPrimitiveAttr}
         *   Parameter: {@link Location} loc
*/ @CompilationFinal Location loc_; /** * Source Info:
         *   Specialization: {@link ReadAttributeFromDynamicObjectNode#readFinalPrimitiveAttr}
         *   Parameter: {@link Assumption} propertyAssumption
*/ @CompilationFinal Assumption propertyAssumption_; /** * Source Info:
         *   Specialization: {@link ReadAttributeFromDynamicObjectNode#readFinalPrimitiveAttr}
         *   Parameter: {@link Object} value
*/ @CompilationFinal Object value_; @CompilationFinal Assumption assumption0_; @CompilationFinal Assumption assumption1_; ReadFinalPrimitiveAttrData() { } } @GeneratedBy(ReadAttributeFromDynamicObjectNode.class) @DenyReplace private static final class ReadDirectData extends Node implements SpecializationDataNode { @Child ReadDirectData next_; /** * Source Info:
         *   Specialization: {@link ReadAttributeFromDynamicObjectNode#readDirect}
         *   Parameter: {@link DynamicObjectLibrary} dylib
*/ @Child DynamicObjectLibrary dylib_; ReadDirectData(ReadDirectData next_) { this.next_ = next_; } @Override public NodeCost getCost() { return NodeCost.NONE; } } @GeneratedBy(ReadAttributeFromDynamicObjectNode.class) @DenyReplace private static final class ReadDirectHidden0Data extends Node implements SpecializationDataNode { @Child ReadDirectHidden0Data next_; /** * Source Info:
         *   Specialization: {@link ReadAttributeFromDynamicObjectNode#readDirectHidden}
         *   Parameter: {@link DynamicObjectLibrary} dylib
*/ @Child DynamicObjectLibrary dylib_; ReadDirectHidden0Data(ReadDirectHidden0Data next_) { this.next_ = next_; } @Override public NodeCost getCost() { return NodeCost.NONE; } } @GeneratedBy(ReadAttributeFromDynamicObjectNode.class) @DenyReplace private static final class Read0Data extends Node implements SpecializationDataNode { @Child Read0Data next_; /** * State Info:
         *   0-7: InlinedCache
         *        Specialization: {@link ReadAttributeFromDynamicObjectNode#read}
         *        Parameter: {@link CastToTruffleStringNode} castNode
         *        Inline method: {@link CastToTruffleStringNodeGen#inline}
         * 
*/ @CompilationFinal @UnsafeAccessedField private int read0_state_0_; /** * Source Info:
         *   Specialization: {@link ReadAttributeFromDynamicObjectNode#read}
         *   Parameter: {@link CastToTruffleStringNode} castNode
         *   Inline method: {@link CastToTruffleStringNodeGen#inline}
         *   Inline field: {@link Node} field1
*/ @Child @UnsafeAccessedField @SuppressWarnings("unused") private Node read0_castNode__field1_; /** * Source Info:
         *   Specialization: {@link ReadAttributeFromDynamicObjectNode#read}
         *   Parameter: {@link CastToTruffleStringNode} castNode
         *   Inline method: {@link CastToTruffleStringNodeGen#inline}
         *   Inline field: {@link Node} field2
*/ @Child @UnsafeAccessedField @SuppressWarnings("unused") private Node read0_castNode__field2_; /** * Source Info:
         *   Specialization: {@link ReadAttributeFromDynamicObjectNode#read}
         *   Parameter: {@link CastToTruffleStringNode} castNode
         *   Inline method: {@link CastToTruffleStringNodeGen#inline}
         *   Inline field: {@link Node} field3
*/ @Child @UnsafeAccessedField @SuppressWarnings("unused") private Node read0_castNode__field3_; /** * Source Info:
         *   Specialization: {@link ReadAttributeFromDynamicObjectNode#read}
         *   Parameter: {@link DynamicObjectLibrary} dylib
*/ @Child DynamicObjectLibrary dylib_; Read0Data(Read0Data next_) { this.next_ = next_; } @Override public NodeCost getCost() { return NodeCost.NONE; } private static Lookup lookup_() { return MethodHandles.lookup(); } } @GeneratedBy(ReadAttributeFromDynamicObjectNode.class) @DenyReplace private static final class Read1Data extends Node implements SpecializationDataNode { /** * State Info:
         *   0-7: InlinedCache
         *        Specialization: {@link ReadAttributeFromDynamicObjectNode#read}
         *        Parameter: {@link CastToTruffleStringNode} castNode
         *        Inline method: {@link CastToTruffleStringNodeGen#inline}
         * 
*/ @CompilationFinal @UnsafeAccessedField private int read1_state_0_; /** * Source Info:
         *   Specialization: {@link ReadAttributeFromDynamicObjectNode#read}
         *   Parameter: {@link CastToTruffleStringNode} castNode
         *   Inline method: {@link CastToTruffleStringNodeGen#inline}
         *   Inline field: {@link Node} field1
*/ @Child @UnsafeAccessedField @SuppressWarnings("unused") private Node read1_castNode__field1_; /** * Source Info:
         *   Specialization: {@link ReadAttributeFromDynamicObjectNode#read}
         *   Parameter: {@link CastToTruffleStringNode} castNode
         *   Inline method: {@link CastToTruffleStringNodeGen#inline}
         *   Inline field: {@link Node} field2
*/ @Child @UnsafeAccessedField @SuppressWarnings("unused") private Node read1_castNode__field2_; /** * Source Info:
         *   Specialization: {@link ReadAttributeFromDynamicObjectNode#read}
         *   Parameter: {@link CastToTruffleStringNode} castNode
         *   Inline method: {@link CastToTruffleStringNodeGen#inline}
         *   Inline field: {@link Node} field3
*/ @Child @UnsafeAccessedField @SuppressWarnings("unused") private Node read1_castNode__field3_; Read1Data() { } @Override public NodeCost getCost() { return NodeCost.NONE; } private static Lookup lookup_() { return MethodHandles.lookup(); } } @GeneratedBy(ReadAttributeFromDynamicObjectNode.class) @DenyReplace private static final class Uncached extends ReadAttributeFromDynamicObjectNode { @TruffleBoundary @Override public Object execute(Object arg0Value, Object arg1Value) { if (arg0Value instanceof DynamicObject) { DynamicObject arg0Value_ = (DynamicObject) arg0Value; if ((ObjectAttributeNode.isHiddenKey(arg1Value))) { return ReadAttributeFromDynamicObjectNode.readDirectHidden(arg0Value_, arg1Value, (DYNAMIC_OBJECT_LIBRARY_.getUncached(arg0Value_))); } if ((!(ObjectAttributeNode.isHiddenKey(arg1Value)))) { return ReadAttributeFromDynamicObjectNode.read(arg0Value_, arg1Value, (this), (CastToTruffleStringNode.getUncached()), (DYNAMIC_OBJECT_LIBRARY_.getUncached(arg0Value_))); } } throw new UnsupportedSpecializationException(this, new Node[] {null, null}, arg0Value, arg1Value); } @TruffleBoundary @Override public Object execute(Object arg0Value, HiddenKey arg1Value) { if (arg0Value instanceof DynamicObject) { DynamicObject arg0Value_ = (DynamicObject) arg0Value; if ((ObjectAttributeNode.isHiddenKey(arg1Value))) { return ReadAttributeFromDynamicObjectNode.readDirectHidden(arg0Value_, arg1Value, (DYNAMIC_OBJECT_LIBRARY_.getUncached(arg0Value_))); } if ((!(ObjectAttributeNode.isHiddenKey(arg1Value)))) { return ReadAttributeFromDynamicObjectNode.read(arg0Value_, arg1Value, (this), (CastToTruffleStringNode.getUncached()), (DYNAMIC_OBJECT_LIBRARY_.getUncached(arg0Value_))); } } throw new UnsupportedSpecializationException(this, new Node[] {null, null}, arg0Value, arg1Value); } @TruffleBoundary @Override public Object execute(Object arg0Value, TruffleString arg1Value) { if (arg0Value instanceof DynamicObject) { DynamicObject arg0Value_ = (DynamicObject) arg0Value; if ((ObjectAttributeNode.isHiddenKey(arg1Value))) { return ReadAttributeFromDynamicObjectNode.readDirectHidden(arg0Value_, arg1Value, (DYNAMIC_OBJECT_LIBRARY_.getUncached(arg0Value_))); } if ((!(ObjectAttributeNode.isHiddenKey(arg1Value)))) { return ReadAttributeFromDynamicObjectNode.read(arg0Value_, arg1Value, (this), (CastToTruffleStringNode.getUncached()), (DYNAMIC_OBJECT_LIBRARY_.getUncached(arg0Value_))); } } throw new UnsupportedSpecializationException(this, new Node[] {null, null}, arg0Value, arg1Value); } @Override public NodeCost getCost() { return NodeCost.MEGAMORPHIC; } @Override public boolean isAdoptable() { return false; } } }