Skip to content

Commit 6a54a3a

Browse files
committed
Replace usages of DynamicObjectLibrary with Read/Write attr nodes
1 parent 8f7aa59 commit 6a54a3a

14 files changed

+72
-74
lines changed

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

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@
7979
import com.oracle.graal.python.nodes.HiddenAttr;
8080
import com.oracle.graal.python.nodes.PNodeWithContext;
8181
import com.oracle.graal.python.nodes.PRaiseNode;
82+
import com.oracle.graal.python.nodes.attributes.WriteAttributeToDynamicObjectNode;
8283
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
8384
import com.oracle.graal.python.nodes.function.PythonBuiltinNode;
8485
import com.oracle.graal.python.nodes.function.builtins.PythonBinaryBuiltinNode;
@@ -110,10 +111,8 @@
110111
import com.oracle.truffle.api.dsl.Specialization;
111112
import com.oracle.truffle.api.dsl.TypeSystemReference;
112113
import com.oracle.truffle.api.frame.VirtualFrame;
113-
import com.oracle.truffle.api.library.CachedLibrary;
114114
import com.oracle.truffle.api.nodes.ExplodeLoop;
115115
import com.oracle.truffle.api.nodes.Node;
116-
import com.oracle.truffle.api.object.DynamicObjectLibrary;
117116
import com.oracle.truffle.api.strings.TruffleString;
118117

