4 ** freeShallow: free exprData created from exprNode_effect calls.
5 ** All but the innermost storage is free'd.
12 static void exprData_freeShallow (/*@only@*/ exprData data, exprKind kind)
16 if (data == exprData_undefined)
25 exprNode_freeShallow (data->call->fcn);
26 exprNodeList_freeShallow (data->call->args);
39 exprNode_freeShallow (data->op->a);
40 exprNode_freeShallow (data->op->b);
48 exprNode_freeShallow (data->uop->a);
57 exprNode_freeShallow (data->single);
62 exprNode_freeShallow (data->cast->exp);
63 /* NO: qtype_free (data->cast->q); */
68 exprNodeList_freeShallow (data->itercall->args);
69 sfree (data->itercall);
73 exprNodeList_freeShallow (data->iter->args);
74 exprNode_freeShallow (data->iter->body);
81 exprNode_freeShallow (data->triple->pred);
82 exprNode_freeShallow (data->triple->tbranch);
83 exprNode_freeShallow (data->triple->fbranch);
88 exprNode_freeShallow (data->init->exp);
89 /* NO: idDecl_free (data->init->id); */
95 exprNode_freeShallow (data->field->rec);
96 /* NO: cstring_free (data->field->field); */
119 case XPR_STRINGLITERAL:
121 llcontbuglit ("exprData_freeShallow: not shallow!");
125 llcontbuglit ("XPR_EMPTY case!");
129 llcontbuglit ("XPR_BODY case!");
132 llcontbuglit ("XPR_NODE case!");
140 static void exprData_free (/*@only@*/ exprData data, exprKind kind)
142 if (data == exprData_undefined)
151 exprNode_free (data->call->fcn);
152 exprNodeList_free (data->call->args);
159 cstring_free (data->id);
172 exprNode_free (data->op->a);
173 exprNode_free (data->op->b);
181 exprNode_free (data->uop->a);
186 qtype_free (data->offset->q);
187 cstringList_free (data->offset->field);
188 sfree (data->offset);
193 qtype_free (data->qt);
203 exprNode_free (data->single);
208 exprNode_free (data->cast->exp);
209 qtype_free (data->cast->q);
214 exprNodeList_free (data->itercall->args);
215 sfree (data->itercall);
219 exprNodeList_free (data->iter->args);
220 exprNode_free (data->iter->body);
227 exprNode_free (data->triple->pred);
228 exprNode_free (data->triple->tbranch);
229 exprNode_free (data->triple->fbranch);
230 sfree (data->triple);
234 case XPR_STRINGLITERAL:
236 cstring_free (data->literal);
250 exprNode_free (data->init->exp);
251 idDecl_free (data->init->id);
257 exprNode_free (data->field->rec);
258 cstring_free (data->field->field);
263 llcontbuglit ("XPR_EMPTY case!");
266 llcontbuglit ("XPR_BODY case!");
269 llcontbuglit ("XPR_NODE case!");
276 static /*@exposed@*/ exprNode exprData_getInitNode (exprData data) /*@*/
278 llassert (data != exprData_undefined);
279 return (data->init->exp);
282 static /*@exposed@*/ idDecl exprData_getInitId (exprData data) /*@*/
284 llassert (data != exprData_undefined);
285 return (data->init->id);
288 static /*@exposed@*/ exprNode exprData_getOpA (exprData data) /*@*/
290 llassert (data != exprData_undefined);
291 return (data->op->a);
294 static /*@exposed@*/ exprNode exprData_getOpB (exprData data) /*@*/
296 llassert (data != exprData_undefined);
297 return (data->op->b);
300 static /*@observer@*/ lltok exprData_getOpTok (exprData data) /*@*/
302 llassert (data != exprData_undefined);
303 return (data->op->op);
306 static /*@exposed@*/ exprNode exprData_getPairA (exprData data) /*@*/
308 llassert (data != exprData_undefined);
309 return (data->pair->a);
312 static /*@exposed@*/ exprNode exprData_getPairB (exprData data) /*@*/
314 llassert (data != exprData_undefined);
315 return (data->pair->b);
319 static /*@exposed@*/ uentry exprData_getIterSname (exprData data) /*@*/
321 llassert (data != exprData_undefined);
322 return (data->iter->sname);
325 static /*@exposed@*/ exprNodeList exprData_getIterAlist (exprData data) /*@*/
327 llassert (data != exprData_undefined);
328 return (data->iter->args);
331 static /*@exposed@*/ exprNode exprData_getIterBody (exprData data) /*@*/
333 llassert (data != exprData_undefined);
334 return (data->iter->body);
337 static /*@exposed@*/ uentry exprData_getIterEname (exprData data) /*@*/
339 llassert (data != exprData_undefined);
340 return (data->iter->ename);
343 static /*@exposed@*/ exprNode exprData_getFcn (exprData data) /*@*/
345 llassert (data != exprData_undefined);
346 return (data->call->fcn);
349 static /*@exposed@*/ exprNodeList exprData_getArgs (exprData data) /*@*/
351 llassert (data != exprData_undefined);
352 return (data->call->args);
355 static /*@exposed@*/ exprNode exprData_getTriplePred (exprData data) /*@*/
357 llassert (data != exprData_undefined);
358 return (data->triple->pred);
361 static /*@exposed@*/ uentry exprData_getIterCallIter (exprData data) /*@*/
363 llassert (data != exprData_undefined);
364 return (data->itercall->iter);
367 static /*@exposed@*/ exprNodeList
368 exprData_getIterCallArgs (exprData data) /*@*/
370 llassert (data != exprData_undefined);
371 return (data->itercall->args);
374 static /*@exposed@*/ exprNode exprData_getTripleInit (exprData data) /*@*/
376 llassert (data != exprData_undefined);
377 return (data->triple->pred);
380 static /*@exposed@*/ exprNode exprData_getTripleTrue (exprData data) /*@*/
382 llassert (data != exprData_undefined);
383 return (data->triple->tbranch);
386 static /*@exposed@*/ exprNode exprData_getTripleTest (exprData data) /*@*/
388 llassert (data != exprData_undefined);
389 return (data->triple->tbranch);
392 static /*@exposed@*/ exprNode exprData_getTripleFalse (exprData data) /*@*/
394 llassert (data != exprData_undefined);
395 return (data->triple->fbranch);
398 static /*@exposed@*/ exprNode exprData_getTripleInc (exprData data) /*@*/
400 llassert (data != exprData_undefined);
401 return (data->triple->fbranch);
404 static /*@exposed@*/ exprNode exprData_getFieldNode (exprData data) /*@*/
406 llassert (data != exprData_undefined);
407 return (data->field->rec);
410 static /*@exposed@*/ cstring exprData_getFieldName (exprData data) /*@*/
412 llassert (data != exprData_undefined);
413 return (data->field->field);
416 static /*@observer@*/ lltok exprData_getUopTok (exprData data) /*@*/
418 llassert (data != exprData_undefined);
419 return (data->uop->op);
422 static /*@exposed@*/ exprNode exprData_getUopNode (exprData data) /*@*/
424 llassert (data != exprData_undefined);
425 return (data->uop->a);
428 static /*@exposed@*/ exprNode exprData_getCastNode (exprData data) /*@*/
430 llassert (data != exprData_undefined);
431 return (data->cast->exp);
434 static /*@observer@*/ lltok exprData_getCastTok (exprData data) /*@*/
436 llassert (data != exprData_undefined);
437 return (data->cast->tok);
440 static /*@exposed@*/ qtype exprData_getCastType (exprData data) /*@*/
442 llassert (data != exprData_undefined);
443 return (data->cast->q);
446 static /*@exposed@*/ cstring exprData_getLiteral (exprData data) /*@*/
448 llassert (data != exprData_undefined);
449 return (data->literal);
452 static /*@exposed@*/ cstring exprData_getId (exprData data) /*@*/
454 llassert (data != exprData_undefined);
458 static /*@observer@*/ lltok exprData_getTok (exprData data) /*@*/
460 llassert (data != exprData_undefined);
464 static /*@exposed@*/ qtype exprData_getType (exprData data) /*@*/
466 llassert (data != exprData_undefined);
470 static /*@exposed@*/ qtype exprData_getOffsetType (exprData data) /*@*/
472 llassert (data != exprData_undefined);
473 return (data->offset->q);
476 static /*@exposed@*/ cstringList exprData_getOffsetName (exprData data) /*@*/
478 llassert (data != exprData_undefined);
479 return (data->offset->field);
482 static /*@exposed@*/ exprNode exprData_getSingle (exprData data)
485 llassert (data != exprData_undefined);
492 static /*@only@*/ exprData
493 exprData_makeOp (/*@keep@*/ exprNode a, /*@keep@*/ exprNode b, /*@keep@*/ lltok op)
495 exprData ed = (exprData) dmalloc (sizeof (*ed));
497 ed->op = (exprOp) dmalloc (sizeof (*ed->op));
505 static /*@only@*/ exprData exprData_makeUop (/*@keep@*/ exprNode a, /*@keep@*/ lltok op)
507 exprData ed = (exprData) dmalloc (sizeof (*ed));
509 ed->uop = (exprUop) dmalloc (sizeof (*ed->uop));
516 static /*@only@*/ exprData exprData_makeSingle (/*@only@*/ exprNode a)
518 exprData ed = (exprData) dmalloc (sizeof (*ed));
524 static /*@only@*/ exprData exprData_makeTok (/*@only@*/ lltok op)
526 exprData ed = (exprData) dmalloc (sizeof (*ed));
528 ed->tok = (lltok *) dmalloc (sizeof (*(ed->tok)));
533 static /*@only@*/ exprData
534 exprData_makeIter (/*@exposed@*/ uentry sname, /*@keep@*/ exprNodeList args,
535 /*@keep@*/ exprNode body, /*@exposed@*/ uentry ename)
537 exprData ed = (exprData) dmalloc (sizeof (*ed));
539 ed->iter = (exprIter) dmalloc (sizeof (*ed->iter));
540 ed->iter->sname = uentry_isVar (sname) ? uentry_copy (sname) : sname;
541 ed->iter->args = args;
542 ed->iter->body = body;
543 ed->iter->ename = uentry_isVar (ename) ? uentry_copy (ename) : ename;
547 static /*@only@*/ exprData exprData_makeTriple (/*@keep@*/ exprNode pred,
548 /*@keep@*/ exprNode tbranch,
549 /*@keep@*/ exprNode fbranch)
551 exprData ed = (exprData) dmalloc (sizeof (*ed));
553 ed->triple = (exprTriple) dmalloc (sizeof (*ed->triple));
554 ed->triple->pred = pred;
555 ed->triple->tbranch = tbranch;
556 ed->triple->fbranch = fbranch;
561 static /*@only@*/ exprData exprData_makeCall (/*@keep@*/ exprNode fcn,
562 /*@keep@*/ exprNodeList args)
564 exprData ed = (exprData) dmalloc (sizeof (*ed));
566 ed->call = (exprCall) dmalloc (sizeof (*ed->call));
568 ed->call->args = args;
573 static /*@only@*/ exprData exprData_makeIterCall (/*@dependent@*/ uentry iter,
574 /*@keep@*/ exprNodeList args)
576 exprData ed = (exprData) dmalloc (sizeof (*ed));
578 ed->itercall = (exprIterCall) dmalloc (sizeof (*ed->itercall));
579 ed->itercall->iter = uentry_isVar (iter) ? uentry_copy (iter) : iter;
580 ed->itercall->args = args;
585 static /*@only@*/ exprData exprData_makeField (/*@keep@*/ exprNode rec,
586 /*@keep@*/ cstring field)
588 exprData ed = (exprData) dmalloc (sizeof (*ed));
590 ed->field = (exprField) dmalloc (sizeof (*ed->field));
591 ed->field->rec = rec;
592 ed->field->field = field;
597 static /*@only@*/ exprData exprData_makeOffsetof (/*@only@*/ qtype q,
598 /*@keep@*/ cstringList s)
600 exprData ed = (exprData) dmalloc (sizeof (*ed));
601 ed->offset = (exprOffsetof) dmalloc (sizeof (*ed->offset));
604 ed->offset->field = s;
608 static /*@only@*/ exprData exprData_makeSizeofType (/*@only@*/ qtype q)
610 exprData ed = (exprData) dmalloc (sizeof (*ed));
616 static /*@only@*/ exprData
617 exprData_makeCast (/*@keep@*/ lltok tok, /*@keep@*/ exprNode e, /*@only@*/ qtype q)
619 exprData ed = (exprData) dmalloc (sizeof (*ed));
621 ed->cast = (exprCast) dmalloc (sizeof (*ed->cast));
629 static /*@only@*/ exprData
630 exprData_makeInit (/*@keep@*/ idDecl t, /*@keep@*/ exprNode e)
632 exprData ed = (exprData) dmalloc (sizeof (*ed));
634 ed->init = (exprInit) dmalloc (sizeof (*ed->init));
641 static /*@only@*/ exprData exprData_makeCond (/*@keep@*/ exprNode pred,
642 /*@keep@*/ exprNode ifclause,
643 /*@keep@*/ exprNode elseclause)
645 return exprData_makeTriple (pred, ifclause, elseclause);
648 static /*@only@*/ exprData exprData_makeFor (/*@keep@*/ exprNode init,
649 /*@keep@*/ exprNode pred,
650 /*@keep@*/ exprNode inc)
652 return exprData_makeTriple (init, pred, inc);