mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-04-30 03:40:34 +02:00
36 lines
978 B
C
36 lines
978 B
C
#ifndef GC_STACK_ADDR_H
|
|
#define GC_STACK_ADDR_H
|
|
|
|
#include "gc-assert.h"
|
|
#include "gc-visibility.h"
|
|
|
|
struct gc_stack_addr {
|
|
uintptr_t addr;
|
|
};
|
|
|
|
static inline struct gc_stack_addr gc_empty_stack_addr (void) {
|
|
return (struct gc_stack_addr){ 0 };
|
|
};
|
|
|
|
static inline int gc_stack_addr_is_empty (struct gc_stack_addr addr) {
|
|
return addr.addr == 0;
|
|
};
|
|
|
|
static inline char* gc_stack_addr_as_pointer (struct gc_stack_addr addr) {
|
|
GC_ASSERT(!gc_stack_addr_is_empty(addr));
|
|
return (char*)addr.addr;
|
|
};
|
|
|
|
static inline struct gc_stack_addr gc_stack_addr (uintptr_t addr) {
|
|
GC_ASSERT(addr);
|
|
return (struct gc_stack_addr){ addr };
|
|
};
|
|
|
|
GC_API_ void* gc_call_with_stack_addr(void* (*f)(struct gc_stack_addr,
|
|
void *),
|
|
void *data) GC_NEVER_INLINE;
|
|
|
|
GC_API_ int gc_stack_addr_is_colder(struct gc_stack_addr a,
|
|
struct gc_stack_addr b);
|
|
|
|
#endif // GC_STACK_ADDR_H
|