2 * Copyright (c) 2002-2004 Stephen Williams (steve@icarus.com)
4 * This source code is free software; you can redistribute it
5 * and/or modify it in source code form under the terms of the GNU
6 * General Public License as published by the Free Software
7 * Foundation; either version 2 of the License, or (at your option)
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
20 #ident "$Id: eval_attrib.cc,v 1.9 2007/06/04 19:14:06 steve Exp $"
31 * The evaluate_attributes function evaluates the attribute
32 * expressions from the map, and returns a table in a form suitable
33 * for passing to netlist devices.
36 attrib_list_t
* evaluate_attributes(const map
<perm_string
,PExpr
*>&att
,
38 Design
*des
, NetScope
*scope
)
44 attrib_list_t
*table
= new attrib_list_t
[natt
];
48 typedef map
<perm_string
,PExpr
*>::const_iterator iter_t
;
49 for (iter_t cur
= att
.begin() ; cur
!= att
.end() ; cur
++, idx
++) {
50 table
[idx
].key
= (*cur
).first
;
51 PExpr
*exp
= (*cur
).second
;
53 /* If the attribute value is given in the source, then
54 evaluate it as a constant. If the value is not
55 given, then assume the value is 1. */
58 tmp
= exp
->eval_const(des
, scope
);
63 cerr
<< "internal error: no result for " << *exp
<< endl
;
66 table
[idx
].val
= *tmp
;
75 * $Log: eval_attrib.cc,v $
76 * Revision 1.9 2007/06/04 19:14:06 steve
77 * Build errors in picky GCC compilers.
79 * Revision 1.8 2005/11/27 17:01:57 steve
80 * Fix for stubborn compiler.
82 * Revision 1.7 2004/02/20 18:53:35 steve
83 * Addtrbute keys are perm_strings.
85 * Revision 1.6 2003/01/27 05:09:17 steve
88 * Revision 1.5 2002/08/12 01:34:59 steve
89 * conditional ident string using autoconfig.
91 * Revision 1.4 2002/08/10 21:59:39 steve
92 * The default attribute value is 1.
94 * Revision 1.3 2002/06/06 18:57:18 steve
95 * Use standard name for iostream.
97 * Revision 1.2 2002/06/03 03:55:14 steve
100 * Revision 1.1 2002/05/23 03:08:51 steve
101 * Add language support for Verilog-2001 attribute
102 * syntax. Hook this support into existing $attribute
103 * handling, and add number and void value types.
105 * Add to the ivl_target API new functions for access
106 * of complex attributes attached to gates.