void feat_set(cst_features *f, const char* name, const cst_val *val) { cst_featvalpair *n; n = feat_find_featpair(f,name); if (val == NULL) { cst_errmsg("cst_val: trying to set a NULL val for feature \"%s\"\n", name); } else if (n == NULL) { /* first reference to this feature so create new fpair */ cst_featvalpair *p; p = (cst_featvalpair *)cst_local_alloc(f->ctx, sizeof(*p)); p->next = f->head; p->name = name; p->val = val_inc_refcount(val); f->head = p; } else { delete_val(n->val); n->val = val_inc_refcount(val); } }
void feat_set(cst_features *f, const char* name, const cst_val *val) { cst_featvalpair *n; n = feat_find_featpair(f,name); if (val == NULL) { cst_errmsg("cst_val: trying to set a NULL val for feature \"%s\"\n", name); } else if (n == NULL) { /* first reference to this feature so create new fpair */ cst_featvalpair *p; p = (cst_featvalpair *)cst_local_alloc(f->ctx, sizeof(*p)); #import "OpenEarsStaticAnalysisToggle.h" #ifdef STATICANALYZEDEPENDENCIES #define __clang_analyzer__ 1 #endif #if !defined(__clang_analyzer__) || defined(STATICANALYZEDEPENDENCIES) #undef __clang_analyzer__ p->next = f->head; p->name = name; p->val = val_inc_refcount(val); f->head = p; } else { delete_val(n->val); n->val = val_inc_refcount(val); } #endif }
cst_val *cons_val(const cst_val *a, const cst_val *b) { cst_val *v = new_val(); CST_VAL_CAR(v)=((!a || cst_val_consp(a)) ? (cst_val *)(void *)a:val_inc_refcount(a)); CST_VAL_CDR(v)=((!b || cst_val_consp(b)) ? (cst_val *)(void *)b:val_inc_refcount(b)); return v; }
const cst_val *set_car(cst_val *v1, const cst_val *v2) { /* destructive set car, be careful you have a pointer to current cdr */ if (!cst_val_consp(v1)) { cst_errmsg("VAL: tried to set car of non-consp cell\n"); cst_error(); return NULL; } else { val_dec_refcount(CST_VAL_CAR(v1)); val_inc_refcount(v1); CST_VAL_CAR(v1) = (cst_val *)v2; } return v1; }