Skip to content

Commit ed018b2

Browse files
pyray: if function arg requires pointer and is given a pointer, don't try to create a pointer. if given a python primitive(float/int/bool), create an FFI float/int/bool and use pointer to it. #57
1 parent 7b889a2 commit ed018b2

File tree

2 files changed

+14
-9
lines changed

2 files changed

+14
-9
lines changed

pyray/__init__.py

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -65,14 +65,19 @@ def makefunc(a):
6565
def func(*args):
6666
modified_args = []
6767
for (c_arg, arg) in zip(ffi.typeof(a).args, args):
68-
#print(arg, c_arg.kind)
69-
if type(arg) == str:
70-
encoded = arg.encode('utf-8')
71-
modified_args.append(encoded)
72-
elif c_arg.kind == 'pointer' and str(type(arg)) == "<class '_cffi_backend.__CDataOwn'>":
73-
modified_args.append(ffi.addressof(arg))
74-
else:
75-
modified_args.append(arg)
68+
#print("arg:",str(arg), "c_arg.kind:", c_arg.kind, "c_arg:", c_arg, "type(arg):",str(type(arg)))
69+
if c_arg.kind == 'pointer':
70+
if type(arg) == str:
71+
arg = arg.encode('utf-8')
72+
elif type(arg) is bool:
73+
arg = ffi.new("bool *", arg)
74+
elif type(arg) is int:
75+
arg = ffi.new("int *", arg)
76+
elif type(arg) is float:
77+
arg = ffi.new("float *", arg)
78+
elif str(type(arg)) == "<class '_cffi_backend.__CDataOwn'>" and "*" not in str(arg):
79+
arg = ffi.addressof(arg)
80+
modified_args.append(arg)
7681
result = a(*modified_args)
7782
if result is None:
7883
return

version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = "4.0.0.3"
1+
__version__ = "4.0.0.4"

0 commit comments

Comments
 (0)