|
72 | 72 |
|
73 | 73 | PyObject_CallNice(f, args...; kwargs...) = PyObject_CallArgs(f, args, kwargs)
|
74 | 74 |
|
75 |
| -# const PYCONVERT_RULES = IdDict{Type, Dict{PyPtr, Ptr{Cvoid}}}() |
76 |
| -# const PYCONVERT_RULES_CACHE = IdDict{Type, Dict{PyPtr, Any}}() |
77 |
| - |
78 |
| -# @generated PyConvert_GetRules(::Type{T}) where {T} = |
79 |
| -# get!(Dict{PyPtr, Ptr{Cvoid}}, PYCONVERT_RULES, T) |
80 |
| - |
81 |
| -# function PyObject_Convert__rule(t::PyPtr) |
82 |
| -# name = Py_DecRef(PyObject_GetAttrString(t, "__name__")) do tnameo |
83 |
| -# Py_DecRef(PyObject_GetAttrString(t, "__module__")) do mnameo |
84 |
| -# r = PyUnicode_TryConvert(tnameo, String) |
85 |
| -# r == 1 || return PYERR() |
86 |
| -# tname = takeresult(String) |
87 |
| -# r = PyUnicode_TryConvert(mnameo, String) |
88 |
| -# r == 1 || return PYERR() |
89 |
| -# mname = takeresult(String) |
90 |
| -# "$mname.$tname" |
91 |
| -# end |
92 |
| -# end |
93 |
| -# name == PYERR() && return PYERR() |
94 |
| -# PyObject_Convert__rule(t, Val(Symbol(name))) |
95 |
| -# end |
96 |
| - |
97 |
| -# PyObject_Convert__rule(t::PyPtr, ::Val) = nothing |
98 |
| -# PyObject_Convert__rule(t::PyPtr, ::Val{Symbol("builtins.NoneType")}) = Py_Is(t, Py_Type(Py_None())) ? PyNone_TryConvert : nothing |
99 |
| -# PyObject_Convert__rule(t::PyPtr, ::Val{Symbol("builtins.bool")}) = Py_Is(t, PyBool_Type()) ? PyBool_TryConvert : nothing |
100 |
| -# PyObject_Convert__rule(t::PyPtr, ::Val{Symbol("builtins.str")}) = Py_Is(t, PyUnicode_Type()) ? PyUnicode_TryConvert : nothing |
101 |
| -# PyObject_Convert__rule(t::PyPtr, ::Val{Symbol("builtins.bytes")}) = Py_Is(t, PyBytes_Type()) ? PyBytes_TryConvert : nothing |
102 |
| -# PyObject_Convert__rule(t::PyPtr, ::Val{Symbol("builtins.int")}) = Py_Is(t, PyLong_Type()) ? PyLong_TryConvert : nothing |
103 |
| -# PyObject_Convert__rule(t::PyPtr, ::Val{Symbol("builtins.float")}) = Py_Is(t, PyFloat_Type()) ? PyFloat_TryConvert : nothing |
104 |
| -# PyObject_Convert__rule(t::PyPtr, ::Val{Symbol("builtins.complex")}) = Py_Is(t, PyComplex_Type()) ? PyComplex_TryConvert : nothing |
105 |
| - |
106 |
| -# struct PyObject_Convert__rule_struct{T,F} |
107 |
| -# f :: F |
108 |
| -# end |
109 |
| -# (r::PyObject_Convert__rule_struct{T,F})(o::PyPtr) where {T,F} = r.f(o, T)::Int |
110 |
| - |
111 | 75 | const ERRPTR = Ptr{Cvoid}(1)
|
112 | 76 |
|
113 | 77 | const TRYCONVERT_COMPILED_RULES = IdDict{Type, Dict{PyPtr, Ptr{Cvoid}}}()
|
@@ -183,8 +147,8 @@ PyObject_TryConvert_CompileRule(::Type{T}, t::PyPtr) where {T} = begin
|
183 | 147 | # discard rules where S is a subtype of the union of all previous S for rules with the same implementation
|
184 | 148 | # in particular this removes rules with S==Union{} and removes duplicates
|
185 | 149 | rules = [S=>rule for (i,(S,rule)) in enumerate(rules) if !(S <: Union{[S′ for (S′,rule′) in rules[1:i-1] if rule==rule′]...})]
|
186 |
| - println("CONVERSION RULES FOR '$(PyType_Name(t))' TO '$T':") |
187 |
| - display(rules) |
| 150 | + # println("CONVERSION RULES FOR '$(PyType_Name(t))' TO '$T':") |
| 151 | + # display(rules) |
188 | 152 | # make the function implementing these rules
|
189 | 153 | rulefunc = @eval (o::PyPtr) -> begin
|
190 | 154 | $((:(r = $rule(o, $T, $S)::Int; r == 0 || return r) for (S,rule) in rules)...)
|
|
0 commit comments