Skip to content

Commit c551b37

Browse files
committed
Export getFormatString for CDataObject
1 parent 5750b2b commit c551b37

File tree

1 file changed

+30
-1
lines changed
  • graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/ctypes

1 file changed

+30
-1
lines changed

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

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2021, 2024, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* The Universal Permissive License (UPL), Version 1.0
@@ -40,13 +40,16 @@
4040
*/
4141
package com.oracle.graal.python.builtins.modules.ctypes;
4242

43+
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
4344
import com.oracle.graal.python.builtins.modules.ctypes.memory.Pointer;
4445
import com.oracle.graal.python.builtins.modules.ctypes.memory.PointerNodes;
4546
import com.oracle.graal.python.builtins.objects.buffer.PythonBufferAccessLibrary;
4647
import com.oracle.graal.python.builtins.objects.buffer.PythonBufferAcquireLibrary;
4748
import com.oracle.graal.python.builtins.objects.cext.capi.PythonNativeWrapper.PythonAbstractObjectNativeWrapper;
4849
import com.oracle.graal.python.builtins.objects.cext.capi.transitions.CApiTransitions;
4950
import com.oracle.graal.python.builtins.objects.object.PythonBuiltinObject;
51+
import com.oracle.graal.python.lib.PyObjectTypeCheck;
52+
import com.oracle.graal.python.nodes.object.GetClassNode;
5053
import com.oracle.graal.python.nodes.util.CastToJavaStringNode;
5154
import com.oracle.truffle.api.dsl.Bind;
5255
import com.oracle.truffle.api.dsl.Cached;
@@ -58,6 +61,7 @@
5861
import com.oracle.truffle.api.nodes.Node;
5962
import com.oracle.truffle.api.object.Shape;
6063
import com.oracle.truffle.api.profiles.InlinedConditionProfile;
64+
import com.oracle.truffle.api.strings.TruffleString;
6165

6266
@ExportLibrary(PythonBufferAcquireLibrary.class)
6367
@ExportLibrary(PythonBufferAccessLibrary.class)
@@ -104,6 +108,31 @@ int getBufferLength() {
104108
return b_size;
105109
}
106110

111+
@ExportMessage
112+
TruffleString getFormatString(
113+
@Bind("$node") Node inliningTarget,
114+
@Shared @Cached GetClassNode getClassNode,
115+
@Shared @Cached StgDictBuiltins.PyTypeStgDictNode stgDictNode) {
116+
Object itemType = getClassNode.execute(inliningTarget, this);
117+
StgDictObject dict = stgDictNode.execute(inliningTarget, itemType);
118+
return dict.format;
119+
}
120+
121+
@ExportMessage
122+
int getItemSize(
123+
@Bind("$node") Node inliningTarget,
124+
@Shared @Cached GetClassNode getClassNode,
125+
@Shared @Cached StgDictBuiltins.PyTypeStgDictNode stgDictNode,
126+
@Cached PyObjectTypeCheck typeCheck) {
127+
Object itemType = getClassNode.execute(inliningTarget, this);
128+
while (typeCheck.execute(inliningTarget, itemType, PythonBuiltinClassType.PyCArrayType)) {
129+
StgDictObject stgDict = stgDictNode.execute(inliningTarget, itemType);
130+
itemType = stgDict.proto;
131+
}
132+
StgDictObject itemDict = stgDictNode.execute(inliningTarget, itemType);
133+
return itemDict.size;
134+
}
135+
107136
@ExportMessage
108137
byte readByte(int byteIndex,
109138
@Bind("$node") Node inliningTarget,

0 commit comments

Comments
 (0)