mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-22 12:30:19 +00:00
...
This commit is contained in:
parent
f59f0c373e
commit
5ee3779a6b
@ -100,6 +100,19 @@ inline void init_builtins(VM* _vm) {
|
|||||||
return VAR(MappingProxy(mod));
|
return VAR(MappingProxy(mod));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
_vm->bind_builtin_func<3>("pow", [](VM* vm, ArgsView args) {
|
||||||
|
i64 lhs = CAST(i64, args[0]); // assume lhs>=0
|
||||||
|
i64 rhs = CAST(i64, args[1]); // assume rhs>=0
|
||||||
|
i64 mod = CAST(i64, args[2]); // assume mod>0
|
||||||
|
i64 res = 1;
|
||||||
|
while(rhs){
|
||||||
|
if(rhs & 1) res = res*lhs % mod;
|
||||||
|
lhs = lhs*lhs % mod;
|
||||||
|
rhs >>= 1;
|
||||||
|
}
|
||||||
|
return VAR(res);
|
||||||
|
});
|
||||||
|
|
||||||
_vm->bind_builtin_func<1>("id", [](VM* vm, ArgsView args) {
|
_vm->bind_builtin_func<1>("id", [](VM* vm, ArgsView args) {
|
||||||
PyObject* obj = args[0];
|
PyObject* obj = args[0];
|
||||||
if(is_tagged(obj)) return vm->None;
|
if(is_tagged(obj)) return vm->None;
|
||||||
@ -301,6 +314,14 @@ inline void init_builtins(VM* _vm) {
|
|||||||
return vm->None;
|
return vm->None;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
_vm->bind_method<0>("int", "bit_length", [](VM* vm, ArgsView args) {
|
||||||
|
i64 x = _CAST(i64, args[0]);
|
||||||
|
if(x < 0) x = -x;
|
||||||
|
int bits = 0;
|
||||||
|
while(x){ x >>= 1; bits++; }
|
||||||
|
return VAR(bits);
|
||||||
|
});
|
||||||
|
|
||||||
_vm->bind__floordiv__(_vm->tp_int, [](VM* vm, PyObject* lhs_, PyObject* rhs_) {
|
_vm->bind__floordiv__(_vm->tp_int, [](VM* vm, PyObject* lhs_, PyObject* rhs_) {
|
||||||
i64 rhs = CAST(i64, rhs_);
|
i64 rhs = CAST(i64, rhs_);
|
||||||
return VAR(_CAST(i64, lhs_) / rhs);
|
return VAR(_CAST(i64, lhs_) / rhs);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user