Skip to content

Commit 03d3676

Browse files
committed
Fix: add missing specialization to '__reduce__' of builtin functions.
1 parent 3d31b82 commit 03d3676

File tree

1 file changed

+17
-3
lines changed

1 file changed

+17
-3
lines changed

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

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
4444
import com.oracle.graal.python.nodes.object.GetClassNode;
4545
import com.oracle.graal.python.nodes.truffle.PythonArithmeticTypes;
46+
import com.oracle.graal.python.runtime.exception.PException;
4647
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
4748
import com.oracle.truffle.api.dsl.Cached;
4849
import com.oracle.truffle.api.dsl.Fallback;
@@ -102,14 +103,27 @@ String doBuiltinFunction(PBuiltinFunction self) {
102103

103104
@Specialization
104105
String doBuiltinMethod(PBuiltinMethod self) {
105-
if (self.getSelf() == null || self.getSelf() == PNone.NONE || self.getSelf() instanceof PythonModule) {
106-
return self.getName();
106+
return doMethod(self.getName(), self.getSelf());
107+
}
108+
109+
@Specialization
110+
String doBuiltinMethod(PMethod self) {
111+
return doMethod(self.getName(), self.getSelf());
112+
}
113+
114+
private String doMethod(String name, Object owner) {
115+
if (owner == null || owner == PNone.NONE || owner instanceof PythonModule) {
116+
return name;
107117
}
108-
return (String) doGeneric(self);
118+
throw raiseCannotPickle();
109119
}
110120

111121
@Fallback
112122
Object doGeneric(@SuppressWarnings("unused") Object obj) {
123+
throw raiseCannotPickle();
124+
}
125+
126+
private PException raiseCannotPickle() {
113127
throw raise(TypeError, "can't pickle function objects");
114128
}
115129
}

0 commit comments

Comments
 (0)