mirror of
https://github.com/RustPython/RustPython.git
synced 2026-10-28 18:59:04 +08:00
Add more number functions to c-api (#8158)
This commit is contained in:
1 parent
f81c320281
commit
64feb29094
1 file changed
+202
@@ -1,15 +1,217 @@
|
||||
use crate::{PyObject, pystate::with_vm};
|
||||
use core::ffi::c_int;
|
||||
use rustpython_vm::protocol::PyNumber;
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
pub unsafe extern "C" fn PyNumber_Add(o1: *mut PyObject, o2: *mut PyObject) -> *mut PyObject {
|
||||
with_vm(|vm| vm._add(unsafe { &*o1 }, unsafe { &*o2 }))
|
||||
}
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
pub unsafe extern "C" fn PyIndex_Check(obj: *mut PyObject) -> c_int {
|
||||
with_vm(|_vm| unsafe { obj.as_ref() }.is_some_and(|obj| obj.number().is_index()))
|
||||
}
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
pub unsafe extern "C" fn PyNumber_Absolute(o: *mut PyObject) -> *mut PyObject {
|
||||
with_vm(|vm| vm._abs(unsafe { &*o }))
|
||||
}
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
pub unsafe extern "C" fn PyNumber_And(o1: *mut PyObject, o2: *mut PyObject) -> *mut PyObject {
|
||||
with_vm(|vm| vm._and(unsafe { &*o1 }, unsafe { &*o2 }))
|
||||
}
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
pub unsafe extern "C" fn PyNumber_Check(o: *mut PyObject) -> c_int {
|
||||
with_vm(|_vm| unsafe { o.as_ref() }.is_some_and(PyNumber::check))
|
||||
}
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
pub unsafe extern "C" fn PyNumber_Divmod(o1: *mut PyObject, o2: *mut PyObject) -> *mut PyObject {
|
||||
with_vm(|vm| vm._divmod(unsafe { &*o1 }, unsafe { &*o2 }))
|
||||
}
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
pub unsafe extern "C" fn PyNumber_Float(o: *mut PyObject) -> *mut PyObject {
|
||||
with_vm(|vm| unsafe { &*o }.try_float(vm))
|
||||
}
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
pub unsafe extern "C" fn PyNumber_FloorDivide(
|
||||
o1: *mut PyObject,
|
||||
o2: *mut PyObject,
|
||||
) -> *mut PyObject {
|
||||
with_vm(|vm| vm._floordiv(unsafe { &*o1 }, unsafe { &*o2 }))
|
||||
}
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
pub unsafe extern "C" fn PyNumber_InPlaceAdd(
|
||||
o1: *mut PyObject,
|
||||
o2: *mut PyObject,
|
||||
) -> *mut PyObject {
|
||||
with_vm(|vm| vm._iadd(unsafe { &*o1 }, unsafe { &*o2 }))
|
||||
}
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
pub unsafe extern "C" fn PyNumber_InPlaceAnd(
|
||||
o1: *mut PyObject,
|
||||
o2: *mut PyObject,
|
||||
) -> *mut PyObject {
|
||||
with_vm(|vm| vm._iand(unsafe { &*o1 }, unsafe { &*o2 }))
|
||||
}
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
pub unsafe extern "C" fn PyNumber_InPlaceFloorDivide(
|
||||
o1: *mut PyObject,
|
||||
o2: *mut PyObject,
|
||||
) -> *mut PyObject {
|
||||
with_vm(|vm| vm._ifloordiv(unsafe { &*o1 }, unsafe { &*o2 }))
|
||||
}
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
pub unsafe extern "C" fn PyNumber_InPlaceLshift(
|
||||
o1: *mut PyObject,
|
||||
o2: *mut PyObject,
|
||||
) -> *mut PyObject {
|
||||
with_vm(|vm| vm._ilshift(unsafe { &*o1 }, unsafe { &*o2 }))
|
||||
}
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
pub unsafe extern "C" fn PyNumber_InPlaceMatrixMultiply(
|
||||
o1: *mut PyObject,
|
||||
o2: *mut PyObject,
|
||||
) -> *mut PyObject {
|
||||
with_vm(|vm| vm._imatmul(unsafe { &*o1 }, unsafe { &*o2 }))
|
||||
}
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
pub unsafe extern "C" fn PyNumber_InPlaceMultiply(
|
||||
o1: *mut PyObject,
|
||||
o2: *mut PyObject,
|
||||
) -> *mut PyObject {
|
||||
with_vm(|vm| vm._imul(unsafe { &*o1 }, unsafe { &*o2 }))
|
||||
}
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
pub unsafe extern "C" fn PyNumber_InPlaceOr(o1: *mut PyObject, o2: *mut PyObject) -> *mut PyObject {
|
||||
with_vm(|vm| vm._ior(unsafe { &*o1 }, unsafe { &*o2 }))
|
||||
}
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
pub unsafe extern "C" fn PyNumber_InPlacePower(
|
||||
o1: *mut PyObject,
|
||||
o2: *mut PyObject,
|
||||
o3: *mut PyObject,
|
||||
) -> *mut PyObject {
|
||||
with_vm(|vm| vm._ipow(unsafe { &*o1 }, unsafe { &*o2 }, unsafe { &*o3 }))
|
||||
}
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
pub unsafe extern "C" fn PyNumber_InPlaceRemainder(
|
||||
o1: *mut PyObject,
|
||||
o2: *mut PyObject,
|
||||
) -> *mut PyObject {
|
||||
with_vm(|vm| vm._imod(unsafe { &*o1 }, unsafe { &*o2 }))
|
||||
}
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
pub unsafe extern "C" fn PyNumber_InPlaceRshift(
|
||||
o1: *mut PyObject,
|
||||
o2: *mut PyObject,
|
||||
) -> *mut PyObject {
|
||||
with_vm(|vm| vm._irshift(unsafe { &*o1 }, unsafe { &*o2 }))
|
||||
}
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
pub unsafe extern "C" fn PyNumber_InPlaceSubtract(
|
||||
o1: *mut PyObject,
|
||||
o2: *mut PyObject,
|
||||
) -> *mut PyObject {
|
||||
with_vm(|vm| vm._isub(unsafe { &*o1 }, unsafe { &*o2 }))
|
||||
}
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
pub unsafe extern "C" fn PyNumber_InPlaceTrueDivide(
|
||||
o1: *mut PyObject,
|
||||
o2: *mut PyObject,
|
||||
) -> *mut PyObject {
|
||||
with_vm(|vm| vm._itruediv(unsafe { &*o1 }, unsafe { &*o2 }))
|
||||
}
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
pub unsafe extern "C" fn PyNumber_InPlaceXor(
|
||||
o1: *mut PyObject,
|
||||
o2: *mut PyObject,
|
||||
) -> *mut PyObject {
|
||||
with_vm(|vm| vm._ixor(unsafe { &*o1 }, unsafe { &*o2 }))
|
||||
}
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
pub unsafe extern "C" fn PyNumber_Invert(o: *mut PyObject) -> *mut PyObject {
|
||||
with_vm(|vm| vm._invert(unsafe { &*o }))
|
||||
}
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
pub unsafe extern "C" fn PyNumber_Index(obj: *mut PyObject) -> *mut PyObject {
|
||||
with_vm(|vm| unsafe { &*obj }.try_index(vm))
|
||||
}
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
pub unsafe extern "C" fn PyNumber_MatrixMultiply(
|
||||
o1: *mut PyObject,
|
||||
o2: *mut PyObject,
|
||||
) -> *mut PyObject {
|
||||
with_vm(|vm| vm._matmul(unsafe { &*o1 }, unsafe { &*o2 }))
|
||||
}
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
pub unsafe extern "C" fn PyNumber_Multiply(o1: *mut PyObject, o2: *mut PyObject) -> *mut PyObject {
|
||||
with_vm(|vm| vm._mul(unsafe { &*o1 }, unsafe { &*o2 }))
|
||||
}
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
pub unsafe extern "C" fn PyNumber_Negative(o: *mut PyObject) -> *mut PyObject {
|
||||
with_vm(|vm| vm._neg(unsafe { &*o }))
|
||||
}
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
pub unsafe extern "C" fn PyNumber_Positive(o: *mut PyObject) -> *mut PyObject {
|
||||
with_vm(|vm| vm._pos(unsafe { &*o }))
|
||||
}
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
pub unsafe extern "C" fn PyNumber_Power(
|
||||
o1: *mut PyObject,
|
||||
o2: *mut PyObject,
|
||||
o3: *mut PyObject,
|
||||
) -> *mut PyObject {
|
||||
with_vm(|vm| vm._pow(unsafe { &*o1 }, unsafe { &*o2 }, unsafe { &*o3 }))
|
||||
}
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
pub unsafe extern "C" fn PyNumber_Remainder(o1: *mut PyObject, o2: *mut PyObject) -> *mut PyObject {
|
||||
with_vm(|vm| vm._mod(unsafe { &*o1 }, unsafe { &*o2 }))
|
||||
}
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
pub unsafe extern "C" fn PyNumber_TrueDivide(
|
||||
o1: *mut PyObject,
|
||||
o2: *mut PyObject,
|
||||
) -> *mut PyObject {
|
||||
with_vm(|vm| vm._truediv(unsafe { &*o1 }, unsafe { &*o2 }))
|
||||
}
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
pub unsafe extern "C" fn PyNumber_Xor(o1: *mut PyObject, o2: *mut PyObject) -> *mut PyObject {
|
||||
with_vm(|vm| vm._xor(unsafe { &*o1 }, unsafe { &*o2 }))
|
||||
}
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
pub unsafe extern "C" fn PyNumber_Long(obj: *mut PyObject) -> *mut PyObject {
|
||||
with_vm(|vm| unsafe { &*obj }.try_int(vm))
|
||||
}
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
pub unsafe extern "C" fn PyNumber_Lshift(o1: *mut PyObject, o2: *mut PyObject) -> *mut PyObject {
|
||||
with_vm(|vm| vm._lshift(unsafe { &*o1 }, unsafe { &*o2 }))
|
||||
|
||||
Reference in new issue
Block a user