mirror of https://github.com/exaloop/codon.git
Fix pyext routing
parent
6734a41613
commit
31caa1d340
|
@ -1676,62 +1676,53 @@ class _PyWrap:
|
||||||
kwds[i] = str.__from_py__(PyTuple_GetItem(_kwds, i))
|
kwds[i] = str.__from_py__(PyTuple_GetItem(_kwds, i))
|
||||||
|
|
||||||
for fn in _S.fn_overloads(T, F):
|
for fn in _S.fn_overloads(T, F):
|
||||||
args_ordered = tuple(cobj() for _ in _S.fn_args(fn))
|
try:
|
||||||
pargs = Ptr[cobj](__ptr__(args_ordered).as_byte())
|
args_ordered = tuple(cobj() for _ in _S.fn_args(fn))
|
||||||
|
pargs = Ptr[cobj](__ptr__(args_ordered).as_byte())
|
||||||
|
|
||||||
if nargs + M > len(args_ordered):
|
if nargs + M > len(args_ordered):
|
||||||
continue
|
|
||||||
if M:
|
|
||||||
pargs[0] = obj
|
|
||||||
|
|
||||||
for i in range(nargs):
|
|
||||||
pargs[i + M] = args[i]
|
|
||||||
for i in range(nargs, nargs + nkw):
|
|
||||||
kw = kwds[i - nargs]
|
|
||||||
__static_print__(kw)
|
|
||||||
o = args[i]
|
|
||||||
|
|
||||||
found = False
|
|
||||||
j = M
|
|
||||||
for i, k in staticenumerate(_S.fn_args(fn)):
|
|
||||||
if M and i == 0:
|
|
||||||
continue
|
|
||||||
if kw == k:
|
|
||||||
if not pargs[j]:
|
|
||||||
pargs[j] = o
|
|
||||||
else:
|
|
||||||
raise TypeError(F + "() got multiple values for argument '" + k + "'")
|
|
||||||
found = True
|
|
||||||
break
|
|
||||||
j += 1
|
|
||||||
if not found:
|
|
||||||
raise TypeError(F + "() got an unexpected keyword argument '" + kw + "'")
|
|
||||||
|
|
||||||
for i, k in staticenumerate(_S.fn_args(fn)):
|
|
||||||
if M and i == 0:
|
|
||||||
continue
|
continue
|
||||||
|
if M:
|
||||||
|
pargs[0] = obj
|
||||||
|
|
||||||
if not pargs[i]:
|
for i in range(nargs):
|
||||||
if _S.fn_has_default(fn, i):
|
pargs[i + M] = args[i]
|
||||||
pargs[i] = _S.fn_get_default(fn, i).__to_py__() # TODO: remove this unnecessary conversion
|
for i in range(nargs, nargs + nkw):
|
||||||
else:
|
kw = kwds[i - nargs]
|
||||||
raise TypeError(F + "() missing required positional argument: '" + k + "'")
|
__static_print__(kw)
|
||||||
|
o = args[i]
|
||||||
|
|
||||||
def e(k):
|
found = False
|
||||||
raise TypeError(F + "() missing required positional argument: '" + k + "'")
|
j = M
|
||||||
ta = tuple(
|
for i, k in staticenumerate(_S.fn_args(fn)):
|
||||||
0 if M and i == 0 else
|
if M and i == 0:
|
||||||
(pyobj(pargs[i], steal=True) if i != cobj() else
|
continue
|
||||||
(_S.fn_get_default(fn, i) if _S.fn_has_default(fn, i) else e(k)))
|
if kw == k:
|
||||||
for i, k in staticenumerate(_S.fn_args(fn))
|
if not pargs[j]:
|
||||||
)
|
pargs[j] = o
|
||||||
__static_print__(ta)
|
else:
|
||||||
if _S.fn_can_call(fn, *ta):
|
raise TypeError(F + "() got multiple values for argument '" + k + "'")
|
||||||
try:
|
found = True
|
||||||
tn = _S.fn_wrap_call_args(fn, *ta)
|
break
|
||||||
except PyError:
|
j += 1
|
||||||
continue
|
if not found:
|
||||||
return fn(*tn).__to_py__()
|
raise TypeError(F + "() got an unexpected keyword argument '" + kw + "'")
|
||||||
|
|
||||||
|
def e(k):
|
||||||
|
raise TypeError(F + "() missing required positional argument: '" + k + "'")
|
||||||
|
ta = tuple(
|
||||||
|
(pyobj(pargs[i], steal=True) if pargs[i] != cobj() else
|
||||||
|
(_S.fn_get_default(fn, i) if _S.fn_has_default(fn, i) else e(k)))
|
||||||
|
for i, k in staticenumerate(_S.fn_args(fn))
|
||||||
|
)
|
||||||
|
if _S.fn_can_call(fn, *ta):
|
||||||
|
try:
|
||||||
|
tn = _S.fn_wrap_call_args(fn, *ta)
|
||||||
|
except PyError:
|
||||||
|
raise TypeError("cannot cast arguments")
|
||||||
|
return fn(*tn).__to_py__()
|
||||||
|
except TypeError:
|
||||||
|
pass
|
||||||
|
|
||||||
raise TypeError("cannot dispatch " + F)
|
raise TypeError("cannot dispatch " + F)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue