/* obj-info.c
*
* COPYRIGHT (c) 1993 AT&T Bell Laboratories.
*/
#include "ml-base.h"
#include "ml-values.h"
#include "heap.h"
#include "gc.h"
/* GetObjGen:
*
* Get the generation of an object (return -1 for external/unboxed objects).
*/
int GetObjGen (ml_val_t obj)
{
if (isBOXED(obj)) {
aid_t aid = ADDR_TO_PAGEID(BIBOP, obj);
if (IS_BIGOBJ_AID(aid)) {
int i;
bigobj_region_t *region;
bigobj_desc_t *dp;
for (i = BIBOP_ADDR_TO_INDEX(obj); !BO_IS_HDR(aid); aid = BIBOP[--i])
continue;
region = (bigobj_region_t *)BIBOP_INDEX_TO_ADDR(i);
dp = ADDR_TO_BODESC(region, obj);
return dp->gen;
}
else if (aid == AID_NEW)
return 0;
else if (isUNMAPPED(aid))
return -1;
else
return EXTRACT_GEN(aid);
}
else
return -1;
} /* end of GetObjGen */
syntax highlighted by Code2HTML, v. 0.9.1