Skip to content

Commit 6f96cdb

Browse files
committed
Remove HiddenKey from read/write attribute nodes
1 parent eafc440 commit 6f96cdb

File tree

7 files changed

+33
-62
lines changed

7 files changed

+33
-62
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/PythonLanguage.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -953,7 +953,7 @@ public Shape getEmptyShape() {
953953

954954
public Shape getShapeForClass(PythonAbstractClass klass) {
955955
if (isSingleContext()) {
956-
return Shape.newBuilder(getEmptyShape()).addConstantProperty(HiddenAttr.CLASS.getKeyTodoRemoveThis(), klass, 0).build();
956+
return Shape.newBuilder(getEmptyShape()).addConstantProperty(HiddenAttr.getClassHiddenKey(), klass, 0).build();
957957
} else {
958958
return getEmptyShape();
959959
}
@@ -968,7 +968,7 @@ public Shape getBuiltinTypeInstanceShape(PythonBuiltinClassType type) {
968968
Shape shape = builtinTypeInstanceShapes[ordinal];
969969
if (shape == null) {
970970
CompilerDirectives.transferToInterpreterAndInvalidate();
971-
Shape.DerivedBuilder shapeBuilder = Shape.newBuilder(getEmptyShape()).addConstantProperty(HiddenAttr.CLASS.getKeyTodoRemoveThis(), type, 0);
971+
Shape.DerivedBuilder shapeBuilder = Shape.newBuilder(getEmptyShape()).addConstantProperty(HiddenAttr.getClassHiddenKey(), type, 0);
972972
if (!type.isBuiltinWithDict()) {
973973
shapeBuilder.shapeFlags(PythonObject.HAS_SLOTS_BUT_NO_DICT_FLAG);
974974
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/capi/CExtNodes.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -953,7 +953,7 @@ public final long execute(Object cls, CFields nativeMemberName, HiddenAttr manag
953953
static long doSingleContext(Object cls, CFields nativeMember, HiddenAttr managedMemberName, Function<PythonBuiltinClassType, Integer> builtinCallback,
954954
@Bind("this") Node inliningTarget,
955955
@Cached GetBaseClassNode getBaseClassNode,
956-
@Cached HiddenAttr.ReadNode readAttrNode, // TODO: this was createForceType()
956+
@Cached HiddenAttr.ReadNode readAttrNode,
957957
@Cached CStructAccess.ReadI64Node getTypeMemberNode,
958958
@Cached PyNumberAsSizeNode asSizeNode) {
959959
CompilerAsserts.partialEvaluationConstant(builtinCallback);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/HiddenAttr.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,6 @@ public final class HiddenAttr {
9191
public static final HiddenAttr GETBUFFER = new HiddenAttr("__getbuffer__");
9292
public static final HiddenAttr RELEASEBUFFER = new HiddenAttr("__releasebuffer__");
9393
public static final HiddenAttr DOC = new HiddenAttr(J___DOC__);
94-
9594
public static final HiddenAttr WEAKLIST = new HiddenAttr("__weaklist__"); // _weakref
9695
public static final HiddenAttr WEAK_REF_QUEUE = new HiddenAttr("weakRefQueue"); // _weakref
9796
public static final HiddenAttr ENCODER_OBJECT = new HiddenAttr("encoder_object"); // cjkcodecs
@@ -131,8 +130,9 @@ private HiddenAttr(String keyName) {
131130
key = new HiddenKey(keyName);
132131
}
133132

134-
public HiddenKey getKeyTodoRemoveThis() {
135-
return key;
133+
// temporary, will be removed when we have no DynamicObjects and Shapes
134+
public static HiddenKey getClassHiddenKey() {
135+
return CLASS.key;
136136
}
137137

138138
public String getName() {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/attributes/ReadAttributeFromDynamicObjectNode.java

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@
6060
import com.oracle.truffle.api.nodes.Node;
6161
import com.oracle.truffle.api.object.DynamicObject;
6262
import com.oracle.truffle.api.object.DynamicObjectLibrary;
63-
import com.oracle.truffle.api.object.HiddenKey;
6463
import com.oracle.truffle.api.object.Location;
6564
import com.oracle.truffle.api.object.Shape;
6665
import com.oracle.truffle.api.strings.TruffleString;
@@ -82,8 +81,6 @@ public static ReadAttributeFromDynamicObjectNode getUncached() {
8281

8382
public abstract Object execute(Object object, TruffleString key);
8483

85-
public abstract Object execute(Object object, HiddenKey key);
86-
8784
protected static Object getAttribute(DynamicObject object, TruffleString key) {
8885
return DynamicObjectLibrary.getUncached().getOrDefault(object, key, PNone.NO_VALUE);
8986
}
@@ -153,17 +150,12 @@ protected static Object readDirect(DynamicObject dynamicObject, TruffleString ke
153150
return dylib.getOrDefault(dynamicObject, key, PNone.NO_VALUE);
154151
}
155152

156-
@Specialization(guards = "isHiddenKey(key)", limit = "getAttributeAccessInlineCacheMaxDepth()")
157-
protected static Object readDirectHidden(DynamicObject dynamicObject, Object key,
158-
@CachedLibrary("dynamicObject") DynamicObjectLibrary dylib) {
159-
return dylib.getOrDefault(dynamicObject, key, PNone.NO_VALUE);
160-
}
161-
162-
@Specialization(guards = "!isHiddenKey(key)", replaces = {"readDirect", "readFinalAttr"}, limit = "getAttributeAccessInlineCacheMaxDepth()")
153+
@Specialization(replaces = {"readDirect", "readFinalAttr"}, limit = "getAttributeAccessInlineCacheMaxDepth()")
163154
protected static Object read(DynamicObject dynamicObject, Object key,
164155
@Bind("this") Node inliningTarget,
165156
@Cached CastToTruffleStringNode castNode,
166157
@CachedLibrary("dynamicObject") DynamicObjectLibrary dylib) {
158+
assert !isHiddenKey(key);
167159
return dylib.getOrDefault(dynamicObject, attrKey(inliningTarget, key, castNode), PNone.NO_VALUE);
168160
}
169161
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/attributes/ReadAttributeFromObjectNode.java

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,6 @@
4141
package com.oracle.graal.python.nodes.attributes;
4242

4343
import static com.oracle.graal.python.builtins.objects.cext.structs.CFields.PyTypeObject__tp_dict;
44-
import static com.oracle.truffle.api.CompilerDirectives.shouldNotReachHere;
45-
import static com.oracle.truffle.api.CompilerDirectives.transferToInterpreter;
4644

4745
import com.oracle.graal.python.builtins.objects.PNone;
4846
import com.oracle.graal.python.builtins.objects.cext.PythonAbstractNativeObject;
@@ -67,7 +65,6 @@
6765
import com.oracle.truffle.api.dsl.Bind;
6866
import com.oracle.truffle.api.dsl.Cached;
6967
import com.oracle.truffle.api.dsl.Cached.Exclusive;
70-
import com.oracle.truffle.api.dsl.Cached.Shared;
7168
import com.oracle.truffle.api.dsl.GenerateInline;
7269
import com.oracle.truffle.api.dsl.GenerateUncached;
7370
import com.oracle.truffle.api.dsl.ImportStatic;
@@ -79,7 +76,6 @@
7976
import com.oracle.truffle.api.interop.UnsupportedMessageException;
8077
import com.oracle.truffle.api.library.CachedLibrary;
8178
import com.oracle.truffle.api.nodes.Node;
82-
import com.oracle.truffle.api.object.HiddenKey;
8379
import com.oracle.truffle.api.profiles.InlinedConditionProfile;
8480
import com.oracle.truffle.api.strings.TruffleString;
8581

@@ -142,21 +138,15 @@ protected static Object readFromBuiltinModuleDict(PythonModule object, TruffleSt
142138
}
143139
}
144140

145-
// hidden keys are always on the dynamic object store
146-
@Specialization
147-
protected static Object readHiddenKey(PythonObject object, HiddenKey key,
148-
@Shared("readDynamic") @Cached ReadAttributeFromDynamicObjectNode readAttributeFromDynamicObjectNode) {
149-
return readAttributeFromDynamicObjectNode.execute(object.getStorage(), key);
150-
}
151-
152141
// any python object attribute read
153-
@Specialization(guards = "!isHiddenKey(key)")
142+
@Specialization
154143
protected static Object readObjectAttribute(PythonObject object, Object key,
155144
@Bind("this") Node inliningTarget,
156145
@Cached InlinedConditionProfile profileHasDict,
157146
@Exclusive @Cached GetDictIfExistsNode getDict,
158-
@Shared("readDynamic") @Cached ReadAttributeFromDynamicObjectNode readAttributeFromDynamicObjectNode,
147+
@Cached ReadAttributeFromDynamicObjectNode readAttributeFromDynamicObjectNode,
159148
@Exclusive @Cached HashingStorageGetItem getItem) {
149+
assert !isHiddenKey(key);
160150
var dict = getDict.execute(object);
161151
if (profileHasDict.profile(inliningTarget, dict == null)) {
162152
return readAttributeFromDynamicObjectNode.execute(object.getStorage(), key);
@@ -212,10 +202,7 @@ protected static Object readNativeClass(PythonAbstractNativeObject object, Objec
212202
@Bind("this") Node inliningTarget,
213203
@Cached CStructAccess.ReadObjectNode getNativeDict,
214204
@Exclusive @Cached HashingStorageGetItem getItem) {
215-
if (key instanceof HiddenKey hk) {
216-
transferToInterpreter();
217-
throw shouldNotReachHere("Attempt to access HiddenKey " + hk + " from a native object");
218-
}
205+
assert !isHiddenKey(key);
219206
return readNative(inliningTarget, key, getNativeDict.readFromObj(object, PyTypeObject__tp_dict), getItem);
220207
}
221208
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/attributes/WriteAttributeToDynamicObjectNode.java

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@
5353
import com.oracle.truffle.api.nodes.Node;
5454
import com.oracle.truffle.api.object.DynamicObject;
5555
import com.oracle.truffle.api.object.DynamicObjectLibrary;
56-
import com.oracle.truffle.api.object.HiddenKey;
5756
import com.oracle.truffle.api.strings.TruffleString;
5857

5958
/**
@@ -67,8 +66,6 @@
6766
@GenerateInline(false) // Should be reconsidered during anticipated refactoring from DOM library
6867
public abstract class WriteAttributeToDynamicObjectNode extends ObjectAttributeNode {
6968

70-
public abstract boolean execute(Object primary, HiddenKey key, Object value);
71-
7269
public abstract boolean execute(Object primary, TruffleString key, Object value);
7370

7471
public abstract boolean execute(Object primary, Object key, Object value);
@@ -89,18 +86,12 @@ static boolean writeDirect(DynamicObject dynamicObject, TruffleString key, Objec
8986
return true;
9087
}
9188

92-
@Specialization(limit = "getAttributeAccessInlineCacheMaxDepth()")
93-
static boolean writeDirectHidden(DynamicObject dynamicObject, HiddenKey key, Object value,
94-
@CachedLibrary("dynamicObject") DynamicObjectLibrary dylib) {
95-
dylib.put(dynamicObject, key, value);
96-
return true;
97-
}
98-
99-
@Specialization(guards = "!isHiddenKey(key)", replaces = "writeDirect", limit = "getAttributeAccessInlineCacheMaxDepth()")
89+
@Specialization(replaces = "writeDirect", limit = "getAttributeAccessInlineCacheMaxDepth()")
10090
static boolean write(DynamicObject dynamicObject, Object key, Object value,
10191
@Bind("this") Node inliningTarget,
10292
@Cached CastToTruffleStringNode castNode,
10393
@CachedLibrary("dynamicObject") DynamicObjectLibrary dylib) {
94+
assert !isHiddenKey(key);
10495
dylib.put(dynamicObject, attrKey(inliningTarget, key, castNode), value);
10596
return true;
10697
}

0 commit comments

Comments
 (0)