Initial (bad) gc
This commit is contained in:
+16
-9
@@ -89,14 +89,16 @@ typedef enum {
|
||||
} LispValType;
|
||||
extern const char *LISP_TYPE_NAMES[N_LISP_TYPES];
|
||||
|
||||
#define LISP_OBJECT_ALIGNMENT (1 << LISP_TAG_BITS)
|
||||
void *lisp_alloc_object(size_t size, LispValType type);
|
||||
|
||||
typedef struct {
|
||||
LispValType type;
|
||||
ObjectGCInfo gc;
|
||||
} LispObject;
|
||||
|
||||
#define LISP_OBJECT_ALIGNMENT (1 << LISP_TAG_BITS)
|
||||
LispVal *lisp_alloc_object_no_gc(size_t size, LispValType type);
|
||||
LispVal *lisp_alloc_object(size_t size, LispValType type);
|
||||
void lisp_release_object(LispVal *val);
|
||||
|
||||
static ALWAYS_INLINE bool OBJECTP(LispVal *val) {
|
||||
return EXTRACT_TAG(val) == LISP_OBJECT_TAG;
|
||||
}
|
||||
@@ -111,15 +113,19 @@ static ALWAYS_INLINE bool OBJECT_MARKED_P(LispVal *val) {
|
||||
return ((LispObject *) val)->gc.mark;
|
||||
}
|
||||
|
||||
// ONLY APPLIES TO THE CALLING THREAD
|
||||
static ALWAYS_INLINE bool OBJECT_HAS_LOCAL_REFERENCE_P(LispVal *val) {
|
||||
assert(OBJECTP(val));
|
||||
LispObject *obj = val;
|
||||
return tss_get(obj->gc.has_local_ref);
|
||||
}
|
||||
|
||||
static ALWAYS_INLINE void SET_OBJECT_HAS_LOCAL_REFERENCE(LispVal *val,
|
||||
bool has_local_ref) {
|
||||
assert(OBJECTP(val));
|
||||
((LispObject *) val)->gc.has_local_ref = has_local_ref;
|
||||
}
|
||||
|
||||
static ALWAYS_INLINE bool OBJECT_HAS_LOCAL_REFERENCE_P(LispVal *val) {
|
||||
assert(OBJECTP(val));
|
||||
return ((LispObject *) val)->gc.has_local_ref;
|
||||
LispObject *obj = val;
|
||||
tss_set(obj->gc.has_local_ref,
|
||||
(void *) (uintptr_t) (has_local_ref ? 1 : 0));
|
||||
}
|
||||
|
||||
static ALWAYS_INLINE LispValType TYPE_OF(LispVal *val) {
|
||||
@@ -240,6 +246,7 @@ DEFOBJTYPE(Vector, VECTOR, VECTORP, {
|
||||
Q##cname = Fintern(make_lisp_string(internal_Q##cname##_name, \
|
||||
internal_Q##cname##_name_len, \
|
||||
false, false)); \
|
||||
lisp_gc_register_static_object(Q##cname); \
|
||||
}
|
||||
#define REGISTER_GLOBAL_FUNCTION(cname) \
|
||||
{ \
|
||||
|
||||
Reference in New Issue
Block a user