5 # include <ctype.h> /* for isdigit */
6 # include "lclintMacros.nf"
9 # include "cgrammar_tokens.h"
11 # include "exprChecks.h"
12 # include "aliasChecks.h"
13 # include "exprNodeSList.h"
15 void exprData_freeShallow (/*@only@*/ exprData data, exprKind kind)
19 if (data == exprData_undefined)
28 exprNode_freeShallow (data->call->fcn);
29 exprNodeList_freeShallow (data->call->args);
42 exprNode_freeShallow (data->op->a);
43 exprNode_freeShallow (data->op->b);
51 exprNode_freeShallow (data->uop->a);
60 exprNode_freeShallow (data->single);
65 exprNode_freeShallow (data->cast->exp);
66 /* NO: qtype_free (data->cast->q); */
71 exprNodeList_freeShallow (data->itercall->args);
72 sfree (data->itercall);
76 exprNodeList_freeShallow (data->iter->args);
77 exprNode_freeShallow (data->iter->body);
84 exprNode_freeShallow (data->triple->pred);
85 exprNode_freeShallow (data->triple->tbranch);
86 exprNode_freeShallow (data->triple->fbranch);
91 exprNode_freeShallow (data->init->exp);
92 /* NO: idDecl_free (data->init->id); */
98 exprNode_freeShallow (data->field->rec);
99 /* NO: cstring_free (data->field->field); */
122 case XPR_STRINGLITERAL:
124 llcontbuglit ("exprData_freeShallow: not shallow!");
128 llcontbuglit ("XPR_EMPTY case!");
132 llcontbuglit ("XPR_BODY case!");
135 llcontbuglit ("XPR_NODE case!");
143 void exprData_free (/*@only@*/ exprData data, exprKind kind)
145 if (data == exprData_undefined)
154 exprNode_free (data->call->fcn);
155 exprNodeList_free (data->call->args);
162 cstring_free (data->id);
175 exprNode_free (data->op->a);
176 exprNode_free (data->op->b);
184 exprNode_free (data->uop->a);
189 qtype_free (data->offset->q);
190 cstringList_free (data->offset->field);
191 sfree (data->offset);
196 qtype_free (data->qt);
206 exprNode_free (data->single);
211 exprNode_free (data->cast->exp);
212 qtype_free (data->cast->q);
217 exprNodeList_free (data->itercall->args);
218 sfree (data->itercall);
222 exprNodeList_free (data->iter->args);
223 exprNode_free (data->iter->body);
230 exprNode_free (data->triple->pred);
231 exprNode_free (data->triple->tbranch);
232 exprNode_free (data->triple->fbranch);
233 sfree (data->triple);
237 case XPR_STRINGLITERAL:
239 cstring_free (data->literal);
253 exprNode_free (data->init->exp);
254 idDecl_free (data->init->id);
260 exprNode_free (data->field->rec);
261 cstring_free (data->field->field);
266 llcontbuglit ("XPR_EMPTY case!");
269 llcontbuglit ("XPR_BODY case!");
272 llcontbuglit ("XPR_NODE case!");
279 /*@exposed@*/ exprNode exprData_getInitNode (exprData data) /*@*/
281 llassert (data != exprData_undefined);
282 return (data->init->exp);
285 /*@exposed@*/ idDecl exprData_getInitId (exprData data) /*@*/
287 llassert (data != exprData_undefined);
288 return (data->init->id);
291 /*@exposed@*/ exprNode exprData_getOpA (exprData data) /*@*/
293 llassert (data != exprData_undefined);
294 return (data->op->a);
297 /*@exposed@*/ exprNode exprData_getOpB (exprData data) /*@*/
299 llassert (data != exprData_undefined);
300 return (data->op->b);
303 /*@observer@*/ lltok exprData_getOpTok (exprData data) /*@*/
305 llassert (data != exprData_undefined);
306 return (data->op->op);
309 /*@exposed@*/ exprNode exprData_getPairA (exprData data) /*@*/
311 llassert (data != exprData_undefined);
312 return (data->pair->a);
315 /*@exposed@*/ exprNode exprData_getPairB (exprData data) /*@*/
317 llassert (data != exprData_undefined);
318 return (data->pair->b);
322 /*@exposed@*/ uentry exprData_getIterSname (exprData data) /*@*/
324 llassert (data != exprData_undefined);
325 return (data->iter->sname);
328 /*@exposed@*/ exprNodeList exprData_getIterAlist (exprData data) /*@*/
330 llassert (data != exprData_undefined);
331 return (data->iter->args);
334 /*@exposed@*/ exprNode exprData_getIterBody (exprData data) /*@*/
336 llassert (data != exprData_undefined);
337 return (data->iter->body);
340 /*@exposed@*/ uentry exprData_getIterEname (exprData data) /*@*/
342 llassert (data != exprData_undefined);
343 return (data->iter->ename);
346 /*@exposed@*/ exprNode exprData_getFcn (exprData data) /*@*/
348 llassert (data != exprData_undefined);
349 return (data->call->fcn);
352 /*@exposed@*/ exprNodeList exprData_getArgs (exprData data) /*@*/
354 llassert (data != exprData_undefined);
355 return (data->call->args);
358 /*@exposed@*/ exprNode exprData_getTriplePred (exprData data) /*@*/
360 llassert (data != exprData_undefined);
361 return (data->triple->pred);
364 /*@exposed@*/ uentry exprData_getIterCallIter (exprData data) /*@*/
366 llassert (data != exprData_undefined);
367 return (data->itercall->iter);
370 /*@exposed@*/ exprNodeList
371 exprData_getIterCallArgs (exprData data) /*@*/
373 llassert (data != exprData_undefined);
374 return (data->itercall->args);
377 /*@exposed@*/ exprNode exprData_getTripleInit (exprData data) /*@*/
379 llassert (data != exprData_undefined);
380 return (data->triple->pred);
383 /*@exposed@*/ exprNode exprData_getTripleTrue (exprData data) /*@*/
385 llassert (data != exprData_undefined);
386 return (data->triple->tbranch);
389 /*@exposed@*/ exprNode exprData_getTripleTest (exprData data) /*@*/
391 llassert (data != exprData_undefined);
392 return (data->triple->tbranch);
395 /*@exposed@*/ exprNode exprData_getTripleFalse (exprData data) /*@*/
397 llassert (data != exprData_undefined);
398 return (data->triple->fbranch);
401 /*@exposed@*/ exprNode exprData_getTripleInc (exprData data) /*@*/
403 llassert (data != exprData_undefined);
404 return (data->triple->fbranch);
407 /*@exposed@*/ exprNode exprData_getFieldNode (exprData data) /*@*/
409 llassert (data != exprData_undefined);
410 return (data->field->rec);
413 /*@exposed@*/ cstring exprData_getFieldName (exprData data) /*@*/
415 llassert (data != exprData_undefined);
416 return (data->field->field);
419 /*@observer@*/ lltok exprData_getUopTok (exprData data) /*@*/
421 llassert (data != exprData_undefined);
422 return (data->uop->op);
425 /*@exposed@*/ exprNode exprData_getUopNode (exprData data) /*@*/
427 llassert (data != exprData_undefined);
428 return (data->uop->a);
431 /*@exposed@*/ exprNode exprData_getCastNode (exprData data) /*@*/
433 llassert (data != exprData_undefined);
434 return (data->cast->exp);
437 /*@observer@*/ lltok exprData_getCastTok (exprData data) /*@*/
439 llassert (data != exprData_undefined);
440 return (data->cast->tok);
443 /*@exposed@*/ qtype exprData_getCastType (exprData data) /*@*/
445 llassert (data != exprData_undefined);
446 return (data->cast->q);
449 /*@exposed@*/ cstring exprData_getLiteral (exprData data) /*@*/
451 llassert (data != exprData_undefined);
452 return (data->literal);
455 /*@exposed@*/ cstring exprData_getId (exprData data) /*@*/
457 llassert (data != exprData_undefined);
461 /*@observer@*/ lltok exprData_getTok (exprData data) /*@*/
463 llassert (data != exprData_undefined);
467 /*@exposed@*/ qtype exprData_getType (exprData data) /*@*/
469 llassert (data != exprData_undefined);
473 /*@exposed@*/ qtype exprData_getOffsetType (exprData data) /*@*/
475 llassert (data != exprData_undefined);
476 return (data->offset->q);
479 /*@exposed@*/ cstringList exprData_getOffsetName (exprData data) /*@*/
481 llassert (data != exprData_undefined);
482 return (data->offset->field);
485 /*@exposed@*/ exprNode exprData_getSingle (exprData data)
488 llassert (data != exprData_undefined);
496 exprData_makeOp (/*@keep@*/ exprNode a, /*@keep@*/ exprNode b, /*@keep@*/ lltok op)
498 exprData ed = (exprData) dmalloc (sizeof (*ed));
500 ed->op = (exprOp) dmalloc (sizeof (*ed->op));
508 /*@only@*/ exprData exprData_makeUop (/*@keep@*/ exprNode a, /*@keep@*/ lltok op)
510 exprData ed = (exprData) dmalloc (sizeof (*ed));
512 ed->uop = (exprUop) dmalloc (sizeof (*ed->uop));
519 /*@only@*/ exprData exprData_makeSingle (/*@only@*/ exprNode a)
521 exprData ed = (exprData) dmalloc (sizeof (*ed));
527 /*@only@*/ exprData exprData_makeTok (/*@only@*/ lltok op)
529 exprData ed = (exprData) dmalloc (sizeof (*ed));
531 ed->tok = (lltok *) dmalloc (sizeof (*(ed->tok)));
537 exprData_makeIter (/*@exposed@*/ uentry sname, /*@keep@*/ exprNodeList args,
538 /*@keep@*/ exprNode body, /*@exposed@*/ uentry ename)
540 exprData ed = (exprData) dmalloc (sizeof (*ed));
542 ed->iter = (exprIter) dmalloc (sizeof (*ed->iter));
543 ed->iter->sname = uentry_isVar (sname) ? uentry_copy (sname) : sname;
544 ed->iter->args = args;
545 ed->iter->body = body;
546 ed->iter->ename = uentry_isVar (ename) ? uentry_copy (ename) : ename;
550 /*@only@*/ exprData exprData_makeTriple (/*@keep@*/ exprNode pred,
551 /*@keep@*/ exprNode tbranch,
552 /*@keep@*/ exprNode fbranch)
554 exprData ed = (exprData) dmalloc (sizeof (*ed));
556 ed->triple = (exprTriple) dmalloc (sizeof (*ed->triple));
557 ed->triple->pred = pred;
558 ed->triple->tbranch = tbranch;
559 ed->triple->fbranch = fbranch;
564 /*@only@*/ exprData exprData_makeCall (/*@keep@*/ exprNode fcn,
565 /*@keep@*/ exprNodeList args)
567 exprData ed = (exprData) dmalloc (sizeof (*ed));
569 ed->call = (exprCall) dmalloc (sizeof (*ed->call));
571 ed->call->args = args;
576 /*@only@*/ exprData exprData_makeIterCall (/*@dependent@*/ uentry iter,
577 /*@keep@*/ exprNodeList args)
579 exprData ed = (exprData) dmalloc (sizeof (*ed));
581 ed->itercall = (exprIterCall) dmalloc (sizeof (*ed->itercall));
582 ed->itercall->iter = uentry_isVar (iter) ? uentry_copy (iter) : iter;
583 ed->itercall->args = args;
588 /*@only@*/ exprData exprData_makeField (/*@keep@*/ exprNode rec,
589 /*@keep@*/ cstring field)
591 exprData ed = (exprData) dmalloc (sizeof (*ed));
593 ed->field = (exprField) dmalloc (sizeof (*ed->field));
594 ed->field->rec = rec;
595 ed->field->field = field;
600 /*@only@*/ exprData exprData_makeOffsetof (/*@only@*/ qtype q,
601 /*@keep@*/ cstringList s)
603 exprData ed = (exprData) dmalloc (sizeof (*ed));
604 ed->offset = (exprOffsetof) dmalloc (sizeof (*ed->offset));
607 ed->offset->field = s;
611 /*@only@*/ exprData exprData_makeSizeofType (/*@only@*/ qtype q)
613 exprData ed = (exprData) dmalloc (sizeof (*ed));
620 exprData_makeCast (/*@keep@*/ lltok tok, /*@keep@*/ exprNode e, /*@only@*/ qtype q)
622 exprData ed = (exprData) dmalloc (sizeof (*ed));
624 ed->cast = (exprCast) dmalloc (sizeof (*ed->cast));
633 exprData_makeInit (/*@keep@*/ idDecl t, /*@keep@*/ exprNode e)
635 exprData ed = (exprData) dmalloc (sizeof (*ed));
637 ed->init = (exprInit) dmalloc (sizeof (*ed->init));
644 /*@only@*/ exprData exprData_makeCond (/*@keep@*/ exprNode pred,
645 /*@keep@*/ exprNode ifclause,
646 /*@keep@*/ exprNode elseclause)
648 return exprData_makeTriple (pred, ifclause, elseclause);
651 /*@only@*/ exprData exprData_makeFor (/*@keep@*/ exprNode init,
652 /*@keep@*/ exprNode pred,
653 /*@keep@*/ exprNode inc)
655 return exprData_makeTriple (init, pred, inc);
659 /*@only@*/ exprData exprData_makeLiteral (/*@only@*/ cstring s)
661 exprData ed = (exprData) dmalloc (sizeof (*ed));
667 /*@only@*/ exprData exprData_makeId (/*@temp@*/ uentry id)
669 exprData ed = (exprData) dmalloc (sizeof (*ed));
670 ed->id = cstring_copy (uentry_rawName (id));
674 /*@only@*/ exprData exprData_makePair (/*@keep@*/ exprNode a, /*@keep@*/ exprNode b)
676 exprData ed = (exprData) dmalloc (sizeof (*ed));
678 ed->pair = (exprPair) dmalloc (sizeof (*ed->pair));