Skip to content
This repository was archived by the owner on Apr 21, 2023. It is now read-only.

Commit e531f3a

Browse files
authored
Merge pull request pvieito#44 from philipturner/patch-4
Fix crash
2 parents 56ed7e2 + 6f45cae commit e531f3a

File tree

3 files changed

+23
-4
lines changed

3 files changed

+23
-4
lines changed

PythonKit/Python.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1574,9 +1574,10 @@ extension PythonFunction : PythonConvertible {
15741574
Unmanaged<PyFunction>.fromOpaque(funcPointer).release()
15751575
})
15761576

1577-
let pyFuncPointer = PyCFunction_New(
1577+
let pyFuncPointer = PyCFunction_NewEx(
15781578
PythonFunction.sharedMethodDefinition,
1579-
capsulePointer
1579+
capsulePointer,
1580+
nil
15801581
)
15811582

15821583
return PythonObject(consuming: pyFuncPointer)

PythonKit/PythonLibrary+Symbols.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,8 @@ let PyEval_GetBuiltins: @convention(c) () -> PyObjectPointer =
5959
let PyRun_SimpleString: @convention(c) (PyCCharPointer) -> Void =
6060
PythonLibrary.loadSymbol(name: "PyRun_SimpleString")
6161

62-
let PyCFunction_New: @convention(c) (PyMethodDefPointer, UnsafeMutableRawPointer) -> PyObjectPointer =
63-
PythonLibrary.loadSymbol(name: "PyCFunction_New")
62+
let PyCFunction_NewEx: @convention(c) (PyMethodDefPointer, UnsafeMutableRawPointer, UnsafeMutableRawPointer?) -> PyObjectPointer =
63+
PythonLibrary.loadSymbol(name: "PyCFunction_NewEx")
6464

6565
let PyCapsule_New: @convention(c) (UnsafeMutableRawPointer, UnsafePointer<CChar>?, PyCapsuleDestructor) -> PyObjectPointer =
6666
PythonLibrary.loadSymbol(name: "PyCapsule_New")

Tests/PythonKitTests/PythonRuntimeTests.swift

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,4 +326,22 @@ class PythonRuntimeTests: XCTestCase {
326326
}
327327
XCTAssertEqual(bytes, otherBytes)
328328
}
329+
330+
func testPythonFunction() {
331+
let versionMajor = Python.versionInfo.major
332+
let versionMinor = Python.versionInfo.minor
333+
guard (versionMajor == 3 && versionMinor >= 1) || versionMajor > 3 else {
334+
return
335+
}
336+
337+
let pythonAdd = PythonFunction { (params: [PythonObject]) in
338+
let lhs = params[0]
339+
let rhs = params[1]
340+
return lhs + rhs
341+
}.pythonObject
342+
343+
let pythonSum = pythonAdd(2, 3)
344+
XCTAssertNotNil(Double(pythonSum))
345+
XCTAssertEqual(pythonSum, 5)
346+
}
329347
}

0 commit comments

Comments
 (0)