]> andersk Git - splint.git/blame - src/mtTransferAction.c
Fixed bugs in the constant removal code for binary expressions.
[splint.git] / src / mtTransferAction.c
CommitLineData
28bf4b0b 1/*
2** LCLint - annotation-assisted static program checker
3** Copyright (C) 1994-2001 University of Virginia,
4** Massachusetts Institute of Technology
5**
6** This program is free software; you can redistribute it and/or modify it
7** under the terms of the GNU General Public License as published by the
8** Free Software Foundation; either version 2 of the License, or (at your
9** option) any later version.
10**
11** This program is distributed in the hope that it will be useful, but
12** WITHOUT ANY WARRANTY; without even the implied warranty of
13** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14** General Public License for more details.
15**
16** The GNU General Public License is available from http://www.gnu.org/ or
17** the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
18** MA 02111-1307, USA.
19**
20** For information on lclint: lclint-request@cs.virginia.edu
21** To report a bug: lclint-bug@cs.virginia.edu
22** For more information: http://lclint.cs.virginia.edu
23*/
24/*
25** mtTransferAction.c
26*/
27
28# include "lclintMacros.nf"
29# include "basic.h"
30# include "mtgrammar.h"
31
32extern mtTransferAction mtTransferAction_createValue (mttok value)
33{
34 mtTransferAction res = (mtTransferAction) dmalloc (sizeof (*res));
35
36 res->kind = MTAK_VALUE;
37 llassert (mttok_isIdentifier (value));
38 res->value = mttok_getText (value);
39 res->message = cstring_undefined;
40 res->loc = mttok_stealLoc (value);
41 mttok_free (value);
42 return res;
43}
44
45extern mtTransferAction mtTransferAction_createError (mttok tok)
46{
47 mtTransferAction res = (mtTransferAction) dmalloc (sizeof (*res));
48
49 res->kind = MTAK_ERROR;
50 res->value = cstring_undefined;
51 res->message = cstring_undefined;
52 res->loc = mttok_stealLoc (tok);
53 mttok_free (tok);
54 return res;
55}
56
57extern mtTransferAction mtTransferAction_createErrorMessage (mttok message)
58{
59 mtTransferAction res = (mtTransferAction) dmalloc (sizeof (*res));
60
61 res->kind = MTAK_ERROR;
62 res->message = mttok_getText (message);
63 res->value = cstring_undefined;
64 res->loc = mttok_stealLoc (message);
65 mttok_free (message);
66 return res;
67}
68
69extern cstring mtTransferAction_getMessage (mtTransferAction node)
70{
71 llassert (node->kind == MTAK_ERROR);
72 return node->message;
73}
74
75extern cstring mtTransferAction_unparse (mtTransferAction node)
76{
77 switch (node->kind) {
78 case MTAK_VALUE: return cstring_copy (node->value);
79 case MTAK_ERROR:
80 if (cstring_isDefined (node->message)) {
81 return message ("error \"%s\"", node->message);
82 } else {
83 return cstring_makeLiteral ("<error>");
84 }
85 BADDEFAULT;
86 }
87
88 BADBRANCH;
89}
90
91extern void mtTransferAction_free (/*@only@*/ mtTransferAction node)
92{
93 cstring_free (node->value);
94 cstring_free (node->message);
95 fileloc_free (node->loc);
96 sfree (node);
97}
This page took 0.094648 seconds and 5 git commands to generate.