3 bool typep(CELL type, CELL tagged)
7 if(TAG(tagged) == type)
10 else if(type >= HEADER_TYPE)
12 if(TAG(tagged) == OBJECT_TYPE)
14 if(untag_header(get(UNTAG(tagged))) == type)
22 CELL type_of(CELL tagged)
24 CELL tag = TAG(tagged);
25 if(tag != OBJECT_TYPE)
28 return untag_header(get(UNTAG(tagged)));
31 void type_check(CELL type, CELL tagged)
33 if(type < HEADER_TYPE)
35 if(TAG(tagged) == type)
38 else if(type >= HEADER_TYPE)
40 if(TAG(tagged) == OBJECT_TYPE)
42 if(untag_header(get(UNTAG(tagged))) == type)
47 type_error(type,tagged);
51 * It is up to the caller to fill in the object's fields in a meaningful
54 CELL allot_object(CELL type, CELL length)
56 CELL object = allot(length);
57 put(object,tag_header(type));
61 CELL object_size(CELL pointer)
66 return align8(sizeof(CONS));
68 return align8(sizeof(WORD));
70 return untagged_object_size(UNTAG(pointer));
72 critical_error("Cannot determine size",pointer);
77 CELL untagged_object_size(CELL pointer)
81 switch(untag_header(get(pointer)))
84 return align8(sizeof(WORD));
91 size = ASIZE(pointer);
94 size = sizeof(VECTOR);
97 size = SSIZE(pointer);
103 size = sizeof(HANDLE);
106 critical_error("Cannot determine size",relocating);
107 size = -1;/* can't happen */