119118
@CoreFunctions(defineModule = "time")
@@ -1107,7 +1106,7 @@ protected ArgumentClinicProvider getArgumentClinic() {
11071106
@Specialization
11081107
static Object getClockInfo(TruffleString name,
11091108
@Bind("this") Node inliningTarget,
1110-
@CachedLibrary(limit = "1") DynamicObjectLibrary dyLib,
1109+
@Cached WriteAttributeToDynamicObjectNode writeAttrNode,
11111110
@Cached TruffleString.EqualNode equalNode,
11121111
@Cached PythonObjectFactory factory,
11131112
@Cached PRaiseNode.Lazy raiseNode) {
@@ -1126,10 +1125,10 @@ static Object getClockInfo(TruffleString name,
11261125
}
11271126

11281127
final PSimpleNamespace ns = factory.createSimpleNamespace();
1129-
dyLib.put(ns, T_ADJUSTABLE, adjustable);
1130-
dyLib.put(ns, T_IMPLEMENTATION, name);
1131-
dyLib.put(ns, T_MONOTONIC, monotonic);
1132-
dyLib.put(ns, T_RESOLUTION, TIME_RESOLUTION);
1128+
writeAttrNode.execute(ns, T_ADJUSTABLE, adjustable);
1129+
writeAttrNode.execute(ns, T_IMPLEMENTATION, name);
1130+
writeAttrNode.execute(ns, T_MONOTONIC, monotonic);
1131+
writeAttrNode.execute(ns, T_RESOLUTION, TIME_RESOLUTION);
11331132
return ns;
11341133
}
11351134
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@
107107
import com.oracle.graal.python.nodes.HiddenAttr;
108108
import com.oracle.graal.python.nodes.PRaiseNode;
109109
import com.oracle.graal.python.nodes.SpecialAttributeNames;
110+
import com.oracle.graal.python.nodes.attributes.ReadAttributeFromDynamicObjectNode;
110111
import com.oracle.graal.python.nodes.call.CallNode;
111112
import com.oracle.graal.python.nodes.frame.ReadCallerFrameNode;
112113
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
@@ -144,7 +145,6 @@
144145
import com.oracle.truffle.api.frame.VirtualFrame;
145146
import com.oracle.truffle.api.nodes.Node;
146147
import com.oracle.truffle.api.nodes.NodeInfo;
147-
import com.oracle.truffle.api.object.DynamicObjectLibrary;
148148
import com.oracle.truffle.api.profiles.BranchProfile;
149149
import com.oracle.truffle.api.strings.TruffleString;
150150

@@ -1200,7 +1200,7 @@ protected void execute(Frame frame, Object source, Object category, TruffleStrin
12001200
@TruffleBoundary
12011201
private void executeImpl(Object source, Object category, TruffleString format, int stackLevel, Object... formatArgs) {
12021202
PythonModule _warnings = PythonContext.get(this).lookupBuiltinModule(T__WARNINGS);
1203-
Object warn = DynamicObjectLibrary.getUncached().getOrDefault(_warnings, T_WARN, PNone.NONE);
1203+
Object warn = ReadAttributeFromDynamicObjectNode.executeUncached(_warnings, T_WARN, PNone.NONE);
12041204
TruffleString message;
12051205
try {
12061206
message = TruffleString.fromJavaStringUncached(ErrorMessageFormatter.format(format, formatArgs), TS_ENCODING);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextMethodBuiltins.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,15 +59,14 @@
5959
import com.oracle.graal.python.builtins.objects.function.PBuiltinFunction;
6060
import com.oracle.graal.python.builtins.objects.method.PBuiltinMethod;
6161
import com.oracle.graal.python.nodes.HiddenAttr;
62+
import com.oracle.graal.python.nodes.attributes.WriteAttributeToDynamicObjectNode;
6263
import com.oracle.graal.python.runtime.object.PythonObjectFactory;
6364
import com.oracle.truffle.api.dsl.Bind;
6465
import com.oracle.truffle.api.dsl.Cached;
6566
import com.oracle.truffle.api.dsl.GenerateCached;
6667
import com.oracle.truffle.api.dsl.GenerateInline;
6768
import com.oracle.truffle.api.dsl.Specialization;
68-
import com.oracle.truffle.api.library.CachedLibrary;
6969
import com.oracle.truffle.api.nodes.Node;
70-
import com.oracle.truffle.api.object.DynamicObjectLibrary;
7170
import com.oracle.truffle.api.strings.TruffleString;
7271

7372
public final class PythonCextMethodBuiltins {
@@ -94,20 +93,20 @@ static Object doNativeCallable(Node inliningTarget, Object methodDefPtr, Truffle
9493
@Cached(inline = false) PythonObjectFactory factory,
9594
@Cached CreateFunctionNode createFunctionNode,
9695
@Cached HiddenAttr.WriteNode writeHiddenAttrNode,
97-
@CachedLibrary(limit = "1") DynamicObjectLibrary dylib) {
96+
@Cached(inline = false) WriteAttributeToDynamicObjectNode writeAttrNode) {
9897
Object f = createFunctionNode.execute(inliningTarget, name, methObj, wrapper, PNone.NO_VALUE, flags);
9998
assert f instanceof PBuiltinFunction;
10099
PBuiltinFunction func = (PBuiltinFunction) f;
101100
writeHiddenAttrNode.execute(inliningTarget, func, METHOD_DEF_PTR, methodDefPtr);
102-
dylib.put(func, T___NAME__, name);
103-
dylib.put(func, T___DOC__, doc);
101+
writeAttrNode.execute(func, T___NAME__, name);
102+
writeAttrNode.execute(func, T___DOC__, doc);
104103
PBuiltinMethod method;
105104
if (cls != PNone.NO_VALUE) {
106105
method = factory.createBuiltinMethod(self, func, cls);
107106
} else {
108107
method = factory.createBuiltinMethod(self, func);
109108
}
110-
dylib.put(method, T___MODULE__, module);
109+
writeAttrNode.execute(method, T___MODULE__, module);
111110
return method;
112111
}
113112
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextModuleBuiltins.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@
7171
import com.oracle.graal.python.lib.PyUnicodeCheckNode;
7272
import com.oracle.graal.python.nodes.ErrorMessages;
7373
import com.oracle.graal.python.nodes.PRaiseNode;
74+
import com.oracle.graal.python.nodes.attributes.ReadAttributeFromDynamicObjectNode;
7475
import com.oracle.graal.python.nodes.attributes.ReadAttributeFromObjectNode;
7576
import com.oracle.graal.python.nodes.attributes.WriteAttributeToObjectNode;
7677
import com.oracle.graal.python.nodes.call.CallNode;
@@ -83,9 +84,7 @@
8384
import com.oracle.truffle.api.dsl.Cached.Shared;
8485
import com.oracle.truffle.api.dsl.ImportStatic;
8586
import com.oracle.truffle.api.dsl.Specialization;
86-
import com.oracle.truffle.api.library.CachedLibrary;
8787
import com.oracle.truffle.api.nodes.Node;
88-
import com.oracle.truffle.api.object.DynamicObjectLibrary;
8988
import com.oracle.truffle.api.strings.TruffleString;
9089

9190
public final class PythonCextModuleBuiltins {
@@ -234,9 +233,9 @@ abstract static class PyTruffleModule_AddFunctionToModule extends CApi7BuiltinNo
234233
static Object moduleFunction(Object methodDefPtr, PythonModule mod, TruffleString name, Object cfunc, int flags, int wrapper, Object doc,
235234
@Bind("this") Node inliningTarget,
236235
@Cached ObjectBuiltins.SetattrNode setattrNode,
237-
@CachedLibrary(limit = "1") DynamicObjectLibrary dylib,
236+
@Cached ReadAttributeFromDynamicObjectNode readAttrNode,
238237
@Cached CFunctionNewExMethodNode cFunctionNewExMethodNode) {
239-
Object modName = dylib.getOrDefault(mod.getStorage(), T___NAME__, null);
238+
Object modName = readAttrNode.execute(mod.getStorage(), T___NAME__, null);
240239
assert modName != null : "module name is missing!";
241240
Object func = cFunctionNewExMethodNode.execute(inliningTarget, methodDefPtr, name, cfunc, flags, wrapper, mod, modName, doc);
242241
setattrNode.execute(null, mod, name, func);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextTypeBuiltins.java

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,6 @@
120120
import com.oracle.truffle.api.library.CachedLibrary;
121121
import com.oracle.truffle.api.nodes.Node;
122122
import com.oracle.truffle.api.nodes.RootNode;
123-
import com.oracle.truffle.api.object.DynamicObjectLibrary;
124123
import com.oracle.truffle.api.profiles.InlinedExactClassProfile;
125124
import com.oracle.truffle.api.strings.TruffleString;
126125
import com.oracle.truffle.api.utilities.CyclicAssumption;
@@ -253,19 +252,18 @@ abstract static class NewClassMethodNode extends Node {
253252
static Object classOrStatic(Node inliningTarget, Object methodDefPtr, TruffleString name, Object methObj, int flags, int wrapper, Object type, Object doc,
254253
@Cached(inline = false) PythonObjectFactory factory,
255254
@Exclusive @Cached HiddenAttr.WriteNode writeHiddenAttrNode,
256-
@CachedLibrary(limit = "1") DynamicObjectLibrary dylib,
255+
@Cached(inline = false) WriteAttributeToDynamicObjectNode writeAttrNode,
257256
@Exclusive @Cached CreateFunctionNode createFunctionNode) {
258-
Object func = createFunctionNode.execute(inliningTarget, name, methObj, wrapper, type, flags);
259-
assert func instanceof PythonAbstractObject;
260-
writeHiddenAttrNode.execute(inliningTarget, (PythonAbstractObject) func, METHOD_DEF_PTR, methodDefPtr);
257+
PythonAbstractObject func = createFunctionNode.execute(inliningTarget, name, methObj, wrapper, type, flags);
258+
writeHiddenAttrNode.execute(inliningTarget, func, METHOD_DEF_PTR, methodDefPtr);
261259
PythonObject function;
262260
if ((flags & METH_CLASS) != 0) {
263261
function = factory.createClassmethodFromCallableObj(func);
264262
} else {
265263
function = factory.createStaticmethodFromCallableObj(func);
266264
}
267-
dylib.put(function, T___NAME__, name);
268-
dylib.put(function, T___DOC__, doc);
265+
writeAttrNode.execute(function, T___NAME__, name);
266+
writeAttrNode.execute(function, T___DOC__, doc);
269267
return function;
270268
}
271269

@@ -274,10 +272,10 @@ static Object doNativeCallable(Node inliningTarget, Object methodDefPtr, Truffle
274272
@Cached PyObjectSetAttrNode setattr,
275273
@Exclusive @Cached HiddenAttr.WriteNode writeNode,
276274
@Exclusive @Cached CreateFunctionNode createFunctionNode) {
277-
Object func = createFunctionNode.execute(inliningTarget, name, methObj, wrapper, type, flags);
275+
PythonAbstractObject func = createFunctionNode.execute(inliningTarget, name, methObj, wrapper, type, flags);
278276
setattr.execute(inliningTarget, func, T___NAME__, name);
279277
setattr.execute(inliningTarget, func, T___DOC__, doc);
280-
writeNode.execute(inliningTarget, (PythonAbstractObject) func, METHOD_DEF_PTR, methodDefPtr);
278+
writeNode.execute(inliningTarget, func, METHOD_DEF_PTR, methodDefPtr);
281279
return func;
282280
}
283281
}
@@ -350,7 +348,6 @@ abstract static class CreateGetSetNode extends Node {
350348
@TruffleBoundary
351349
static GetSetDescriptor createGetSet(Node inliningTarget, TruffleString name, Object cls, Object getter, Object setter, Object doc, Object closure,
352350
@Cached(inline = false) PythonObjectFactory factory,
353-
@CachedLibrary(limit = "1") DynamicObjectLibrary dylib,
354351
@CachedLibrary(limit = "2") InteropLibrary interopLibrary) {
355352
assert !(doc instanceof CArrayWrapper);
356353
// note: 'doc' may be NULL; in this case, we would store 'None'
@@ -371,7 +368,7 @@ static GetSetDescriptor createGetSet(Node inliningTarget, TruffleString name, Ob
371368

372369
// create get-set descriptor
373370
GetSetDescriptor descriptor = factory.createGetSetDescriptor(get, set, name, cls, hasSetter);
374-
dylib.put(descriptor.getStorage(), T___DOC__, doc);
371+
WriteAttributeToDynamicObjectNode.executeUncached(descriptor, T___DOC__, doc);
375372
return descriptor;
376373
}
377374

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/ctypes/CDataBuiltins.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@
7575
import com.oracle.graal.python.nodes.PRaiseNode;
7676
import com.oracle.graal.python.nodes.SpecialAttributeNames;
7777
import com.oracle.graal.python.nodes.attributes.GetAttributeNode;
78+
import com.oracle.graal.python.nodes.attributes.ReadAttributeFromDynamicObjectNode;
7879
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
7980
import com.oracle.graal.python.nodes.function.PythonBuiltinNode;
8081
import com.oracle.graal.python.nodes.function.builtins.PythonBinaryBuiltinNode;
@@ -90,9 +91,7 @@
9091
import com.oracle.truffle.api.dsl.NodeFactory;
9192
import com.oracle.truffle.api.dsl.Specialization;
9293
import com.oracle.truffle.api.frame.VirtualFrame;
93-
import com.oracle.truffle.api.library.CachedLibrary;
9494
import com.oracle.truffle.api.nodes.Node;
95-
import com.oracle.truffle.api.object.DynamicObjectLibrary;
9695

9796
@CoreFunctions(extendClasses = PyCData)
9897
public final class CDataBuiltins extends PythonBuiltins {
@@ -161,7 +160,7 @@ static Object reduce(VirtualFrame frame, CDataObject self,
161160
@Bind("this") Node inliningTarget,
162161
@Cached PyObjectStgDictNode pyObjectStgDictNode,
163162
@Cached("create(T___DICT__)") GetAttributeNode getAttributeNode,
164-
@CachedLibrary(limit = "1") DynamicObjectLibrary dylib,
163+
@Cached ReadAttributeFromDynamicObjectNode readAttrNode,
165164
@Cached PointerNodes.ReadBytesNode readBytesNode,
166165
@Cached GetClassNode getClassNode,
167166
@Cached PythonObjectFactory factory,
@@ -176,7 +175,7 @@ static Object reduce(VirtualFrame frame, CDataObject self,
176175
Object clazz = getClassNode.execute(inliningTarget, self);
177176
Object[] t2 = new Object[]{clazz, factory.createTuple(t1)};
178177
PythonModule ctypes = PythonContext.get(inliningTarget).lookupBuiltinModule(T__CTYPES);
179-
Object unpickle = dylib.getOrDefault(ctypes.getStorage(), T_UNPICKLE, null);
178+
Object unpickle = readAttrNode.execute(ctypes.getStorage(), T_UNPICKLE, null);
180179
if (unpickle == null) {
181180
CompilerDirectives.transferToInterpreterAndInvalidate();
182181
throw PRaiseNode.raiseUncached(inliningTarget, NotImplementedError, toTruffleStringUncached("unpickle isn't supported yet."));

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ static int length(DynamicObjectStorage self,
171171
}
172172

173173
private static boolean hasStringKey(DynamicObjectStorage self, TruffleString key, ReadAttributeFromDynamicObjectNode readNode) {
174-
return readNode.execute(self.store, key) != PNone.NO_VALUE;
174+
return readNode.execute(self.store, key, PNone.NO_VALUE) != PNone.NO_VALUE;
175175
}
176176

177177
private static int incrementLen(DynamicObjectStorage self, ReadAttributeFromDynamicObjectNode readNode, int len, Object key) {
@@ -201,7 +201,7 @@ abstract static class GetItemNode extends Node {
201201
static Object string(Node inliningTarget, DynamicObjectStorage self, TruffleString key, @SuppressWarnings("unused") long keyHash,
202202
@Shared("readKey") @Cached(inline = false) ReadAttributeFromDynamicObjectNode readKey,
203203
@Exclusive @Cached InlinedConditionProfile noValueProfile) {
204-
Object result = readKey.execute(self.store, key);
204+
Object result = readKey.execute(self.store, key, PNone.NO_VALUE);
205205
return noValueProfile.profile(inliningTarget, result == PNone.NO_VALUE) ? null : result;
206206
}
207207

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/method/AbstractMethodBuiltins.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,9 @@
6363
import com.oracle.graal.python.nodes.PGuards;
6464
import com.oracle.graal.python.nodes.PRaiseNode;
6565
import com.oracle.graal.python.nodes.attributes.GetAttributeNode;
66+
import com.oracle.graal.python.nodes.attributes.ReadAttributeFromDynamicObjectNode;
6667
import com.oracle.graal.python.nodes.attributes.ReadAttributeFromObjectNode;
68+
import com.oracle.graal.python.nodes.attributes.WriteAttributeToDynamicObjectNode;
6769
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
6870
import com.oracle.graal.python.nodes.function.PythonBuiltinNode;
6971
import com.oracle.graal.python.nodes.function.builtins.PythonBinaryBuiltinNode;
@@ -87,9 +89,7 @@
8789
import com.oracle.truffle.api.dsl.Specialization;
8890
import com.oracle.truffle.api.frame.VirtualFrame;
8991
import com.oracle.truffle.api.interop.InteropLibrary;
90-
import com.oracle.truffle.api.library.CachedLibrary;
9192
import com.oracle.truffle.api.nodes.Node;
92-
import com.oracle.truffle.api.object.DynamicObjectLibrary;
9393
import com.oracle.truffle.api.strings.TruffleString;
9494

9595
@CoreFunctions(extendClasses = {PythonBuiltinClassType.PMethod, PythonBuiltinClassType.PBuiltinFunctionOrMethod, PythonBuiltinClassType.MethodWrapper})
@@ -207,14 +207,14 @@ static long hash(PBuiltinMethod self) {
207207
@GenerateNodeFactory
208208
abstract static class GetModuleNode extends PythonBinaryBuiltinNode {
209209

210-
@Specialization(guards = "isNoValue(none)", limit = "2")
210+
@Specialization(guards = "isNoValue(none)")
211211
static Object getModule(VirtualFrame frame, PBuiltinMethod self, @SuppressWarnings("unused") PNone none,
212212
@Bind("this") Node inliningTarget,
213213
@Cached("createFor(this)") IndirectCallData indirectCallData,
214214
@Cached PyObjectLookupAttr lookup,
215-
@CachedLibrary("self") DynamicObjectLibrary dylib) {
215+
@Cached ReadAttributeFromDynamicObjectNode readAttrNode) {
216216
// No profiling, performance here is not very important
217-
Object module = dylib.getOrDefault(self, T___MODULE__, PNone.NO_VALUE);
217+
Object module = readAttrNode.execute(self, T___MODULE__, PNone.NO_VALUE);
218218
if (module != PNone.NO_VALUE) {
219219
return module;
220220
}
@@ -231,10 +231,10 @@ static Object getModule(VirtualFrame frame, PBuiltinMethod self, @SuppressWarnin
231231
return PNone.NONE;
232232
}
233233

234-
@Specialization(guards = "!isNoValue(value)", limit = "2")
234+
@Specialization(guards = "!isNoValue(value)")
235235
static Object getModule(PBuiltinMethod self, Object value,
236-
@CachedLibrary("self") DynamicObjectLibrary dylib) {
237-
dylib.put(self.getStorage(), T___MODULE__, value);
236+
@Cached WriteAttributeToDynamicObjectNode writeAttrNode) {
237+
writeAttrNode.execute(self, T___MODULE__, value);
238238
return PNone.NONE;
239239
}
240240

0 commit comments

Comments
 (0)