Skip to content

Commit 82371f5

Browse files
committed
Fix raising location
1 parent 20e0ab1 commit 82371f5

File tree

2 files changed

+59
-84
lines changed

2 files changed

+59
-84
lines changed

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

Lines changed: 37 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,6 @@
125125
import com.oracle.graal.python.runtime.sequence.storage.EmptySequenceStorage;
126126
import com.oracle.graal.python.runtime.sequence.storage.SequenceStorage;
127127
import com.oracle.truffle.api.CompilerDirectives;
128-
import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
129128
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
130129
import com.oracle.truffle.api.TruffleFile;
131130
import com.oracle.truffle.api.TruffleLanguage.Env;
@@ -196,6 +195,18 @@ public void postInitialize(Python3Core core) {
196195
AbstractImportNode.importModule(T_INTERNAL_POLYGLOT_MODULE);
197196
}
198197

198+
abstract static class InteropBuiltinBaseNode extends PythonBuiltinNode {
199+
@Child InteropLibrary interop;
200+
201+
public InteropLibrary getInterop() {
202+
if (interop == null) {
203+
CompilerDirectives.transferToInterpreterAndInvalidate();
204+
interop = insert(InteropLibrary.getFactory().createDispatched(1));
205+
}
206+
return interop;
207+
}
208+
}
209+
199210
@Builtin(name = "import_value", minNumOfPositionalArgs = 1, parameterNames = {"name"})
200211
@GenerateNodeFactory
201212
public abstract static class ImportNode extends PythonBuiltinNode {
@@ -386,16 +397,6 @@ private static void export(Node raisingNode, String name, Object obj) {
386397
}
387398
}
388399

