43 #include <sexp-types.h>
101 #define SEXP_number_newi SEXP_number_newi_32
113 #define SEXP_number_geti SEXP_number_geti_32
131 #define SEXP_number_newu SEXP_number_newu_32
143 #define SEXP_number_getu SEXP_number_getu_32
451 typedef struct SEXP_it SEXP_it_t;
453 #define SEXP_IT_RECURSIVE 0x01
454 #define SEXP_IT_HARDREF 0x02
456 SEXP_it_t *SEXP_listit_new (
const SEXP_t *list,
int flags);
457 SEXP_t *SEXP_listit_next(SEXP_it_t *it);
458 SEXP_t *SEXP_listit_prev (SEXP_it_t *it);
459 SEXP_t *SEXP_listit_length (SEXP_it_t *it);
460 SEXP_t *SEXP_listit_seek (SEXP_it_t *it, uint32_t n);
461 void SEXP_listit_free (SEXP_it_t *it);
469 #if __STDC_VERSION__ >= 199901L
470 # include <common/util.h>
478 #define SEXP_list_foreach(var, list) \
479 for (uint32_t OSCAP_CONCAT(i,__LINE__) = 1; ((var) = SEXP_list_nth (list, OSCAP_CONCAT(i,__LINE__))) != NULL; ++OSCAP_CONCAT(i,__LINE__), SEXP_free (var), (var) = NULL)
488 #define SEXP_sublist_foreach(var, list, beg, end) \
489 for (uint32_t OSCAP_CONCAT(i,__LINE__) = (beg); OSCAP_CONCAT(i,__LINE__) <= ((size_t)(end)) && ((var) = SEXP_list_nth (list, OSCAP_CONCAT(i,__LINE__))) != NULL; ++OSCAP_CONCAT(i,__LINE__), SEXP_free (var), (var) = NULL)
491 #define SEXP_LIST_END (UINT32_MAX - 1)
498 SEXP_t *SEXP_new (
void);
500 bool SEXP_emptyp(SEXP_t *sexp);
506 SEXP_t *
SEXP_ref (
const SEXP_t *s_exp);
508 SEXP_t *SEXP_unref (SEXP_t *s_exp_o);
528 bool SEXP_eq (
const SEXP_t *a,
const SEXP_t *b);
535 bool SEXP_deepcmp(
const SEXP_t *a,
const SEXP_t *b);
543 # define SEXP_vfree_coverity(...) \
545 SEXP_t *__svf##__LINE__[] = { __VA_ARGS__ }; \
546 size_t __svfc##__LINE__ = sizeof (__svf##__LINE__)/sizeof(SEXP_t *); \
547 for (; __svfc##__LINE__ > 0; --__svfc##__LINE__) \
548 if (__svf##__LINE__[__svfc##__LINE__ - 1]) \
549 SEXP_free(__svf##__LINE__[__svfc##__LINE__ - 1]); \
558 void SEXP_free (SEXP_t *s_exp);
566 void __SEXP_vfree (
int n, SEXP_t *s_exp, ...);
568 # define SEXP_vfree(...) SEXP_vfree_coverity(__VA_ARGS__)
570 # define SEXP_vfree(...) __SEXP_vfree(PP_NARG(__VA_ARGS__), __VA_ARGS__)
573 # define SEXP_free(ptr) __SEXP_free (ptr, __FILE__, __LINE__, __PRETTY_FUNCTION__)
574 void __SEXP_free (SEXP_t *s_exp,
const char *file, uint32_t line,
const char *func);
576 # define SEXP_vfree(...) SEXP_vfree_coverity(__VA_ARGS__)
578 # define SEXP_vfree(...) __SEXP_vfree (__FILE__, __LINE__, __PRETTY_FUNCTION__, PP_NARG(__VA_ARGS__), __VA_ARGS__)
580 void __SEXP_vfree (
const char *file, uint32_t line,
const char *func,
int n, SEXP_t *s_exp, ...);
615 SEXP_t *SEXP_build (
const char *s_str, ...);
617 size_t SEXP_sizeof (
const SEXP_t *s_exp);
620 # define SEXP_VALIDATE(s) __SEXP_VALIDATE(s, __FILE__, __LINE__, __PRETTY_FUNCTION__)
623 void __SEXP_VALIDATE(
const SEXP_t *s_exp,
const char *file, uint32_t line,
const char *func);
626 # define SEXP_VALIDATE(s)