cur = STAILQ_FIRST(headp);
while (cur) {
next = STAILQ_NEXT(cur, link);
- expr_delete(cur->val);
+ if (cur->val)
+ xfree(cur->val);
if (cur->param)
expr_delete(cur->param);
xfree(cur);
typedef struct valparam {
/*@reldef@*/ STAILQ_ENTRY(valparam) link;
- /*@owned@*/ expr *val;
+ /*@owned@*/ /*@null@*/ char *val;
/*@owned@*/ /*@null@*/ expr *param;
} valparam;
typedef /*@reldef@*/ STAILQ_HEAD(valparamhead, valparam) valparamhead;
-void vp_new(/*@out@*/ valparam *r, /*@keep@*/ expr *v, /*@keep@*/ expr *p);
+void vp_new(/*@out@*/ valparam *r, /*@keep@*/ const char *v,
+ /*@keep@*/ expr *p);
#define vp_new(r, v, p) do { \
r = xmalloc(sizeof(valparam)); \
r->val = v; \
STAILQ_INSERT_TAIL(headp, vp, link); \
} while(0)
+/*@null@*/ /*@dependent@*/ valparam *vps_first(valparamhead *headp);
+#define vps_first(headp) STAILQ_FIRST(headp)
+
#define vps_foreach(iter, headp) STAILQ_FOREACH(iter, headp, link)
#endif
cur = STAILQ_FIRST(headp);
while (cur) {
next = STAILQ_NEXT(cur, link);
- expr_delete(cur->val);
+ if (cur->val)
+ xfree(cur->val);
if (cur->param)
expr_delete(cur->param);
xfree(cur);
typedef struct valparam {
/*@reldef@*/ STAILQ_ENTRY(valparam) link;
- /*@owned@*/ expr *val;
+ /*@owned@*/ /*@null@*/ char *val;
/*@owned@*/ /*@null@*/ expr *param;
} valparam;
typedef /*@reldef@*/ STAILQ_HEAD(valparamhead, valparam) valparamhead;
-void vp_new(/*@out@*/ valparam *r, /*@keep@*/ expr *v, /*@keep@*/ expr *p);
+void vp_new(/*@out@*/ valparam *r, /*@keep@*/ const char *v,
+ /*@keep@*/ expr *p);
#define vp_new(r, v, p) do { \
r = xmalloc(sizeof(valparam)); \
r->val = v; \
STAILQ_INSERT_TAIL(headp, vp, link); \
} while(0)
+/*@null@*/ /*@dependent@*/ valparam *vps_first(valparamhead *headp);
+#define vps_first(headp) STAILQ_FIRST(headp)
+
#define vps_foreach(iter, headp) STAILQ_FOREACH(iter, headp, link)
#endif