Functions | |
def | sizeof |
def | print_sizes |
USAGE
sizeof.sizeof(obj)
Prints the size of the given object. If obj is an integer from 0..31, the size of the object type represented by that integer will be returned.
def sizeof::sizeof | ( | obj | ) |
__NATIVE__ pPmObj_t pobj; pPmObj_t psize; int32_t n; PmReturn_t retval = PM_RET_OK; int32_t static size[] = { sizeof(PmObj_t), /* None type */ sizeof(PmInt_t), sizeof(PmFloat_t), sizeof(PmString_t), sizeof(PmTuple_t), sizeof(PmCo_t), sizeof(PmFunc_t), /* Module Obj uses func struct */ sizeof(PmClass_t), sizeof(PmFunc_t), sizeof(PmClass_t), /* Class instance */ 0, /* CIM */ 0, /* NIM */ sizeof(PmCo_t), /* NOB */ sizeof(PmThread_t), sizeof(PmClass_t), /* Exception instance */ sizeof(PmBoolean_t), sizeof(PmCodeImgObj_t), sizeof(PmList_t), sizeof(PmDict_t), 0, 0, 0, 0, 0, 0, sizeof(PmFrame_t), sizeof(PmBlock_t), sizeof(Segment_t), sizeof(Seglist_t), sizeof(PmSeqIter_t), sizeof(PmNativeFrame_t), }; /* If wrong number of args, raise TypeError */ if (NATIVE_GET_NUM_ARGS() != 1) { PM_RAISE(retval, PM_RET_EX_TYPE); return retval; } pobj = NATIVE_GET_LOCAL(0); if (OBJ_GET_TYPE(pobj) == OBJ_TYPE_INT) { n = ((pPmInt_t)pobj)->val; if ((n >= 0) && (n < 32)) { /* Return the size of the type represented by the integer */ retval = int_new(size[n], &psize); } else { /* Return the size of an integer object */ retval = int_new(OBJ_GET_SIZE(pobj), &psize); } } else { /* Return the size of the given non-integer object */ retval = int_new(OBJ_GET_SIZE(pobj), &psize); } NATIVE_SET_TOS(psize); return retval;