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);
551 # define SEXP_vfree(...) __SEXP_vfree(PP_NARG(__VA_ARGS__), __VA_ARGS__)
553 # define SEXP_free(ptr) __SEXP_free (ptr, __FILE__, __LINE__, __PRETTY_FUNCTION__)
554 void __SEXP_free (SEXP_t *s_exp,
const char *file, uint32_t line,
const char *func);
555 # define SEXP_vfree(...) __SEXP_vfree (__FILE__, __LINE__, __PRETTY_FUNCTION__, PP_NARG(__VA_ARGS__), __VA_ARGS__)
556 void __SEXP_vfree (
const char *file, uint32_t line,
const char *func,
int n, SEXP_t *s_exp, ...);
591 SEXP_t *SEXP_build (
const char *s_str, ...);
593 size_t SEXP_sizeof (
const SEXP_t *s_exp);
596 # define SEXP_VALIDATE(s) __SEXP_VALIDATE(s, __FILE__, __LINE__, __PRETTY_FUNCTION__)
599 void __SEXP_VALIDATE(
const SEXP_t *s_exp,
const char *file, uint32_t line,
const char *func);
602 # define SEXP_VALIDATE(s)