Skip to content

Commit e2b13b3

Browse files
fangerertimfel
authored andcommitted
Allow any Python string representation in StgDictObject.fieldsNames
1 parent a91a5bb commit e2b13b3

File tree

3 files changed

+13
-11
lines changed

3 files changed

+13
-11
lines changed

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import com.oracle.graal.python.builtins.objects.cext.capi.PythonNativeWrapper;
4646
import com.oracle.graal.python.builtins.objects.cext.capi.transitions.CApiTransitions;
4747
import com.oracle.graal.python.builtins.objects.object.PythonBuiltinObject;
48+
import com.oracle.graal.python.nodes.util.CastToJavaStringNode;
4849
import com.oracle.graal.python.util.PythonUtils;
4950
import com.oracle.truffle.api.CompilerDirectives;
5051
import com.oracle.truffle.api.dsl.Bind;
@@ -58,7 +59,6 @@
5859
import com.oracle.truffle.api.nodes.Node;
5960
import com.oracle.truffle.api.object.Shape;
6061
import com.oracle.truffle.api.profiles.InlinedConditionProfile;
61-
import com.oracle.truffle.api.strings.TruffleString;
6262
import com.oracle.truffle.llvm.spi.NativeTypeLibrary;
6363

6464
@ExportLibrary(PythonBufferAcquireLibrary.class)
@@ -221,7 +221,7 @@ public CDataObjectWrapper(StgDictObject stgDict, byte[] storage) {
221221
this.nativePointer = null;
222222
}
223223

