Lines Matching defs:sexpr

33 #include <isccc/sexpr.h>
43 isccc_sexpr_t *sexpr;
45 sexpr = malloc(sizeof(*sexpr));
46 if (sexpr == NULL)
48 sexpr->type = ISCCC_SEXPRTYPE_DOTTEDPAIR;
49 CAR(sexpr) = car;
50 CDR(sexpr) = cdr;
52 return (sexpr);
62 isccc_sexpr_t *sexpr;
64 sexpr = malloc(sizeof(*sexpr));
65 if (sexpr == NULL)
67 sexpr->type = ISCCC_SEXPRTYPE_STRING;
68 sexpr->value.as_string = strdup(str);
69 if (sexpr->value.as_string == NULL) {
70 free(sexpr);
74 return (sexpr);
79 isccc_sexpr_t *sexpr;
82 sexpr = malloc(sizeof(*sexpr));
83 if (sexpr == NULL)
85 sexpr->type = ISCCC_SEXPRTYPE_BINARY;
94 sexpr->value.as_region.rstart = malloc(region_size + 1);
95 if (sexpr->value.as_region.rstart == NULL) {
96 free(sexpr);
99 sexpr->value.as_region.rend = sexpr->value.as_region.rstart +
101 memmove(sexpr->value.as_region.rstart, region->rstart, region_size);
105 sexpr->value.as_region.rstart[region_size] = '\0';
107 return (sexpr);
112 isccc_sexpr_t *sexpr;
115 sexpr = *sexprp;
116 if (sexpr == NULL)
118 switch (sexpr->type) {
120 free(sexpr->value.as_string);
123 item = CAR(sexpr);
126 item = CDR(sexpr);
131 free(sexpr->value.as_region.rstart);
134 free(sexpr);
154 isccc_sexpr_print(isccc_sexpr_t *sexpr, FILE *stream) {
159 if (sexpr == NULL) {
164 switch (sexpr->type) {
169 fprintf(stream, "\"%s\"", sexpr->value.as_string);
174 isccc_sexpr_print(CAR(sexpr), stream);
175 cdr = CDR(sexpr);
184 sexpr = cdr;
185 } while (sexpr != NULL);
189 size = REGION_SIZE(sexpr->value.as_region);
190 curr = sexpr->value.as_region.rstart;
191 if (printable(&sexpr->value.as_region)) {
255 isccc_sexpr_listp(isccc_sexpr_t *sexpr) {
256 if (sexpr == NULL || sexpr->type == ISCCC_SEXPRTYPE_DOTTEDPAIR)
262 isccc_sexpr_emptyp(isccc_sexpr_t *sexpr) {
263 if (sexpr == NULL)
269 isccc_sexpr_stringp(isccc_sexpr_t *sexpr) {
270 if (sexpr != NULL && sexpr->type == ISCCC_SEXPRTYPE_STRING)
276 isccc_sexpr_binaryp(isccc_sexpr_t *sexpr) {
277 if (sexpr != NULL && sexpr->type == ISCCC_SEXPRTYPE_BINARY)
283 isccc_sexpr_tostring(isccc_sexpr_t *sexpr) {
284 REQUIRE(sexpr != NULL &&
285 (sexpr->type == ISCCC_SEXPRTYPE_STRING ||
286 sexpr->type == ISCCC_SEXPRTYPE_BINARY));
288 if (sexpr->type == ISCCC_SEXPRTYPE_BINARY)
289 return ((char *)sexpr->value.as_region.rstart);
290 return (sexpr->value.as_string);
294 isccc_sexpr_tobinary(isccc_sexpr_t *sexpr) {
295 REQUIRE(sexpr != NULL && sexpr->type == ISCCC_SEXPRTYPE_BINARY);
296 return (&sexpr->value.as_region);