Skip to content

Commit 2f0872e

Browse files
committed
Merge remote-tracking branch 'origin/otethal/truffle_string' into fa/labs-numpy-hpy-port
2 parents 8293507 + e1fe2de commit 2f0872e

File tree

10 files changed

+342
-491
lines changed

10 files changed

+342
-491
lines changed

ci.jsonnet

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{ "overlay": "ff44818b631d6a549f8143069c6418baa62f0eae" }
1+
{ "overlay": "8389e99d9899cbf8f939927c130982eab7dfd24e" }

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/Python3Core.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -937,8 +937,8 @@ public final void postInitialize() {
937937
* access is never allowed during native image build time.
938938
*/
939939
if (ImageInfo.inImageCode() && !getContext().isNativeAccessAllowed()) {
940-
builtinModules.remove(BuiltinNames.BZ2);
941-
sysModules.delItem(BuiltinNames.BZ2);
940+
builtinModules.remove(BuiltinNames.T_BZ2);
941+
sysModules.delItem(BuiltinNames.T_BZ2);
942942
}
943943

944944
globalScopeObject = PythonMapScope.createTopScope(getContext());

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/bz2/BZ2ModuleBuiltins.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@
5656
import com.oracle.truffle.api.dsl.NodeFactory;
5757
import com.oracle.truffle.api.dsl.Specialization;
5858

59-
@CoreFunctions(defineModule = BuiltinNames.BZ2)
59+
@CoreFunctions(defineModule = BuiltinNames.J_BZ2)
6060
public class BZ2ModuleBuiltins extends PythonBuiltins {
6161
@Override
6262
protected List<? extends NodeFactory<? extends PythonBuiltinBaseNode>> getNodeFactories() {

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

Lines changed: 171 additions & 171 deletions
Large diffs are not rendered by default.

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

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@
4242

4343
import java.nio.ByteBuffer;
4444
import java.nio.ByteOrder;
45-
import java.nio.charset.Charset;
4645

4746
import com.oracle.graal.python.builtins.objects.bytes.PBytes;
4847
import com.oracle.graal.python.builtins.objects.str.PString;
@@ -60,8 +59,6 @@ public abstract class UnicodeObjectNodes {
6059

6160
@GenerateUncached
6261
public abstract static class UnicodeAsWideCharNode extends Node {
63-
private static Charset UTF32LE = Charset.forName("UTF-32LE");
64-
private static Charset UTF32BE = Charset.forName("UTF-32BE");
6562

6663
public final PBytes executeNativeOrder(Object obj, long elementSize) {
6764
return execute(obj, elementSize, ByteOrder.nativeOrder());

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/hpy/GraalHPyBuffer.java

Lines changed: 42 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,6 @@
4040
*/
4141
package com.oracle.graal.python.builtins.objects.cext.hpy;
4242

43-
import static com.oracle.graal.python.util.PythonUtils.TS_ENCODING;
44-
import static com.oracle.graal.python.util.PythonUtils.tsLiteral;
45-
4643
import com.oracle.graal.python.builtins.objects.PNone;
4744
import com.oracle.graal.python.builtins.objects.PythonAbstractObject;
4845
import com.oracle.graal.python.builtins.objects.cext.common.CArrayWrappers;
@@ -95,20 +92,20 @@
9592
@ExportLibrary(InteropLibrary.class)
9693
@SuppressWarnings("static-method")
9794
public final class GraalHPyBuffer implements TruffleObject {
98-
private static final TruffleString T_MEMBER_BUF = tsLiteral("buf");
99-
private static final TruffleString T_MEMBER_OBJ = tsLiteral("obj");
100-
private static final TruffleString T_MEMBER_LEN = tsLiteral("len");
101-
private static final TruffleString T_MEMBER_ITEMSIZE = tsLiteral("itemsize");
102-
private static final TruffleString T_MEMBER_READONLY = tsLiteral("readonly");
103-
private static final TruffleString T_MEMBER_NDIM = tsLiteral("ndim");
104-
private static final TruffleString T_MEMBER_FORMAT = tsLiteral("format");
105-
private static final TruffleString T_MEMBER_SHAPE = tsLiteral("shape");
106-
private static final TruffleString T_MEMBER_STRIDES = tsLiteral("strides");
107-
private static final TruffleString T_MEMBER_SUBOFFSETS = tsLiteral("suboffsets");
108-
private static final TruffleString T_MEMBER_INTERNAL = tsLiteral("internal");
109-
110-
@CompilationFinal(dimensions = 1) private static final TruffleString[] MEMBERS = new TruffleString[]{T_MEMBER_BUF, T_MEMBER_OBJ, T_MEMBER_LEN, T_MEMBER_ITEMSIZE, T_MEMBER_READONLY, T_MEMBER_NDIM,
111-
T_MEMBER_FORMAT, T_MEMBER_SHAPE, T_MEMBER_STRIDES, T_MEMBER_SUBOFFSETS, T_MEMBER_INTERNAL};
95+
private static final String J_MEMBER_BUF = "buf";
96+
private static final String J_MEMBER_OBJ = "obj";
97+
private static final String J_MEMBER_LEN = "len";
98+
private static final String J_MEMBER_ITEMSIZE = "itemsize";
99+
private static final String J_MEMBER_READONLY = "readonly";
100+
private static final String J_MEMBER_NDIM = "ndim";
101+
private static final String J_MEMBER_FORMAT = "format";
102+
private static final String J_MEMBER_SHAPE = "shape";
103+
private static final String J_MEMBER_STRIDES = "strides";
104+
private static final String J_MEMBER_SUBOFFSETS = "suboffsets";
105+
private static final String J_MEMBER_INTERNAL = "internal";
106+
107+
@CompilationFinal(dimensions = 1) private static final String[] MEMBERS = new String[]{J_MEMBER_BUF, J_MEMBER_OBJ, J_MEMBER_LEN, J_MEMBER_ITEMSIZE, J_MEMBER_READONLY, J_MEMBER_NDIM,
108+
J_MEMBER_FORMAT, J_MEMBER_SHAPE, J_MEMBER_STRIDES, J_MEMBER_SUBOFFSETS, J_MEMBER_INTERNAL};
112109

113110
private final GraalHPyContext context;
114111
private final CExtPyBuffer buffer;
@@ -127,17 +124,14 @@ boolean hasMembers() {
127124

128125
@ExportMessage
129126
Object getMembers(@SuppressWarnings("unused") boolean includeInternal) {
130-
return new PythonAbstractObject.Keys(new Object[]{T_MEMBER_BUF, T_MEMBER_OBJ, T_MEMBER_LEN, T_MEMBER_ITEMSIZE, T_MEMBER_READONLY,
131-
T_MEMBER_NDIM, T_MEMBER_FORMAT, T_MEMBER_SHAPE, T_MEMBER_STRIDES, T_MEMBER_SUBOFFSETS, T_MEMBER_INTERNAL});
127+
return new PythonAbstractObject.Keys(new Object[]{J_MEMBER_BUF, J_MEMBER_OBJ, J_MEMBER_LEN, J_MEMBER_ITEMSIZE, J_MEMBER_READONLY,
128+
J_MEMBER_NDIM, J_MEMBER_FORMAT, J_MEMBER_SHAPE, J_MEMBER_STRIDES, J_MEMBER_SUBOFFSETS, J_MEMBER_INTERNAL});
132129
}
133130

134131
@ExportMessage
135-
boolean isMemberReadable(String member,
136-
@Cached TruffleString.FromJavaStringNode fromJavaStringNode,
137-
@Cached TruffleString.EqualNode eqNode) {
138-
TruffleString tmember = fromJavaStringNode.execute(member, TS_ENCODING);
132+
boolean isMemberReadable(String key) {
139133
for (int i = 0; i < MEMBERS.length; i++) {
140-
if (eqNode.execute(MEMBERS[i], tmember, TS_ENCODING)) {
134+
if (MEMBERS[i].equals(key)) {
141135
return true;
142136
}
143137
}
@@ -148,34 +142,32 @@ boolean isMemberReadable(String member,
148142
static class ReadMember {
149143
@Specialization(guards = "receiver.getSupplier() == cachedSupplier")
150144
static Object readMember(GraalHPyBuffer receiver, String member,
151-
@Cached TruffleString.FromJavaStringNode fromJavaStringNode,
152-
@Cached TruffleString.EqualNode eqNode,
153145
@Cached(value = "receiver.getSupplier()", allowUncached = true) @SuppressWarnings("unused") ConversionNodeSupplier cachedSupplier,
154146
@Cached(value = "cachedSupplier.createToNativeNode()", uncached = "cachedSupplier.getUncachedToNativeNode()") CExtToNativeNode toNativeNode) throws UnknownIdentifierException {
155-
TruffleString tmember = fromJavaStringNode.execute(member, TS_ENCODING);
156-
if (eqNode.execute(T_MEMBER_BUF, tmember, TS_ENCODING)) {
157-
return receiver.buffer.getBuf();
158-
} else if (eqNode.execute(T_MEMBER_OBJ, tmember, TS_ENCODING)) {
159-
Object obj = receiver.buffer.getObj();
160-
return toNativeNode.execute(receiver.context, obj != null ? obj : PNone.NO_VALUE);
161-
} else if (eqNode.execute(T_MEMBER_LEN, tmember, TS_ENCODING)) {
162-
return receiver.buffer.getLen();
163-
} else if (eqNode.execute(T_MEMBER_ITEMSIZE, tmember, TS_ENCODING)) {
164-
return receiver.buffer.getItemSize();
165-
} else if (eqNode.execute(T_MEMBER_READONLY, tmember, TS_ENCODING)) {
166-
return PInt.intValue(receiver.buffer.isReadOnly());
167-
} else if (eqNode.execute(T_MEMBER_NDIM, tmember, TS_ENCODING)) {
168-
return receiver.buffer.getDims();
169-
} else if (eqNode.execute(T_MEMBER_FORMAT, tmember, TS_ENCODING)) {
170-
return receiver.buffer.getFormat() != null ? new CStringWrapper(receiver.buffer.getFormat()) : toNativeNode.execute(receiver.context, PNone.NO_VALUE);
171-
} else if (eqNode.execute(T_MEMBER_SHAPE, tmember, TS_ENCODING)) {
172-
return toCArray(receiver.context, toNativeNode, receiver.buffer.getShape());
173-
} else if (eqNode.execute(T_MEMBER_STRIDES, tmember, TS_ENCODING)) {
174-
return toCArray(receiver.context, toNativeNode, receiver.buffer.getStrides());
175-
} else if (eqNode.execute(T_MEMBER_SUBOFFSETS, tmember, TS_ENCODING)) {
176-
return toCArray(receiver.context, toNativeNode, receiver.buffer.getSuboffsets());
177-
} else if (eqNode.execute(T_MEMBER_INTERNAL, tmember, TS_ENCODING)) {
178-
return receiver.buffer.getInternal();
147+
switch (member) {
148+
case J_MEMBER_BUF:
149+
return receiver.buffer.getBuf();
150+
case J_MEMBER_OBJ:
151+
Object obj = receiver.buffer.getObj();
152+
return toNativeNode.execute(receiver.context, obj != null ? obj : PNone.NO_VALUE);
153+
case J_MEMBER_LEN:
154+
return receiver.buffer.getLen();
155+
case J_MEMBER_ITEMSIZE:
156+
return receiver.buffer.getItemSize();
157+
case J_MEMBER_READONLY:
158+
return PInt.intValue(receiver.buffer.isReadOnly());
159+
case J_MEMBER_NDIM:
160+
return receiver.buffer.getDims();
161+
case J_MEMBER_FORMAT:
162+
return receiver.buffer.getFormat() != null ? new CStringWrapper(receiver.buffer.getFormat()) : toNativeNode.execute(receiver.context, PNone.NO_VALUE);
163+
case J_MEMBER_SHAPE:
164+
return toCArray(receiver.context, toNativeNode, receiver.buffer.getShape());
165+
case J_MEMBER_STRIDES:
166+
return toCArray(receiver.context, toNativeNode, receiver.buffer.getStrides());
167+
case J_MEMBER_SUBOFFSETS:
168+
return toCArray(receiver.context, toNativeNode, receiver.buffer.getSuboffsets());
169+
case J_MEMBER_INTERNAL:
170+
return receiver.buffer.getInternal();
179171
}
180172
CompilerDirectives.transferToInterpreterAndInvalidate();
181173
throw UnknownIdentifierException.create(member);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/hpy/GraalHPyInitObject.java

Lines changed: 30 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -40,37 +40,30 @@
4040
*/
4141
package com.oracle.graal.python.builtins.objects.cext.hpy;
4242

43-
import static com.oracle.graal.python.util.PythonUtils.TS_ENCODING;
44-
import static com.oracle.graal.python.util.PythonUtils.tsLiteral;
45-
4643
import com.oracle.graal.python.builtins.objects.PythonAbstractObject;
4744
import com.oracle.graal.python.runtime.GilNode;
4845
import com.oracle.graal.python.runtime.GilNode.UncachedAcquire;
4946
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
50-
import com.oracle.truffle.api.dsl.Cached;
5147
import com.oracle.truffle.api.interop.ArityException;
5248
import com.oracle.truffle.api.interop.InteropLibrary;
5349
import com.oracle.truffle.api.interop.TruffleObject;
5450
import com.oracle.truffle.api.interop.UnsupportedMessageException;
5551
import com.oracle.truffle.api.library.ExportLibrary;
5652
import com.oracle.truffle.api.library.ExportMessage;
57-
import com.oracle.truffle.api.strings.TruffleString;
5853

5954
/**
6055
* A simple interop-capable object that is used to initialize the HPy C API.
6156
*/
6257
@ExportLibrary(InteropLibrary.class)
6358
public final class GraalHPyInitObject implements TruffleObject {
6459

65-
public static final TruffleString T_SET_HPY_CONTEXT_NATIVE_TYPE = tsLiteral("setHPyContextNativeType");
66-
public static final TruffleString T_SET_HPY_NATIVE_TYPE = tsLiteral("setHPyNativeType");
67-
public static final TruffleString T_SET_HPYFIELD_NATIVE_TYPE = tsLiteral("setHPyFieldNativeType");
68-
public static final TruffleString T_SET_HPY_ARRAY_NATIVE_TYPE = tsLiteral("setHPyArrayNativeType");
69-
public static final TruffleString T_SET_WCHAR_SIZE = tsLiteral("setWcharSize");
60+
public static final String J_SET_HPY_CONTEXT_NATIVE_TYPE = "setHPyContextNativeType";
61+
public static final String J_SET_HPY_NATIVE_TYPE = "setHPyNativeType";
62+
public static final String J_SET_HPYFIELD_NATIVE_TYPE = "setHPyFieldNativeType";
63+
public static final String J_SET_HPY_ARRAY_NATIVE_TYPE = "setHPyArrayNativeType";
64+
public static final String J_SET_WCHAR_SIZE = "setWcharSize";
7065
private final GraalHPyContext hpyContext;
7166

72-
private static final TruffleString[] MEMBERS = new TruffleString[]{T_SET_HPY_CONTEXT_NATIVE_TYPE, T_SET_HPY_NATIVE_TYPE, T_SET_HPYFIELD_NATIVE_TYPE, T_SET_HPY_ARRAY_NATIVE_TYPE, T_SET_WCHAR_SIZE};
73-
7467
public GraalHPyInitObject(GraalHPyContext hpyContext) {
7568
this.hpyContext = hpyContext;
7669
}
@@ -84,50 +77,48 @@ boolean hasMembers() {
8477
@ExportMessage
8578
@SuppressWarnings("static-method")
8679
Object getMembers(@SuppressWarnings("unused") boolean includeInternal) {
87-
return new PythonAbstractObject.Keys(MEMBERS);
80+
return new PythonAbstractObject.Keys(new String[]{J_SET_HPY_CONTEXT_NATIVE_TYPE, J_SET_HPY_NATIVE_TYPE, J_SET_HPYFIELD_NATIVE_TYPE, J_SET_HPY_ARRAY_NATIVE_TYPE, J_SET_WCHAR_SIZE});
8881
}
8982

9083
@ExportMessage
9184
@SuppressWarnings("static-method")
92-
boolean isMemberInvocable(String key,
93-
@Cached.Shared("js2ts") @Cached TruffleString.FromJavaStringNode fromJavaStringNode,
94-
@Cached.Shared("eq") @Cached TruffleString.EqualNode eqNode) {
95-
TruffleString tmember = fromJavaStringNode.execute(key, TS_ENCODING);
96-
for (TruffleString m : MEMBERS) {
97-
if (eqNode.execute(tmember, m, TS_ENCODING)) {
85+
boolean isMemberInvocable(String key) {
86+
switch (key) {
87+
case J_SET_HPY_CONTEXT_NATIVE_TYPE:
88+
case J_SET_HPY_NATIVE_TYPE:
89+
case J_SET_HPYFIELD_NATIVE_TYPE:
90+
case J_SET_HPY_ARRAY_NATIVE_TYPE:
91+
case J_SET_WCHAR_SIZE:
9892
return true;
99-
}
10093
}
10194
return false;
10295
}
10396

10497
@ExportMessage
10598
@TruffleBoundary
10699
@SuppressWarnings({"try", "unused"})
107-
Object invokeMember(String key, Object[] arguments,
108-
@Cached.Shared("js2ts") @Cached TruffleString.FromJavaStringNode fromJavaStringNode,
109-
@Cached.Shared("eq") @Cached TruffleString.EqualNode eqNode) throws UnsupportedMessageException, ArityException {
100+
Object invokeMember(String key, Object[] arguments) throws UnsupportedMessageException, ArityException {
110101
try (UncachedAcquire gil = GilNode.uncachedAcquire()) {
111102
if (arguments.length != 1) {
112103
throw ArityException.create(1, 1, arguments.length);
113104
}
114105

115-
TruffleString tmember = fromJavaStringNode.execute(key, TS_ENCODING);
116-
if (eqNode.execute(T_SET_HPY_CONTEXT_NATIVE_TYPE, tmember, TS_ENCODING)) {
117-
hpyContext.setHPyContextNativeType(arguments[0]);
118-
return 0;
119-
} else if (eqNode.execute(T_SET_HPY_NATIVE_TYPE, tmember, TS_ENCODING)) {
120-
hpyContext.setHPyNativeType(arguments[0]);
121-
return 0;
122-
} else if (eqNode.execute(T_SET_HPYFIELD_NATIVE_TYPE, tmember, TS_ENCODING)) {
123-
hpyContext.setHPyFieldNativeType(arguments[0]);
124-
return 0;
125-
} else if (eqNode.execute(T_SET_HPY_ARRAY_NATIVE_TYPE, tmember, TS_ENCODING)) {
126-
hpyContext.setHPyArrayNativeType(arguments[0]);
127-
return 0;
128-
} else if (eqNode.execute(T_SET_WCHAR_SIZE, tmember, TS_ENCODING)) {
129-
hpyContext.setWcharSize(((Number) arguments[0]).longValue());
130-
return 0;
106+
switch (key) {
107+
case J_SET_HPY_CONTEXT_NATIVE_TYPE:
108+
hpyContext.setHPyContextNativeType(arguments[0]);
109+
return 0;
110+
case J_SET_HPY_NATIVE_TYPE:
111+
hpyContext.setHPyNativeType(arguments[0]);
112+
return 0;
113+
case J_SET_HPYFIELD_NATIVE_TYPE:
114+
hpyContext.setHPyFieldNativeType(arguments[0]);
115+
return 0;
116+
case J_SET_HPY_ARRAY_NATIVE_TYPE:
117+
hpyContext.setHPyArrayNativeType(arguments[0]);
118+
return 0;
119+
case J_SET_WCHAR_SIZE:
120+
hpyContext.setWcharSize(((Number) arguments[0]).longValue());
121+
return 0;
131122
}
132123
throw UnsupportedMessageException.create();
133124
}

0 commit comments

Comments
 (0)