389-
@CompilationFinal static InteropLibrary UNCACHED_INTEROP;
390-
391-
static InteropLibrary getInterop() {
392-
if (UNCACHED_INTEROP == null) {
393-
CompilerDirectives.transferToInterpreterAndInvalidate();
394-
UNCACHED_INTEROP = InteropLibrary.getFactory().getUncached();
395-
}
396-
return UNCACHED_INTEROP;
397-
}
398-
399400
abstract static class FitsInNumberNode extends PythonUnaryBuiltinNode {
400401
static boolean isSupportedNumber(Object number) {
401402
return number instanceof Number || number instanceof PInt;
@@ -933,7 +934,7 @@ public static void clearInteropTypeRegistryCache(PythonContext pythonContext) {
933934

934935
@Builtin(name = "__read__", minNumOfPositionalArgs = 2)
935936
@GenerateNodeFactory
936-
public abstract static class ReadNode extends PythonBuiltinNode {
937+
public abstract static class ReadNode extends InteropBuiltinBaseNode {
937938
@Specialization
938939
@TruffleBoundary
939940
Object read(Object receiver, Object key) {
@@ -955,7 +956,7 @@ Object read(Object receiver, Object key) {
955956

956957
@Builtin(name = "__write__", minNumOfPositionalArgs = 3)
957958
@GenerateNodeFactory
958-
public abstract static class WriteNode extends PythonBuiltinNode {
959+
public abstract static class WriteNode extends InteropBuiltinBaseNode {
959960
@Specialization
960961
@TruffleBoundary
961962
Object write(Object receiver, Object key, Object value) {
@@ -978,7 +979,7 @@ Object write(Object receiver, Object key, Object value) {
978979

979980
@Builtin(name = "__remove__", minNumOfPositionalArgs = 2)
980981
@GenerateNodeFactory
981-
public abstract static class removeNode extends PythonBuiltinNode {
982+
public abstract static class removeNode extends InteropBuiltinBaseNode {
982983
@Specialization
983984
@TruffleBoundary
984985
Object remove(Object receiver, Object key) {
@@ -1001,9 +1002,9 @@ Object remove(Object receiver, Object key) {
10011002

10021003
@Builtin(name = "__execute__", minNumOfPositionalArgs = 1, takesVarArgs = true)
10031004
@GenerateNodeFactory
1004-
public abstract static class executeNode extends PythonBuiltinNode {
1005+
public abstract static class executeNode extends InteropBuiltinBaseNode {
10051006
@Specialization
1006-
static Object exec(Object receiver, Object[] arguments,
1007+
Object exec(Object receiver, Object[] arguments,
10071008
@Bind Node inliningTarget,
10081009
@Cached PRaiseNode raiseNode) {
10091010
try {
@@ -1016,9 +1017,9 @@ static Object exec(Object receiver, Object[] arguments,
10161017

10171018
@Builtin(name = "__new__", minNumOfPositionalArgs = 1, takesVarArgs = true)
10181019
@GenerateNodeFactory
1019-
public abstract static class newNode extends PythonBuiltinNode {
1020+
public abstract static class newNode extends InteropBuiltinBaseNode {
10201021
@Specialization
1021-
static Object instantiate(Object receiver, Object[] arguments,
1022+
Object instantiate(Object receiver, Object[] arguments,
10221023
@Bind Node inliningTarget,
10231024
@Cached PRaiseNode raiseNode) {
10241025
try {
@@ -1031,9 +1032,9 @@ static Object instantiate(Object receiver, Object[] arguments,
10311032

10321033
@Builtin(name = "__invoke__", minNumOfPositionalArgs = 2, takesVarArgs = true)
10331034
@GenerateNodeFactory
1034-
public abstract static class invokeNode extends PythonBuiltinNode {
1035+
public abstract static class invokeNode extends InteropBuiltinBaseNode {
10351036
@Specialization
1036-
static Object invoke(Object receiver, TruffleString key, Object[] arguments,
1037+
Object invoke(Object receiver, TruffleString key, Object[] arguments,
10371038
@Bind Node inliningTarget,
10381039
@Cached TruffleString.ToJavaStringNode toJavaStringNode,
10391040
@Cached PRaiseNode raiseNode) {
@@ -1047,27 +1048,27 @@ static Object invoke(Object receiver, TruffleString key, Object[] arguments,
10471048

10481049
@Builtin(name = "__is_null__", minNumOfPositionalArgs = 1)
10491050
@GenerateNodeFactory
1050-
public abstract static class IsNullNode extends PythonBuiltinNode {
1051+
public abstract static class IsNullNode extends InteropBuiltinBaseNode {
10511052
@Specialization
1052-
static boolean isNull(Object receiver) {
1053+
boolean isNull(Object receiver) {
10531054
return getInterop().isNull(receiver);
10541055
}
10551056
}
10561057

10571058
@Builtin(name = "__has_size__", minNumOfPositionalArgs = 1)
10581059
@GenerateNodeFactory
1059-
public abstract static class HasSizeNode extends PythonBuiltinNode {
1060+
public abstract static class HasSizeNode extends InteropBuiltinBaseNode {
10601061
@Specialization
1061-
static boolean hasSize(Object receiver) {
1062+
boolean hasSize(Object receiver) {
10621063
return getInterop().hasArrayElements(receiver);
10631064
}
10641065
}
10651066

10661067
@Builtin(name = "__get_size__", minNumOfPositionalArgs = 1)
10671068
@GenerateNodeFactory
1068-
public abstract static class GetSizeNode extends PythonBuiltinNode {
1069+
public abstract static class GetSizeNode extends InteropBuiltinBaseNode {
10691070
@Specialization
1070-
static Object getSize(Object receiver,
1071+
Object getSize(Object receiver,
10711072
@Bind Node inliningTarget,
10721073
@Cached PRaiseNode raiseNode) {
10731074
try {
@@ -1080,27 +1081,27 @@ static Object getSize(Object receiver,
10801081

10811082
@Builtin(name = "__is_boxed__", minNumOfPositionalArgs = 1)
10821083
@GenerateNodeFactory
1083-
public abstract static class IsBoxedNode extends PythonBuiltinNode {
1084+
public abstract static class IsBoxedNode extends InteropBuiltinBaseNode {
10841085
@Specialization
1085-
static boolean isBoxed(Object receiver) {
1086+
boolean isBoxed(Object receiver) {
10861087
return getInterop().isString(receiver) || getInterop().fitsInDouble(receiver) || getInterop().fitsInLong(receiver);
10871088
}
10881089
}
10891090

10901091
@Builtin(name = "__has_keys__", minNumOfPositionalArgs = 1)
10911092
@GenerateNodeFactory
1092-
public abstract static class HasKeysNode extends PythonBuiltinNode {
1093+
public abstract static class HasKeysNode extends InteropBuiltinBaseNode {
10931094
@Specialization
1094-
static boolean hasKeys(Object receiver) {
1095+
boolean hasKeys(Object receiver) {
10951096
return getInterop().hasMembers(receiver);
10961097
}
10971098
}
10981099

10991100
@Builtin(name = "__key_info__", minNumOfPositionalArgs = 3)
11001101
@GenerateNodeFactory
1101-
public abstract static class KeyInfoNode extends PythonBuiltinNode {
1102+
public abstract static class KeyInfoNode extends InteropBuiltinBaseNode {
11021103
@Specialization
1103-
static boolean keyInfo(Object receiver, TruffleString tmember, TruffleString info,
1104+
boolean keyInfo(Object receiver, TruffleString tmember, TruffleString info,
11041105
@Cached TruffleString.ToJavaStringNode toJavaStringNode,
11051106
@Cached TruffleString.EqualNode equalNode) {
11061107
String member = toJavaStringNode.execute(tmember);
@@ -1132,9 +1133,9 @@ static boolean keyInfo(Object receiver, TruffleString tmember, TruffleString inf
11321133

11331134
@Builtin(name = "__keys__", minNumOfPositionalArgs = 1)
11341135
@GenerateNodeFactory
1135-
public abstract static class KeysNode extends PythonBuiltinNode {
1136+
public abstract static class KeysNode extends InteropBuiltinBaseNode {
11361137
@Specialization
1137-
static Object remove(Object receiver,
1138+
Object remove(Object receiver,
11381139
@Bind Node inliningTarget,
11391140
@Cached PRaiseNode raiseNode) {
11401141
try {
@@ -1148,9 +1149,9 @@ static Object remove(Object receiver,
11481149
@Builtin(name = "__element_info__", minNumOfPositionalArgs = 3)
11491150
@GenerateNodeFactory
11501151
@TypeSystemReference(PythonIntegerTypes.class)
1151-
public abstract static class ArrayElementInfoNode extends PythonBuiltinNode {
1152+
public abstract static class ArrayElementInfoNode extends InteropBuiltinBaseNode {
11521153
@Specialization
1153-
static boolean keyInfo(Object receiver, long member, TruffleString info,
1154+
boolean keyInfo(Object receiver, long member, TruffleString info,
11541155
@Cached TruffleString.EqualNode equalNode) {
11551156
if (equalNode.execute(info, T_EXISTS, TS_ENCODING)) {
11561157
return getInterop().isArrayElementExisting(receiver, member);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/memoryview/MemoryViewNodes.java

Lines changed: 22 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@
7575
import com.oracle.truffle.api.CompilerDirectives.ValueType;
7676
import com.oracle.truffle.api.dsl.Bind;
7777
import com.oracle.truffle.api.dsl.Cached;
78+
import com.oracle.truffle.api.dsl.Cached.Exclusive;
7879
import com.oracle.truffle.api.dsl.Cached.Shared;
7980
import com.oracle.truffle.api.dsl.Fallback;
8081
import com.oracle.truffle.api.dsl.GenerateCached;
@@ -88,6 +89,7 @@
8889
import com.oracle.truffle.api.nodes.ExplodeLoop;
8990
import com.oracle.truffle.api.nodes.Node;
9091
import com.oracle.truffle.api.profiles.InlinedConditionProfile;
92+
import com.oracle.truffle.api.profiles.InlinedIntValueProfile;
9193
import com.oracle.truffle.api.strings.TruffleString;
9294

9395
public class MemoryViewNodes {
@@ -195,35 +197,21 @@ static void notImplemented(Node inliningTarget, BufferFormat format, TruffleStri
195197
abstract static class ReadBytesAtNode extends Node {
196198
public abstract void execute(Node inliningTarget, byte[] dest, int destOffset, int len, PMemoryView self, Object ptr, int offset);
197199

198-
@Specialization(guards = {"ptr != null", "cachedLen == len", "cachedLen <= 8"}, limit = "4")
199-
@ExplodeLoop
200-
static void doNativeCached(byte[] dest, int destOffset, @SuppressWarnings("unused") int len, @SuppressWarnings("unused") PMemoryView self, Object ptr, int offset,
201-
@Cached("len") int cachedLen,
202-
@Shared @Cached(inline = false) CStructAccess.ReadByteNode readNode) {
203-
readNode.readByteArray(ptr, dest, cachedLen, offset, destOffset);
204-
}
205-
206-
@Specialization(guards = "ptr != null", replaces = "doNativeCached")
207-
static void doNativeGeneric(byte[] dest, int destOffset, int len, @SuppressWarnings("unused") PMemoryView self, Object ptr, int offset,
208-
@Shared @Cached(inline = false) CStructAccess.ReadByteNode readNode) {
209-
readNode.readByteArray(ptr, dest, len, offset, destOffset);
200+
@Specialization(guards = "ptr != null")
201+
static void doNativeCached(Node inliningTarget, byte[] dest, int destOffset, @SuppressWarnings("unused") int len, @SuppressWarnings("unused") PMemoryView self, Object ptr, int offset,
202+
@Exclusive @Cached InlinedIntValueProfile lengthProfile,
203+
@Cached(inline = false) CStructAccess.ReadByteNode readNode) {
204+
readNode.readByteArray(ptr, dest, lengthProfile.profile(inliningTarget, len), offset, destOffset);
210205
}
211206

212-
@Specialization(guards = {"ptr == null", "cachedLen == len", "cachedLen <= 8"}, limit = "4")
213-
@ExplodeLoop
214-
void doManagedCached(byte[] dest, int destOffset, @SuppressWarnings("unused") int len, PMemoryView self, @SuppressWarnings("unused") Object ptr, int offset,
207+
@Specialization(guards = "ptr == null", limit = "3")
208+
static void doManagedCached(Node inliningTarget, byte[] dest, int destOffset, @SuppressWarnings("unused") int len, PMemoryView self, @SuppressWarnings("unused") Object ptr, int offset,
215209
@CachedLibrary("self.getBuffer()") PythonBufferAccessLibrary bufferLib,
216-
@Cached("len") int cachedLen) {
217-
checkBufferBounds(this, self, bufferLib, offset, cachedLen);
210+
@Exclusive @Cached InlinedIntValueProfile lenProfile) {
211+
int cachedLen = lenProfile.profile(inliningTarget, len);
212+
checkBufferBounds(inliningTarget, self, bufferLib, offset, cachedLen);
218213
bufferLib.readIntoByteArray(self.getBuffer(), offset, dest, destOffset, cachedLen);
219214
}
220-
221-
@Specialization(guards = "ptr == null", replaces = "doManagedCached", limit = "3")
222-
void doManagedGeneric(byte[] dest, int destOffset, int len, PMemoryView self, @SuppressWarnings("unused") Object ptr, int offset,
223-
@CachedLibrary("self.getBuffer()") PythonBufferAccessLibrary bufferLib) {
224-
checkBufferBounds(this, self, bufferLib, offset, len);
225-
bufferLib.readIntoByteArray(self.getBuffer(), offset, dest, destOffset, len);
226-
}
227215
}
228216

229217
@GenerateUncached
@@ -232,35 +220,21 @@ void doManagedGeneric(byte[] dest, int destOffset, int len, PMemoryView self, @S
232220
abstract static class WriteBytesAtNode extends Node {
233221
public abstract void execute(Node inliningTarget, byte[] src, int srcOffset, int len, PMemoryView self, Object ptr, int offset);
234222

235-
@Specialization(guards = {"ptr != null", "cachedLen == len", "cachedLen <= 8"}, limit = "4")
236-
@ExplodeLoop
237-
static void doNativeCached(byte[] src, int srcOffset, @SuppressWarnings("unused") int len, @SuppressWarnings("unused") PMemoryView self, Object ptr, int offset,
238-
@Cached("len") int cachedLen,
239-
@Shared @Cached(inline = false) CStructAccess.WriteByteNode writeNode) {
240-
writeNode.writeByteArray(ptr, src, cachedLen, srcOffset, offset);
241-
}
242-
243-
@Specialization(guards = "ptr != null", replaces = "doNativeCached")
244-
static void doNativeGeneric(byte[] src, int srcOffset, int len, @SuppressWarnings("unused") PMemoryView self, Object ptr, int offset,
245-
@Shared @Cached(inline = false) CStructAccess.WriteByteNode writeNode) {
246-
writeNode.writeByteArray(ptr, src, len, srcOffset, offset);
223+
@Specialization(guards = "ptr != null")
224+
static void doNativeCached(Node inliningTarget, byte[] src, int srcOffset, int len, @SuppressWarnings("unused") PMemoryView self, Object ptr, int offset,
225+
@Exclusive @Cached InlinedIntValueProfile lenProfile,
226+
@Cached(inline = false) CStructAccess.WriteByteNode writeNode) {
227+
writeNode.writeByteArray(ptr, src, lenProfile.profile(inliningTarget, len), srcOffset, offset);
247228
}
248229

249-
@Specialization(guards = {"ptr == null", "cachedLen == len", "cachedLen <= 8"}, limit = "4")
250-
@ExplodeLoop
251-
void doManagedCached(byte[] src, int srcOffset, @SuppressWarnings("unused") int len, PMemoryView self, @SuppressWarnings("unused") Object ptr, int offset,
230+
@Specialization(guards = "ptr == null", limit = "3")
231+
static void doManagedCached(Node inliningTarget, byte[] src, int srcOffset, int len, PMemoryView self, @SuppressWarnings("unused") Object ptr, int offset,
252232
@CachedLibrary("self.getBuffer()") PythonBufferAccessLibrary bufferLib,
253-
@Cached("len") int cachedLen) {
254-
checkBufferBounds(this, self, bufferLib, offset, cachedLen);
233+
@Exclusive @Cached InlinedIntValueProfile lenProfile) {
234+
int cachedLen = lenProfile.profile(inliningTarget, len);
235+
checkBufferBounds(inliningTarget, self, bufferLib, offset, cachedLen);
255236
bufferLib.writeFromByteArray(self.getBuffer(), offset, src, srcOffset, cachedLen);
256237
}
257-
258-
@Specialization(guards = "ptr == null", replaces = "doManagedCached", limit = "3")
259-
void doManagedGeneric(byte[] src, int srcOffset, int len, PMemoryView self, @SuppressWarnings("unused") Object ptr, int offset,
260-
@CachedLibrary("self.getBuffer()") PythonBufferAccessLibrary bufferLib) {
261-
checkBufferBounds(this, self, bufferLib, offset, len);
262-
bufferLib.writeFromByteArray(self.getBuffer(), offset, src, srcOffset, len);
263-
}
264238
}
265239

266240
@GenerateInline(false) // footprint reduction 48 -> 29

0 commit comments

Comments
 (0)