224-
private int getIndex(String field, TruffleString.ToJavaStringNode toJavaStringNode) {
224+
private int getIndex(String field, CastToJavaStringNode toJavaStringNode) {
225225
String[] fields = getMembers(true, toJavaStringNode);
226226
for (int i = 0; i < fields.length; i++) {
227227
if (fields[i].equals(field)) {
@@ -238,7 +238,7 @@ boolean hasMembers() {
238238

239239
@ExportMessage
240240
String[] getMembers(@SuppressWarnings("unused") boolean includeInternal,
241-
@Shared("ts2js") @Cached TruffleString.ToJavaStringNode toJavaStringNode) {
241+
@Shared @Cached CastToJavaStringNode toJavaStringNode) {
242242
if (members == null) {
243243
members = new String[this.stgDict.fieldsNames.length];
244244
for (int i = 0; i < this.stgDict.fieldsNames.length; i++) {
@@ -250,13 +250,13 @@ String[] getMembers(@SuppressWarnings("unused") boolean includeInternal,
250250

251251
@ExportMessage
252252
boolean isMemberReadable(String member,
253-
@Shared("ts2js") @Cached TruffleString.ToJavaStringNode toJavaStringNode) {
253+
@Shared @Cached CastToJavaStringNode toJavaStringNode) {
254254
return getIndex(member, toJavaStringNode) != -1;
255255
}
256256

257257
@ExportMessage
258258
final boolean isMemberModifiable(String member,
259-
@Shared("ts2js") @Cached TruffleString.ToJavaStringNode toJavaStringNode) {
259+
@Shared @Cached CastToJavaStringNode toJavaStringNode) {
260260
return isMemberReadable(member, toJavaStringNode);
261261
}
262262

@@ -267,7 +267,7 @@ final boolean isMemberInsertable(@SuppressWarnings("unused") String member) {
267267

268268
@ExportMessage
269269
Object readMember(String member,
270-
@Shared("ts2js") @Cached TruffleString.ToJavaStringNode toJavaStringNode) throws UnknownIdentifierException {
270+
@Shared @Cached CastToJavaStringNode toJavaStringNode) throws UnknownIdentifierException {
271271
int idx = getIndex(member, toJavaStringNode);
272272
if (idx != -1) {
273273
return CtypesNodes.getValue(stgDict.fieldsTypes[idx], storage, stgDict.fieldsOffsets[idx]);
@@ -277,7 +277,7 @@ Object readMember(String member,
277277

278278
@ExportMessage
279279
void writeMember(String member, Object value,
280-
@Shared("ts2js") @Cached TruffleString.ToJavaStringNode toJavaStringNode) throws UnknownIdentifierException {
280+
@Shared @Cached CastToJavaStringNode toJavaStringNode) throws UnknownIdentifierException {
281281
int idx = getIndex(member, toJavaStringNode);
282282
if (idx != -1) {
283283
CtypesNodes.setValue(stgDict.fieldsTypes[idx], storage, stgDict.fieldsOffsets[idx], value);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ public final class StgDictObject extends PDict {
8181
int ndim;
8282
int[] shape;
8383

84-
TruffleString[] fieldsNames;
84+
Object[] fieldsNames;
8585
int[] fieldsOffsets;
8686
FFI_TYPES[] fieldsTypes;
8787

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@
101101
import com.oracle.graal.python.nodes.object.BuiltinClassProfiles.IsBuiltinObjectProfile;
102102
import com.oracle.graal.python.nodes.object.GetDictIfExistsNode;
103103
import com.oracle.graal.python.nodes.object.SetDictNode;
104+
import com.oracle.graal.python.nodes.util.CastToTruffleStringNode;
104105
import com.oracle.graal.python.runtime.exception.PException;
105106
import com.oracle.graal.python.runtime.object.PythonObjectFactory;
106107
import com.oracle.truffle.api.dsl.Bind;
@@ -227,6 +228,7 @@ void PyCStructUnionType_update_stgdict(VirtualFrame frame, Object type, Object f
227228
@Cached(parameters = "T__pack_") LookupAttributeInMRONode lookupPack,
228229
@Cached(parameters = "T__use_broken_old_ctypes_structure_semantics_") LookupAttributeInMRONode lookupBrokenCtypes,
229230
@Cached StringUtils.SimpleTruffleStringFormatNode formatNode,
231+
@Cached CastToTruffleStringNode castToTruffleStringNode,
230232
@Cached TruffleStringBuilder.AppendStringNode appendStringNode,
231233
@Cached TruffleStringBuilder.ToStringNode toStringNode) {
232234
/*
@@ -329,7 +331,7 @@ void PyCStructUnionType_update_stgdict(VirtualFrame frame, Object type, Object f
329331
*/
330332
stgdict.format = T_UPPER_B;
331333
}
332-
TruffleString[] fieldsNames = new TruffleString[len];
334+
Object[] fieldsNames = new Object[len];
333335
int[] fieldsOffsets = new int[len];
334336
FFI_TYPES[] fieldsTypes = new FFI_TYPES[len];
335337

@@ -346,7 +348,7 @@ void PyCStructUnionType_update_stgdict(VirtualFrame frame, Object type, Object f
346348
if (tupleLen < 2 || !PGuards.isString(tuple[0]) || (tupleLen > 2 && !PGuards.isInteger(tuple[2]))) {
347349
fieldsError();
348350
}
349-
TruffleString name = (TruffleString) tuple[0];
351+
Object name = tuple[0];
350352
Object desc = tuple[1];
351353
int bitsize = tupleLen >= 3 ? (int) tuple[2] : 0;
352354

@@ -392,7 +394,7 @@ void PyCStructUnionType_update_stgdict(VirtualFrame frame, Object type, Object f
392394

393395
if (isStruct && !isPacked) {
394396
TruffleString fieldfmt = dict.format != null ? dict.format : T_UPPER_B;
395-
TruffleString buf = formatNode.format("%s:%s:", fieldfmt, name);
397+
TruffleString buf = formatNode.format("%s:%s:", fieldfmt, castToTruffleStringNode.execute(name));
396398

397399
if (dict.shape != null) {
398400
stgdict.format = _ctypes_alloc_format_string_with_shape(dict.ndim, dict.shape, stgdict.format, buf, appendStringNode, toStringNode, formatNode);

0 commit comments

Comments
 (0)