4 ** freeShallow: free exprData created from exprNode_effect calls.
5 ** All but the innermost storage is free'd.
11 static void exprData_freeShallow (/*@only@*/ exprData data, exprKind kind)
15 if (data == exprData_undefined)
24 exprNode_freeShallow (data->call->fcn);
25 exprNodeList_freeShallow (data->call->args);
38 exprNode_freeShallow (data->op->a);
39 exprNode_freeShallow (data->op->b);
47 exprNode_freeShallow (data->uop->a);
56 exprNode_freeShallow (data->single);
61 exprNode_freeShallow (data->cast->exp);
62 /* NO: qtype_free (data->cast->q); */
67 exprNodeList_freeShallow (data->itercall->args);
68 sfree (data->itercall);
72 exprNodeList_freeShallow (data->iter->args);
73 exprNode_freeShallow (data->iter->body);
80 exprNode_freeShallow (data->triple->pred);
81 exprNode_freeShallow (data->triple->tbranch);
82 exprNode_freeShallow (data->triple->fbranch);
87 exprNode_freeShallow (data->init->exp);
88 /* NO: idDecl_free (data->init->id); */
94 exprNode_freeShallow (data->field->rec);
95 /* NO: cstring_free (data->field->field); */
118 case XPR_STRINGLITERAL:
120 llcontbuglit ("exprData_freeShallow: not shallow!");
124 llcontbuglit ("XPR_EMPTY case!");
128 llcontbuglit ("XPR_BODY case!");
131 llcontbuglit ("XPR_NODE case!");
139 static void exprData_free (/*@only@*/ exprData data, exprKind kind)
141 if (data == exprData_undefined)
150 exprNode_free (data->call->fcn);
151 exprNodeList_free (data->call->args);
158 cstring_free (data->id);
171 exprNode_free (data->op->a);
172 exprNode_free (data->op->b);
180 exprNode_free (data->uop->a);
185 qtype_free (data->offset->q);
186 cstringList_free (data->offset->field);
187 sfree (data->offset);
192 qtype_free (data->qt);
202 exprNode_free (data->single);
207 exprNode_free (data->cast->exp);
208 qtype_free (data->cast->q);
213 exprNodeList_free (data->itercall->args);
214 sfree (data->itercall);
218 exprNodeList_free (data->iter->args);
219 exprNode_free (data->iter->body);
226 exprNode_free (data->triple->pred);
227 exprNode_free (data->triple->tbranch);
228 exprNode_free (data->triple->fbranch);
229 sfree (data->triple);
233 case XPR_STRINGLITERAL:
235 cstring_free (data->literal);
249 exprNode_free (data->init->exp);
250 idDecl_free (data->init->id);
256 exprNode_free (data->field->rec);
257 cstring_free (data->field->field);
262 llcontbuglit ("XPR_EMPTY case!");
265 llcontbuglit ("XPR_BODY case!");
268 llcontbuglit ("XPR_NODE case!");
275 static /*@exposed@*/ exprNode exprData_getInitNode (exprData data) /*@*/
277 llassert (data != exprData_undefined);
278 return (data->init->exp);
281 static /*@exposed@*/ idDecl exprData_getInitId (exprData data) /*@*/
283 llassert (data != exprData_undefined);
284 return (data->init->id);
287 static /*@exposed@*/ exprNode exprData_getOpA (exprData data) /*@*/
289 llassert (data != exprData_undefined);
290 return (data->op->a);
293 static /*@exposed@*/ exprNode exprData_getOpB (exprData data) /*@*/
295 llassert (data != exprData_undefined);
296 return (data->op->b);
299 static /*@observer@*/ lltok exprData_getOpTok (exprData data) /*@*/
301 llassert (data != exprData_undefined);
302 return (data->op->op);
305 static /*@exposed@*/ exprNode exprData_getPairA (exprData data) /*@*/
307 llassert (data != exprData_undefined);
308 return (data->pair->a);
311 static /*@exposed@*/ exprNode exprData_getPairB (exprData data) /*@*/
313 llassert (data != exprData_undefined);
314 return (data->pair->b);
318 static /*@exposed@*/ uentry exprData_getIterSname (exprData data) /*@*/
320 llassert (data != exprData_undefined);
321 return (data->iter->sname);
324 static /*@exposed@*/ exprNodeList exprData_getIterAlist (exprData data) /*@*/
326 llassert (data != exprData_undefined);
327 return (data->iter->args);
330 static /*@exposed@*/ exprNode exprData_getIterBody (exprData data) /*@*/
332 llassert (data != exprData_undefined);
333 return (data->iter->body);
336 static /*@exposed@*/ uentry exprData_getIterEname (exprData data) /*@*/
338 llassert (data != exprData_undefined);
339 return (data->iter->ename);
342 static /*@exposed@*/ exprNode exprData_getFcn (exprData data) /*@*/
344 llassert (data != exprData_undefined);
345 return (data->call->fcn);
348 static /*@exposed@*/ exprNodeList exprData_getArgs (exprData data) /*@*/
350 llassert (data != exprData_undefined);
351 return (data->call->args);
354 static /*@exposed@*/ exprNode exprData_getTriplePred (exprData data) /*@*/
356 llassert (data != exprData_undefined);
357 return (data->triple->pred);
360 static /*@exposed@*/ uentry exprData_getIterCallIter (exprData data) /*@*/
362 llassert (data != exprData_undefined);
363 return (data->itercall->iter);
366 static /*@exposed@*/ exprNodeList
367 exprData_getIterCallArgs (exprData data) /*@*/
369 llassert (data != exprData_undefined);
370 return (data->itercall->args);
373 static /*@exposed@*/ exprNode exprData_getTripleInit (exprData data) /*@*/
375 llassert (data != exprData_undefined);
376 return (data->triple->pred);
379 static /*@exposed@*/ exprNode exprData_getTripleTrue (exprData data) /*@*/
381 llassert (data != exprData_undefined);
382 return (data->triple->tbranch);
385 static /*@exposed@*/ exprNode exprData_getTripleTest (exprData data) /*@*/
387 llassert (data != exprData_undefined);
388 return (data->triple->tbranch);
391 static /*@exposed@*/ exprNode exprData_getTripleFalse (exprData data) /*@*/
393 llassert (data != exprData_undefined);
394 return (data->triple->fbranch);
397 static /*@exposed@*/ exprNode exprData_getTripleInc (exprData data) /*@*/
399 llassert (data != exprData_undefined);
400 return (data->triple->fbranch);
403 static /*@exposed@*/ exprNode exprData_getFieldNode (exprData data) /*@*/
405 llassert (data != exprData_undefined);
406 return (data->field->rec);
409 static /*@exposed@*/ cstring exprData_getFieldName (exprData data) /*@*/
411 llassert (data != exprData_undefined);
412 return (data->field->field);
415 static /*@observer@*/ lltok exprData_getUopTok (exprData data) /*@*/
417 llassert (data != exprData_undefined);
418 return (data->uop->op);
421 static /*@exposed@*/ exprNode exprData_getUopNode (exprData data) /*@*/
423 llassert (data != exprData_undefined);
424 return (data->uop->a);
427 static /*@exposed@*/ exprNode exprData_getCastNode (exprData data) /*@*/
429 llassert (data != exprData_undefined);
430 return (data->cast->exp);
433 static /*@observer@*/ lltok exprData_getCastTok (exprData data) /*@*/
435 llassert (data != exprData_undefined);
436 return (data->cast->tok);
439 static /*@exposed@*/ qtype exprData_getCastType (exprData data) /*@*/
441 llassert (data != exprData_undefined);
442 return (data->cast->q);
445 static /*@exposed@*/ cstring exprData_getLiteral (exprData data) /*@*/
447 llassert (data != exprData_undefined);
448 return (data->literal);
451 static /*@exposed@*/ cstring exprData_getId (exprData data) /*@*/
453 llassert (data != exprData_undefined);
457 static /*@observer@*/ lltok exprData_getTok (exprData data) /*@*/
459 llassert (data != exprData_undefined);
463 static /*@exposed@*/ qtype exprData_getType (exprData data) /*@*/
465 llassert (data != exprData_undefined);
469 static /*@exposed@*/ qtype exprData_getOffsetType (exprData data) /*@*/
471 llassert (data != exprData_undefined);
472 return (data->offset->q);
475 static /*@exposed@*/ cstringList exprData_getOffsetName (exprData data) /*@*/
477 llassert (data != exprData_undefined);
478 return (data->offset->field);
481 static /*@exposed@*/ exprNode exprData_getSingle (exprData data)
484 llassert (data != exprData_undefined);
491 static /*@only@*/ exprData
492 exprData_makeOp (/*@keep@*/ exprNode a, /*@keep@*/ exprNode b, /*@keep@*/ lltok op)
494 exprData ed = (exprData) dmalloc (sizeof (*ed));
496 ed->op = (exprOp) dmalloc (sizeof (*ed->op));
504 static /*@only@*/ exprData exprData_makeUop (/*@keep@*/ exprNode a, /*@keep@*/ lltok op)
506 exprData ed = (exprData) dmalloc (sizeof (*ed));
508 ed->uop = (exprUop) dmalloc (sizeof (*ed->uop));
515 static /*@only@*/ exprData exprData_makeSingle (/*@only@*/ exprNode a)
517 exprData ed = (exprData) dmalloc (sizeof (*ed));
523 static /*@only@*/ exprData exprData_makeTok (/*@only@*/ lltok op)
525 exprData ed = (exprData) dmalloc (sizeof (*ed));
527 ed->tok = (lltok *) dmalloc (sizeof (*(ed->tok)));
532 static /*@only@*/ exprData
533 exprData_makeIter (/*@exposed@*/ uentry sname, /*@keep@*/ exprNodeList args,
534 /*@keep@*/ exprNode body, /*@exposed@*/ uentry ename)
536 exprData ed = (exprData) dmalloc (sizeof (*ed));
538 ed->iter = (exprIter) dmalloc (sizeof (*ed->iter));
539 ed->iter->sname = uentry_isVar (sname) ? uentry_copy (sname) : sname;
540 ed->iter->args = args;
541 ed->iter->body = body;
542 ed->iter->ename = uentry_isVar (ename) ? uentry_copy (ename) : ename;
546 static /*@only@*/ exprData exprData_makeTriple (/*@keep@*/ exprNode pred,
547 /*@keep@*/ exprNode tbranch,
548 /*@keep@*/ exprNode fbranch)
550 exprData ed = (exprData) dmalloc (sizeof (*ed));
552 ed->triple = (exprTriple) dmalloc (sizeof (*ed->triple));
553 ed->triple->pred = pred;
554 ed->triple->tbranch = tbranch;
555 ed->triple->fbranch = fbranch;
560 static /*@only@*/ exprData exprData_makeCall (/*@keep@*/ exprNode fcn,
561 /*@keep@*/ exprNodeList args)
563 exprData ed = (exprData) dmalloc (sizeof (*ed));
565 ed->call = (exprCall) dmalloc (sizeof (*ed->call));
567 ed->call->args = args;
572 static /*@only@*/ exprData exprData_makeIterCall (/*@dependent@*/ uentry iter,
573 /*@keep@*/ exprNodeList args)
575 exprData ed = (exprData) dmalloc (sizeof (*ed));
577 ed->itercall = (exprIterCall) dmalloc (sizeof (*ed->itercall));
578 ed->itercall->iter = uentry_isVar (iter) ? uentry_copy (iter) : iter;
579 ed->itercall->args = args;
584 static /*@only@*/ exprData exprData_makeField (/*@keep@*/ exprNode rec,
585 /*@keep@*/ cstring field)
587 exprData ed = (exprData) dmalloc (sizeof (*ed));
589 ed->field = (exprField) dmalloc (sizeof (*ed->field));
590 ed->field->rec = rec;
591 ed->field->field = field;
596 static /*@only@*/ exprData exprData_makeOffsetof (/*@only@*/ qtype q,
597 /*@keep@*/ cstringList s)
599 exprData ed = (exprData) dmalloc (sizeof (*ed));
600 ed->offset = (exprOffsetof) dmalloc (sizeof (*ed->offset));
603 ed->offset->field = s;
607 static /*@only@*/ exprData exprData_makeSizeofType (/*@only@*/ qtype q)
609 exprData ed = (exprData) dmalloc (sizeof (*ed));
615 static /*@only@*/ exprData
616 exprData_makeCast (/*@keep@*/ lltok tok, /*@keep@*/ exprNode e, /*@only@*/ qtype q)
618 exprData ed = (exprData) dmalloc (sizeof (*ed));
620 ed->cast = (exprCast) dmalloc (sizeof (*ed->cast));
628 static /*@only@*/ exprData
629 exprData_makeInit (/*@keep@*/ idDecl t, /*@keep@*/ exprNode e)
631 exprData ed = (exprData) dmalloc (sizeof (*ed));
633 ed->init = (exprInit) dmalloc (sizeof (*ed->init));
640 static /*@only@*/ exprData exprData_makeCond (/*@keep@*/ exprNode pred,
641 /*@keep@*/ exprNode ifclause,
642 /*@keep@*/ exprNode elseclause)
644 return exprData_makeTriple (pred, ifclause, elseclause);
647 static /*@only@*/ exprData exprData_makeFor (/*@keep@*/ exprNode init,
648 /*@keep@*/ exprNode pred,
649 /*@keep@*/ exprNode inc)
651 return exprData_makeTriple (init, pred, inc);