From 9d8788414f7cd4401493b5fd319a2c85ef992c84 Mon Sep 17 00:00:00 2001 From: Alex Shinn Date: Mon, 20 Sep 2010 20:12:07 +0900 Subject: [PATCH] preserving necessary objects when destroying contexts with safe accessors (also removing some gcc warnings) --- include/chibi/sexp.h | 10 +++++----- sexp.c | 4 ++++ 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/include/chibi/sexp.h b/include/chibi/sexp.h index 51389ebb..49eb8126 100644 --- a/include/chibi/sexp.h +++ b/include/chibi/sexp.h @@ -609,9 +609,9 @@ SEXP_API sexp sexp_make_unsigned_integer(sexp ctx, sexp_luint_t x); /*************************** field accessors **************************/ #if SEXP_USE_SAFE_ACCESSORS -#define sexp_field(x, type, id, field) (*(((x) && sexp_check_tag(x, id)) ? &((x)->value.type.field) : (fprintf(stderr, "invalid field access in %s line %d: %p (%d) isn't a "#type"\n", __FILE__, __LINE__, x, sexp_pointerp(x) ? sexp_pointer_tag(x) : -1), &(((sexp)NULL)->value.type.field)))) -#define sexp_pred_field(x, type, pred, field) (*(((x) && pred(x)) ? &((x)->value.type.field) : (fprintf(stderr, "invalid field access in %s line %d: %p (%d) isn't a "#type"\n", __FILE__, __LINE__, x, sexp_pointerp(x) ? sexp_pointer_tag(x) : -1), &(((sexp)NULL)->value.type.field)))) -#define sexp_cpointer_field(x, field) (*(((x) && sexp_pointerp(x) && sexp_pointer_tag(x) >= SEXP_CPOINTER) ? &((x)->value.cpointer.field) : (fprintf(stderr, "invalid field access in %s line %d: %p (%d) isn't a cpointer\n", __FILE__, __LINE__, x, sexp_pointerp(x) ? sexp_pointer_tag(x) : -1), &(((sexp)NULL)->value.cpointer.field)))) +#define sexp_field(x, type, id, field) (*(((x) && sexp_check_tag(x, id)) ? &((x)->value.type.field) : (fprintf(stderr, "invalid field access in %s line %d: %p (%d) isn't a "#type"\n", __FILE__, __LINE__, x, (int)(sexp_pointerp(x) ? sexp_pointer_tag(x) : -1)), &(((sexp)NULL)->value.type.field)))) +#define sexp_pred_field(x, type, pred, field) (*(((x) && pred(x)) ? &((x)->value.type.field) : (fprintf(stderr, "invalid field access in %s line %d: %p (%d) isn't a "#type"\n", __FILE__, __LINE__, x, (int)(sexp_pointerp(x) ? sexp_pointer_tag(x) : -1)), &(((sexp)NULL)->value.type.field)))) +#define sexp_cpointer_field(x, field) (*(((x) && sexp_pointerp(x) && sexp_pointer_tag(x) >= SEXP_CPOINTER) ? &((x)->value.cpointer.field) : (fprintf(stderr, "invalid field access in %s line %d: %p (%d) isn't a cpointer\n", __FILE__, __LINE__, x, (int)(sexp_pointerp(x) ? sexp_pointer_tag(x) : -1)), &(((sexp)NULL)->value.cpointer.field)))) #else #define sexp_field(x, type, id, field) ((x)->value.type.field) #define sexp_pred_field(x, type, pred, field) ((x)->value.type.field) @@ -622,8 +622,8 @@ SEXP_API sexp sexp_make_unsigned_integer(sexp ctx, sexp_luint_t x); #define sexp_vector_data(x) (sexp_field(x, vector, SEXP_VECTOR, data)) #if SEXP_USE_SAFE_ACCESSORS -#define sexp_vector_ref(x,i) (sexp_unbox_fixnum(i)>=0 && sexp_unbox_fixnum(i)=0 && sexp_unbox_fixnum(i)=0 && sexp_unbox_fixnum(i)=0 && sexp_unbox_fixnum(i)