This commit is contained in:
blueloveTH 2023-06-15 15:13:30 +08:00
parent f59f0c373e
commit 5ee3779a6b

View File

@ -100,6 +100,19 @@ inline void init_builtins(VM* _vm) {
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) {
PyObject* obj = args[0];
if(is_tagged(obj)) return vm->None;
@ -301,6 +314,14 @@ inline void init_builtins(VM* _vm) {
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_) {
i64 rhs = CAST(i64, rhs_);
return VAR(_CAST(i64, lhs_) / rhs);