Skip to content

Commit 6903117

Browse files
committed
[GR-30197] Remove HiddenPythonKey and replace with normal HiddenKey.
PullRequest: graalpython/1695
2 parents fe8272a + bf892f3 commit 6903117

File tree

10 files changed

+45
-124
lines changed

10 files changed

+45
-124
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import com.oracle.graal.python.builtins.objects.function.PArguments;
4949
import com.oracle.graal.python.builtins.objects.object.PythonObject;
5050
import com.oracle.graal.python.builtins.objects.type.PythonManagedClass;
51+
import com.oracle.graal.python.builtins.objects.type.TypeBuiltins;
5152
import com.oracle.graal.python.nodes.BuiltinNames;
5253
import com.oracle.graal.python.nodes.HiddenAttributes;
5354
import com.oracle.graal.python.nodes.NodeFactory;
@@ -98,6 +99,7 @@
9899
import com.oracle.truffle.api.nodes.ExplodeLoop.LoopExplosionKind;
99100
import com.oracle.truffle.api.nodes.Node;
100101
import com.oracle.truffle.api.nodes.RootNode;
102+
import com.oracle.truffle.api.object.HiddenKey;
101103
import com.oracle.truffle.api.object.Shape;
102104
import com.oracle.truffle.api.source.Source;
103105
import com.oracle.truffle.api.source.Source.SourceBuilder;
@@ -186,6 +188,8 @@ public final class PythonLanguage extends TruffleLanguage<PythonContext> {
186188
private Shape cApiSymbolCache;
187189
private Shape hpySymbolCache;
188190

191+
public final ConcurrentHashMap<String, HiddenKey> typeHiddenKeys = new ConcurrentHashMap<>(TypeBuiltins.INITIAL_HIDDEN_TYPE_KEYS);
192+
189193
public static int getNumberOfSpecialSingletons() {
190194
return CONTEXT_INSENSITIVE_SINGLETONS.length;
191195
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/BuiltinConstructors.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,6 @@
153153
import com.oracle.graal.python.builtins.objects.function.PKeyword;
154154
import com.oracle.graal.python.builtins.objects.getsetdescriptor.GetSetDescriptor;
155155
import com.oracle.graal.python.builtins.objects.getsetdescriptor.HiddenKeyDescriptor;
156-
import com.oracle.graal.python.builtins.objects.getsetdescriptor.HiddenPythonKey;
157156
import com.oracle.graal.python.builtins.objects.ints.PInt;
158157
import com.oracle.graal.python.builtins.objects.iterator.PZip;
159158
import com.oracle.graal.python.builtins.objects.list.PList;
@@ -263,6 +262,7 @@
263262
import com.oracle.truffle.api.library.CachedLibrary;
264263
import com.oracle.truffle.api.nodes.ExplodeLoop;
265264
import com.oracle.truffle.api.nodes.UnexpectedResultException;
265+
import com.oracle.truffle.api.object.HiddenKey;
266266
import com.oracle.truffle.api.profiles.BranchProfile;
267267
import com.oracle.truffle.api.profiles.ConditionProfile;
268268
import com.oracle.truffle.api.profiles.ValueProfile;
@@ -2515,7 +2515,8 @@ private PythonClass typeMetaclass(VirtualFrame frame, String name, PTuple bases,
25152515
// TODO avoid if native slots are inherited
25162516
try {
25172517
String mangledName = PythonSSTNodeFactory.mangleName(name, slotName);
2518-
HiddenPythonKey hiddenSlotKey = new HiddenPythonKey(mangledName);
2518+
2519+
HiddenKey hiddenSlotKey = createTypeKey(mangledName);
25192520
HiddenKeyDescriptor slotDesc = factory().createHiddenKeyDescriptor(hiddenSlotKey, pythonClass);
25202521
pythonClass.setAttribute(mangledName, slotDesc);
25212522
} catch (OverflowException e) {
@@ -2551,6 +2552,11 @@ private PythonClass typeMetaclass(VirtualFrame frame, String name, PTuple bases,
25512552
return pythonClass;
25522553
}
25532554

2555+
@TruffleBoundary
2556+
private static HiddenKey createTypeKey(String name) {
2557+
return PythonLanguage.getCurrent().typeHiddenKeys.computeIfAbsent(name, n -> new HiddenKey(n));
2558+
}
2559+
25542560
@TruffleBoundary
25552561
private void addDictDescrAttribute(PythonAbstractClass[] basesArray, LookupAttributeInMRONode getDictAttrNode, PythonClass pythonClass) {
25562562
if ((!hasPythonClassBases(basesArray) && getDictAttrNode.execute(pythonClass) == PNone.NO_VALUE) || basesHaveSlots(basesArray)) {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/common/DynamicObjectStorage.java

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
*/
4141
package com.oracle.graal.python.builtins.objects.common;
4242

43-
import java.util.ArrayList;
4443
import java.util.Iterator;
4544
import java.util.List;
4645
import java.util.NoSuchElementException;
@@ -50,7 +49,6 @@
5049
import com.oracle.graal.python.builtins.objects.common.HashingStorageLibrary.ForEachNode;
5150
import com.oracle.graal.python.builtins.objects.common.HashingStorageLibrary.HashingStorageIterable;
5251
import com.oracle.graal.python.builtins.objects.function.PArguments.ThreadState;
53-
import com.oracle.graal.python.builtins.objects.getsetdescriptor.HiddenPythonKey;
5452
import com.oracle.graal.python.builtins.objects.object.PythonObjectLibrary;
5553
import com.oracle.graal.python.builtins.objects.str.PString;
5654
import com.oracle.graal.python.nodes.PGuards;
@@ -77,6 +75,7 @@
7775
import com.oracle.truffle.api.object.Shape;
7876
import com.oracle.truffle.api.profiles.BranchProfile;
7977
import com.oracle.truffle.api.profiles.ConditionProfile;
78+
import com.oracle.truffle.object.ShapeImpl;
8079

8180
/**
8281
* This storage keeps a reference to the MRO when used for a type dict. Writing to this storage will
@@ -122,25 +121,11 @@ protected static Object[] keyArray(DynamicObjectStorage self) {
122121
}
123122

124123
protected static Object[] keyArray(Shape shape) {
125-
List<Object> keyList = keyList(shape);
126-
return keyList.toArray(new Object[keyList.size()]);
124+
return ((ShapeImpl) shape).getKeyArray();
127125
}
128126

129127
protected static List<Object> keyList(Shape shape) {
130-
return filter(shape.getKeyList());
131-
}
132-
133-
@TruffleBoundary
134-
private static List<Object> filter(List<Object> l) {
135-
ArrayList<Object> keyList = new ArrayList<>(l.size());
136-
Iterator<Object> it = l.iterator();
137-
while (it.hasNext()) {
138-
Object n = it.next();
139-
if (!(n instanceof HiddenPythonKey)) {
140-
keyList.add(n);
141-
}
142-
}
143-
return keyList;
128+
return shape.getKeyList();
144129
}
145130

146131
@ExportMessage

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/getsetdescriptor/HiddenKeyDescriptor.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,18 +43,19 @@
4343
import com.oracle.graal.python.PythonLanguage;
4444
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
4545
import com.oracle.graal.python.builtins.objects.object.PythonBuiltinObject;
46+
import com.oracle.truffle.api.object.HiddenKey;
4647

4748
public final class HiddenKeyDescriptor extends PythonBuiltinObject {
48-
private final HiddenPythonKey key;
49+
private final HiddenKey key;
4950
private final Object type;
5051

51-
public HiddenKeyDescriptor(PythonLanguage lang, HiddenPythonKey key, Object type) {
52+
public HiddenKeyDescriptor(PythonLanguage lang, HiddenKey key, Object type) {
5253
super(PythonBuiltinClassType.GetSetDescriptor, PythonBuiltinClassType.GetSetDescriptor.getInstanceShape(lang));
5354
this.key = key;
5455
this.type = type;
5556
}
5657

57-
public HiddenPythonKey getKey() {
58+
public HiddenKey getKey() {
5859
return key;
5960
}
6061

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/getsetdescriptor/HiddenPythonKey.java

Lines changed: 0 additions & 82 deletions
This file was deleted.

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/object/PythonObject.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@
3434
import com.oracle.graal.python.builtins.objects.PNone;
3535
import com.oracle.graal.python.builtins.objects.PythonAbstractObject;
3636
import com.oracle.graal.python.builtins.objects.dict.PDict;
37-
import com.oracle.graal.python.builtins.objects.getsetdescriptor.HiddenPythonKey;
3837
import com.oracle.graal.python.builtins.objects.type.PythonBuiltinClass;
3938
import com.oracle.graal.python.builtins.objects.type.PythonManagedClass;
4039
import com.oracle.graal.python.nodes.HiddenAttributes;
@@ -137,7 +136,7 @@ public final Object getAttribute(Object key) {
137136
@SuppressWarnings("deprecation")
138137
@TruffleBoundary
139138
public void setAttribute(Object name, Object value) {
140-
assert name instanceof String || name instanceof HiddenPythonKey || name instanceof HiddenKey : name.getClass().getSimpleName();
139+
assert name instanceof String || name instanceof HiddenKey : name.getClass().getSimpleName();
141140
CompilerAsserts.neverPartOfCompilation();
142141
DynamicObjectLibrary.getUncached().put(getStorage(), name, value);
143142
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/type/PythonBuiltinClass.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929

3030
import com.oracle.graal.python.PythonLanguage;
3131
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
32-
import com.oracle.graal.python.builtins.objects.getsetdescriptor.HiddenPythonKey;
3332
import com.oracle.graal.python.builtins.objects.object.PythonObjectLibrary;
3433
import com.oracle.graal.python.nodes.ErrorMessages;
3534
import com.oracle.graal.python.nodes.classes.IsSubtypeNode;
@@ -41,6 +40,7 @@
4140
import com.oracle.truffle.api.library.CachedLibrary;
4241
import com.oracle.truffle.api.library.ExportLibrary;
4342
import com.oracle.truffle.api.library.ExportMessage;
43+
import com.oracle.truffle.api.object.HiddenKey;
4444

4545
/**
4646
* A Python built-in class that is immutable.
@@ -59,7 +59,7 @@ public PythonBuiltinClass(PythonLanguage lang, PythonBuiltinClassType builtinCla
5959
@Override
6060
public void setAttribute(Object name, Object value) {
6161
CompilerAsserts.neverPartOfCompilation();
62-
if (name instanceof HiddenPythonKey || !PythonLanguage.getCore().isInitialized()) {
62+
if (name instanceof HiddenKey || !PythonLanguage.getCore().isInitialized()) {
6363
setAttributeUnsafe(name, value);
6464
} else {
6565
throw PythonLanguage.getCore().raise(TypeError, ErrorMessages.CANT_SET_ATTRIBUTES_OF_TYPE_S, this);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/type/TypeBuiltins.java

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
import static com.oracle.graal.python.runtime.exception.PythonErrorType.TypeError;
6161

6262
import java.util.Arrays;
63+
import java.util.HashMap;
6364
import java.util.List;
6465
import java.util.Set;
6566

@@ -80,7 +81,6 @@
8081
import com.oracle.graal.python.builtins.objects.function.PFunction;
8182
import com.oracle.graal.python.builtins.objects.function.PKeyword;
8283
import com.oracle.graal.python.builtins.objects.getsetdescriptor.DescriptorDeleteMarker;
83-
import com.oracle.graal.python.builtins.objects.getsetdescriptor.HiddenPythonKey;
8484
import com.oracle.graal.python.builtins.objects.list.PList;
8585
import com.oracle.graal.python.builtins.objects.object.PythonObject;
8686
import com.oracle.graal.python.builtins.objects.object.PythonObjectLibrary;
@@ -144,22 +144,31 @@
144144
import com.oracle.truffle.api.frame.VirtualFrame;
145145
import com.oracle.truffle.api.interop.InteropLibrary;
146146
import com.oracle.truffle.api.library.CachedLibrary;
147+
import com.oracle.truffle.api.object.HiddenKey;
147148
import com.oracle.truffle.api.profiles.BranchProfile;
148149
import com.oracle.truffle.api.profiles.ConditionProfile;
149150

150151
@CoreFunctions(extendClasses = PythonBuiltinClassType.PythonClass)
151152
public class TypeBuiltins extends PythonBuiltins {
152153

153-
public static final HiddenPythonKey TYPE_DICTOFFSET = new HiddenPythonKey(__DICTOFFSET__);
154-
public static final HiddenPythonKey TYPE_ITEMSIZE = new HiddenPythonKey(__ITEMSIZE__);
155-
public static final HiddenPythonKey TYPE_BASICSIZE = new HiddenPythonKey(__BASICSIZE__);
156-
public static final HiddenPythonKey TYPE_ALLOC = new HiddenPythonKey(__ALLOC__);
157-
public static final HiddenPythonKey TYPE_DEALLOC = new HiddenPythonKey("__dealloc__");
158-
public static final HiddenPythonKey TYPE_DEL = new HiddenPythonKey("__del__");
159-
public static final HiddenPythonKey TYPE_FREE = new HiddenPythonKey("__free__");
160-
public static final HiddenPythonKey TYPE_FLAGS = new HiddenPythonKey(__FLAGS__);
161-
public static final HiddenPythonKey TYPE_VECTORCALL_OFFSET = new HiddenPythonKey("__vectorcall_offset__");
162-
private static final HiddenPythonKey TYPE_DOC = new HiddenPythonKey(__DOC__);
154+
public static final HiddenKey TYPE_DICTOFFSET = new HiddenKey(__DICTOFFSET__);
155+
public static final HiddenKey TYPE_ITEMSIZE = new HiddenKey(__ITEMSIZE__);
156+
public static final HiddenKey TYPE_BASICSIZE = new HiddenKey(__BASICSIZE__);
157+
public static final HiddenKey TYPE_ALLOC = new HiddenKey(__ALLOC__);
158+
public static final HiddenKey TYPE_DEALLOC = new HiddenKey("__dealloc__");
159+
public static final HiddenKey TYPE_DEL = new HiddenKey("__del__");
160+
public static final HiddenKey TYPE_FREE = new HiddenKey("__free__");
161+
public static final HiddenKey TYPE_FLAGS = new HiddenKey(__FLAGS__);
162+
public static final HiddenKey TYPE_VECTORCALL_OFFSET = new HiddenKey("__vectorcall_offset__");
163+
private static final HiddenKey TYPE_DOC = new HiddenKey(__DOC__);
164+
165+
public static final HashMap<String, HiddenKey> INITIAL_HIDDEN_TYPE_KEYS = new HashMap<>();
166+
167+
static {
168+
for (HiddenKey key : new HiddenKey[]{TYPE_DICTOFFSET, TYPE_ITEMSIZE, TYPE_BASICSIZE, TYPE_ALLOC, TYPE_DEALLOC, TYPE_DEL, TYPE_FREE, TYPE_FLAGS, TYPE_VECTORCALL_OFFSET, TYPE_DOC}) {
169+
INITIAL_HIDDEN_TYPE_KEYS.put(key.getName(), key);
170+
}
171+
}
163172

164173
@Override
165174
protected List<? extends NodeFactory<? extends PythonBuiltinBaseNode>> getNodeFactories() {

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
*/
4141
package com.oracle.graal.python.nodes.attributes;
4242

43-
import com.oracle.graal.python.builtins.objects.getsetdescriptor.HiddenPythonKey;
4443
import com.oracle.graal.python.nodes.PGuards;
4544
import com.oracle.graal.python.nodes.PNodeWithContext;
4645
import com.oracle.graal.python.nodes.util.CannotCastException;
@@ -68,7 +67,7 @@ protected static Location getLocationOrNull(Property prop) {
6867
}
6968

7069
protected static boolean isHiddenKey(Object key) {
71-
return key instanceof HiddenPythonKey || key instanceof HiddenKey;
70+
return key instanceof HiddenKey;
7271
}
7372

7473
@Override

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/runtime/object/PythonObjectFactory.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,6 @@
7575
import com.oracle.graal.python.builtins.objects.generator.PGenerator;
7676
import com.oracle.graal.python.builtins.objects.getsetdescriptor.GetSetDescriptor;
7777
import com.oracle.graal.python.builtins.objects.getsetdescriptor.HiddenKeyDescriptor;
78-
import com.oracle.graal.python.builtins.objects.getsetdescriptor.HiddenPythonKey;
7978
import com.oracle.graal.python.builtins.objects.ints.PInt;
8079
import com.oracle.graal.python.builtins.objects.iterator.PArrayIterator;
8180
import com.oracle.graal.python.builtins.objects.iterator.PBaseSetIterator;
@@ -166,6 +165,7 @@
166165
import com.oracle.truffle.api.interop.TruffleObject;
167166
import com.oracle.truffle.api.nodes.Node;
168167
import com.oracle.truffle.api.object.DynamicObject;
168+
import com.oracle.truffle.api.object.HiddenKey;
169169
import com.oracle.truffle.api.object.Shape;
170170

171171
@GenerateUncached
@@ -514,7 +514,7 @@ public GetSetDescriptor createGetSetDescriptor(Object get, Object set, String na
514514
return trace(new GetSetDescriptor(getLanguage(), get, set, name, type, allowsDelete));
515515
}
516516

517-
public HiddenKeyDescriptor createHiddenKeyDescriptor(HiddenPythonKey key, Object type) {
517+
public final HiddenKeyDescriptor createHiddenKeyDescriptor(HiddenKey key, Object type) {
518518
return trace(new HiddenKeyDescriptor(getLanguage(), key, type));
519519
}
520520

0 commit comments

Comments
 (0)