2024-07-02 15:01:04 +08:00

50 lines
1.2 KiB
C

#include "pocketpy/common/str.h"
#include "pocketpy/pocketpy.h"
#include "pocketpy/common/utils.h"
#include "pocketpy/objects/object.h"
#include "pocketpy/interpreter/vm.h"
int64_t py_toint(const py_Ref self) {
assert(self->type == tp_int);
return self->_i64;
}
double py_tofloat(const py_Ref self) {
assert(self->type == tp_float);
return self->_f64;
}
bool py_castfloat(const py_Ref self, double* out) {
switch(self->type) {
case tp_int: *out = (double)self->_i64; return true;
case tp_float: *out = self->_f64; return true;
default: return false;
}
}
bool py_tobool(const py_Ref self) {
assert(self->type == tp_bool);
return self->_bool;
}
py_Type py_totype(const py_Ref self) {
assert(self->type == tp_type);
py_Type* ud = py_touserdata(self);
return *ud;
}
void* py_touserdata(const py_Ref self) {
assert(self && self->is_ptr);
return PyObject__userdata(self->_obj);
}
bool py_istype(const py_Ref self, py_Type type) { return self->type == type; }
bool py_checktype(const py_Ref self, py_Type type) {
if(self->type != type) {
// py_raise(PyExc_TypeError, "expected %s, got %s", py_typename(type), py_typename(self->type));
return false;
}
return true;
}