#import "scheme-object.h" @implementation Scheme_Object_Wrapper - (id)initWithObject: (C_word)obj { if (root != NULL) return [self updateWithObject: obj]; root = CHICKEN_new_gc_root(); CHICKEN_gc_root_set(root, obj); return self; } - (id)updateWithObject: (C_word)obj { if (root == NULL) return NULL; CHICKEN_gc_root_set(root, obj); return self; } - (C_word)__scheme_object__ { C_word obj; if (root == NULL) return C_SCHEME_UNDEFINED; obj = CHICKEN_gc_root_ref(root); return(CHICKEN_gc_root_ref(root)); } - (void)dealloc { if (root != NULL) { CHICKEN_delete_gc_root(root); } [super dealloc]; } @end