|
1 | | -const PyJuliaAnyValue_Type__ref = Ref(PyNULL) |
2 | | -PyJuliaAnyValue_Type() = begin |
3 | | - ptr = PyJuliaAnyValue_Type__ref[] |
4 | | - if isnull(ptr) |
5 | | - c = [] |
6 | | - base = PyJuliaBaseValue_Type() |
7 | | - isnull(base) && return PyNULL |
8 | | - t = fill( |
9 | | - PyType_Create( |
10 | | - c, |
11 | | - name = "juliacall.AnyValue", |
12 | | - base = base, |
13 | | - repr = pyjlany_repr, |
14 | | - str = pyjlany_str, |
15 | | - getattro = pyjlany_getattro, |
16 | | - setattro = pyjlany_setattro, |
17 | | - call = pyjlany_call, |
18 | | - iter = pyjlany_iter, |
19 | | - richcompare = pyjlany_richcompare, |
20 | | - as_mapping = ( |
21 | | - length = pyjlany_length, |
22 | | - subscript = pyjlany_getitem, |
23 | | - ass_subscript = pyjlany_setitem, |
24 | | - ), |
25 | | - as_sequence = (contains = pyjlany_contains,), |
26 | | - as_number = ( |
27 | | - positive = pyjlany_positive, |
28 | | - negative = pyjlany_negative, |
29 | | - absolute = pyjlany_absolute, |
30 | | - power = pyjlany_power, |
31 | | - add = pyjlany_binop(+), |
32 | | - subtract = pyjlany_binop(-), |
33 | | - multiply = pyjlany_binop(*), |
34 | | - truedivide = pyjlany_binop(/), |
35 | | - divmod = pyjlany_binop((x, y) -> (fld(x, y), mod(x, y))), |
36 | | - floordivide = pyjlany_binop(fld), |
37 | | - remainder = pyjlany_binop(mod), |
38 | | - lshift = pyjlany_binop(<<), |
39 | | - rshift = pyjlany_binop(>>), |
40 | | - and = pyjlany_binop(&), |
41 | | - xor = pyjlany_binop(xor), |
42 | | - or = pyjlany_binop(|), |
43 | | - ), |
44 | | - methods = [ |
45 | | - (name = "__dir__", flags = Py_METH_NOARGS, meth = pyjlany_dir), |
46 | | - (name = "_repr_mimebundle_", flags = Py_METH_VARARGS | Py_METH_KEYWORDS, meth = pyjlany_repr_mimebundle), |
47 | | - (name = "_jl_raw", flags = Py_METH_NOARGS, meth = pyjlany_toraw), |
48 | | - (name = "_jl_display", flags = Py_METH_NOARGS, meth = pyjlany_display), |
49 | | - (name = "_jl_help", flags = Py_METH_NOARGS, meth = pyjlany_help), |
50 | | - ], |
51 | | - getset = [(name = "__name__", get = pyjlany_name)], |
52 | | - ), |
53 | | - ) |
54 | | - ptr = PyPtr(pointer(t)) |
55 | | - err = PyType_Ready(ptr) |
56 | | - ism1(err) && return PyNULL |
57 | | - PYJLGCCACHE[ptr] = push!(c, t) |
58 | | - PyJuliaAnyValue_Type__ref[] = ptr |
59 | | - end |
60 | | - ptr |
61 | | -end |
62 | | - |
63 | | -PyJuliaAnyValue_New(x) = PyJuliaValue_New(PyJuliaAnyValue_Type(), x) |
64 | | -PyJuliaValue_From(x) = PyJuliaAnyValue_New(x) |
65 | | - |
66 | 1 | pyjlany_repr(xo::PyPtr) = |
67 | 2 | try |
68 | 3 | x = PyJuliaValue_GetValue(xo) |
@@ -553,3 +488,88 @@ pyjlany_power(xo::PyPtr, yo::PyPtr, zo::PyPtr) = begin |
553 | 488 | end |
554 | 489 | end |
555 | 490 | end |
| 491 | + |
| 492 | +PyJuliaAnyValue_New(x) = PyJuliaValue_New(PyJuliaAnyValue_Type(), x) |
| 493 | +PyJuliaValue_From(x) = PyJuliaAnyValue_New(x) |
| 494 | + |
| 495 | +const PyJuliaAnyValue_Type = LazyPyObject() do |
| 496 | + c = [] |
| 497 | + base = PyJuliaBaseValue_Type() |
| 498 | + isnull(base) && return PyNULL |
| 499 | + ptr = PyPtr(cacheptr!(c, fill(PyTypeObject( |
| 500 | + name = cacheptr!(c, "juliacall.AnyValue"), |
| 501 | + base = base, |
| 502 | + repr = @cfunctionOO(pyjlany_repr), |
| 503 | + str = @cfunctionOO(pyjlany_str), |
| 504 | + getattro = @cfunctionOOO(pyjlany_getattro), |
| 505 | + setattro = @cfunctionIOOO(pyjlany_setattro), |
| 506 | + call = @cfunctionOOOO(pyjlany_call), |
| 507 | + iter = @cfunctionOO(pyjlany_iter), |
| 508 | + richcompare = @cfunctionOOOI(pyjlany_richcompare), |
| 509 | + as_mapping = cacheptr!(c, fill(PyMappingMethods( |
| 510 | + length = @cfunctionZO(pyjlany_length), |
| 511 | + subscript = @cfunctionOOO(pyjlany_getitem), |
| 512 | + ass_subscript = @cfunctionIOOO(pyjlany_setitem), |
| 513 | + ))), |
| 514 | + as_sequence = cacheptr!(c, fill(PySequenceMethods( |
| 515 | + contains = @cfunctionIOO(pyjlany_contains), |
| 516 | + ))), |
| 517 | + as_number = cacheptr!(c, fill(PyNumberMethods( |
| 518 | + positive = @cfunctionOO(pyjlany_positive), |
| 519 | + negative = @cfunctionOO(pyjlany_negative), |
| 520 | + absolute = @cfunctionOO(pyjlany_absolute), |
| 521 | + power = @cfunctionOOOO(pyjlany_power), |
| 522 | + add = @cfunctionOOO(pyjlany_binop(+)), |
| 523 | + subtract = @cfunctionOOO(pyjlany_binop(-)), |
| 524 | + multiply = @cfunctionOOO(pyjlany_binop(*)), |
| 525 | + truedivide = @cfunctionOOO(pyjlany_binop(/)), |
| 526 | + divmod = @cfunctionOOO(pyjlany_binop((x,y) -> (fld(x,y), mod(x,y)))), |
| 527 | + floordivide = @cfunctionOOO(pyjlany_binop(fld)), |
| 528 | + remainder = @cfunctionOOO(pyjlany_binop(mod)), |
| 529 | + lshift = @cfunctionOOO(pyjlany_binop(<<)), |
| 530 | + rshift = @cfunctionOOO(pyjlany_binop(>>)), |
| 531 | + and = @cfunctionOOO(pyjlany_binop(&)), |
| 532 | + xor = @cfunctionOOO(pyjlany_binop(⊻)), |
| 533 | + or = @cfunctionOOO(pyjlany_binop(|)), |
| 534 | + ))), |
| 535 | + methods = cacheptr!(c, [ |
| 536 | + PyMethodDef( |
| 537 | + name = cacheptr!(c, "__dir__"), |
| 538 | + flags = Py_METH_NOARGS, |
| 539 | + meth = @cfunctionOOO(pyjlany_dir), |
| 540 | + ), |
| 541 | + PyMethodDef( |
| 542 | + name = cacheptr!(c, "_repr_mimebundle_"), |
| 543 | + flags = Py_METH_VARARGS | Py_METH_KEYWORDS, |
| 544 | + meth = @cfunctionOOOO(pyjlany_repr_mimebundle), |
| 545 | + ), |
| 546 | + PyMethodDef( |
| 547 | + name = cacheptr!(c, "_jl_raw"), |
| 548 | + flags = Py_METH_NOARGS, |
| 549 | + meth = @cfunctionOOO(pyjlany_toraw), |
| 550 | + ), |
| 551 | + PyMethodDef( |
| 552 | + name = cacheptr!(c, "_jl_display"), |
| 553 | + flags = Py_METH_NOARGS, |
| 554 | + meth = @cfunctionOOO(pyjlany_display), |
| 555 | + ), |
| 556 | + PyMethodDef( |
| 557 | + name = cacheptr!(c, "_jl_help"), |
| 558 | + flags = Py_METH_NOARGS, |
| 559 | + meth = @cfunctionOOO(pyjlany_help), |
| 560 | + ), |
| 561 | + PyMethodDef(), |
| 562 | + ]), |
| 563 | + getset = cacheptr!(c, [ |
| 564 | + PyGetSetDef( |
| 565 | + name = cacheptr!(c, "__name__"), |
| 566 | + get = @cfunctionOOP(pyjlany_name), |
| 567 | + ), |
| 568 | + PyGetSetDef(), |
| 569 | + ]) |
| 570 | + )))) |
| 571 | + err = PyType_Ready(ptr) |
| 572 | + ism1(err) && return PyNULL |
| 573 | + PYJLGCCACHE[ptr] = c |
| 574 | + return ptr |
| 575 | +end |
0 commit comments