if g++ -DHAVE_CONFIG_H -I. -I. -I.. -I../src -DNDEBUG -g -O2 -MT
mg_out_dev.o -MD -MP -MF ".deps/mg_out_dev.Tpo" -c -o mg_out_dev.o
mg_out_dev.cc; \
then mv -f ".deps/mg_out_dev.Tpo" ".deps/mg_out_dev.Po"; else rm -f
".deps/mg_out_dev.Tpo"; exit 1; fi
mg_out_dev.cc: In function `std::string fix_expression(const
std::string&)':
mg_out_dev.cc:336: error: type specifier omitted for parameter `in'
Hi,
I can reproduce this with all the g++-3.3 compilers I've tried, it seems to
be an old parser bug that interprets
CS x(CS_STRING(), in);
as a function declaration.
Try this patch (attached), which addresses the same problem in other
files.
in "ap.h", if you use the "extern const" variant of the path, you'll
probably want to define those _CS_* objects in some translation unit, if
you don't want to assume that references to them will be optimized away.
BTW, src/ap.h and modelgen/ap.h are identical (same patch applied to
both), and since modelgen builds with -I $(top_srcdir)/src, modelgen's
copy can probably be removed to avoid confusion.
David Fang
Computer Systems Laboratory
Electrical & Computer Engineering
Cornell University
http://www.csl.cornell.edu/~fang/
-- (2400 baud? Netscape 3.0?? lynx??? No problem!)diff -r -u gnucap-2007-08-20-orig/modelgen/ap.h gnucap-2007-08-20/modelgen/ap.h
--- gnucap-2007-08-20-orig/modelgen/ap.h 2007-08-20 13:41:49.000000000
-0400
+++ gnucap-2007-08-20/modelgen/ap.h 2007-08-25 16:45:09.000000000 -0400
@@ -43,6 +43,18 @@
class CS_WHOLE_FILE {};
class CS_STRING {};
+#if 0
+extern const CS_STDIN _CS_STDIN;
+extern const CS_INC_FILE _CS_INC_FILE;
+extern const CS_WHOLE_FILE _CS_WHOLE_FILE;
+extern const CS_STRING _CS_STRING;
+#else
+static const CS_STDIN _CS_STDIN = CS_STDIN();
+static const CS_INC_FILE _CS_INC_FILE = CS_INC_FILE();
+static const CS_WHOLE_FILE _CS_WHOLE_FILE = CS_WHOLE_FILE();
+static const CS_STRING _CS_STRING = CS_STRING();
+#endif
+
class CS {
private:
FILE* _file;
diff -r -u gnucap-2007-08-20-orig/modelgen/mg_out_dev.cc
gnucap-2007-08-20/modelgen/mg_out_dev.cc
--- gnucap-2007-08-20-orig/modelgen/mg_out_dev.cc 2007-08-20
13:41:16.000000000 -0400
+++ gnucap-2007-08-20/modelgen/mg_out_dev.cc 2007-08-25 16:37:52.000000000
-0400
@@ -333,7 +333,7 @@
std::string out;
out[0] = '\0';
- CS x(CS_STRING(), in);
+ CS x(_CS_STRING, in);
for (;;) {
if (x.peek() == '@') {
x.skip1('@');
diff -r -u gnucap-2007-08-20-orig/src/ap.h gnucap-2007-08-20/src/ap.h
--- gnucap-2007-08-20-orig/src/ap.h 2007-08-20 13:41:49.000000000 -0400
+++ gnucap-2007-08-20/src/ap.h 2007-08-25 16:37:47.000000000 -0400
@@ -43,6 +43,18 @@
class CS_WHOLE_FILE {};
class CS_STRING {};
+#if 0
+extern const CS_STDIN _CS_STDIN;
+extern const CS_INC_FILE _CS_INC_FILE;
+extern const CS_WHOLE_FILE _CS_WHOLE_FILE;
+extern const CS_STRING _CS_STRING;
+#else
+static const CS_STDIN _CS_STDIN = CS_STDIN();
+static const CS_INC_FILE _CS_INC_FILE = CS_INC_FILE();
+static const CS_WHOLE_FILE _CS_WHOLE_FILE = CS_WHOLE_FILE();
+static const CS_STRING _CS_STRING = CS_STRING();
+#endif
+
class CS {
private:
FILE* _file;
diff -r -u gnucap-2007-08-20-orig/src/bm_model.cc
gnucap-2007-08-20/src/bm_model.cc
--- gnucap-2007-08-20-orig/src/bm_model.cc 2007-08-20 13:41:49.000000000
-0400
+++ gnucap-2007-08-20/src/bm_model.cc 2007-08-25 18:04:42.000000000 -0400
@@ -94,7 +94,7 @@
}
c->set_modelname(modelname());
- CS args(CS_STRING(), _arglist); //obsolete_callback
+ CS args(_CS_STRING, _arglist); //obsolete_callback
c->parse_common_obsolete_callback(args); //BUG//callback
c->elabo3(d);
attach_common(c, &_func);
diff -r -u gnucap-2007-08-20-orig/src/c__cmd.cc gnucap-2007-08-20/src/c__cmd.cc
--- gnucap-2007-08-20-orig/src/c__cmd.cc 2007-08-20 13:41:49.000000000
-0400
+++ gnucap-2007-08-20/src/c__cmd.cc 2007-08-25 18:05:01.000000000 -0400
@@ -109,7 +109,7 @@
/*--------------------------------------------------------------------------*/
void CMD::command(const std::string& cs, CARD_LIST* scope)
{
- CS cmd(CS_STRING(), cs); // from string, full command
+ CS cmd(_CS_STRING, cs); // from string, full command
std::string s;
cmd >> s;
notstd::to_lower(&s);
diff -r -u gnucap-2007-08-20-orig/src/c_sweep.cc
gnucap-2007-08-20/src/c_sweep.cc
--- gnucap-2007-08-20-orig/src/c_sweep.cc 2007-08-20 13:41:49.000000000
-0400
+++ gnucap-2007-08-20/src/c_sweep.cc 2007-08-25 17:31:39.000000000 -0400
@@ -100,7 +100,7 @@
char buffer[BUFLEN];
fgets(buffer,BUFLEN,fptr);
{
- CS cmd(CS_STRING(), buffer); //fgets from local file, obsolete
+ CS cmd(_CS_STRING, buffer); //fgets from local file, obsolete
if (cmd.pmatch("SWeep")) {
setup(cmd);
}else{
@@ -112,7 +112,7 @@
} /* in case the words run together */
for (;;) { /* may wipe out one letter of fault */
{
- CS cmd(CS_STRING(), buffer); //fgets from local file, obsolete
+ CS cmd(_CS_STRING, buffer); //fgets from local file, obsolete
CMD::cmdproc(cmd, scope);
}
if (!fgets(buffer,BUFLEN,fptr)) {
@@ -120,7 +120,7 @@
}else{
}
{
- CS cmd(CS_STRING(), buffer); //fgets from local file, obsolete
+ CS cmd(_CS_STRING, buffer); //fgets from local file, obsolete
if (cmd.pmatch("SWeep")) {
cmd.warn(bDANGER, "command not allowed in sweep");
buffer[0] = '\'';
diff -r -u gnucap-2007-08-20-orig/src/d_subckt.cc
gnucap-2007-08-20/src/d_subckt.cc
--- gnucap-2007-08-20-orig/src/d_subckt.cc 2007-08-20 13:41:49.000000000
-0400
+++ gnucap-2007-08-20/src/d_subckt.cc 2007-08-25 17:42:10.000000000 -0400
@@ -173,7 +173,7 @@
/*--------------------------------------------------------------------------*/
double DEV_SUBCKT::tr_probe_num(const std::string& x)const
{itested();
- CS cmd(CS_STRING(), x); // "", conversion
+ CS cmd(_CS_STRING, x); // "", conversion
if (cmd.pmatch("V")) {itested();
int nn = cmd.ctoi();
return (nn > 0 && nn <= net_nodes()) ? _n[nn-1].v0() : NOT_VALID;
diff -r -u gnucap-2007-08-20-orig/src/e_compon.cc
gnucap-2007-08-20/src/e_compon.cc
--- gnucap-2007-08-20-orig/src/e_compon.cc 2007-08-20 13:41:49.000000000
-0400
+++ gnucap-2007-08-20/src/e_compon.cc 2007-08-25 17:42:51.000000000 -0400
@@ -311,7 +311,7 @@
{itested();
if (has_parse_params_obsolete_callback()) {
std::string args(name + "=" + value);
- CS cmd(CS_STRING(), args); //obsolete_callback
+ CS cmd(_CS_STRING, args); //obsolete_callback
bool ok = parse_params_obsolete_callback(cmd); //BUG//callback
if (!ok) {
throw Exception_No_Match();
diff -r -u gnucap-2007-08-20-orig/src/findbr.cc gnucap-2007-08-20/src/findbr.cc
--- gnucap-2007-08-20-orig/src/findbr.cc 2007-08-20 13:41:49.000000000
-0400
+++ gnucap-2007-08-20/src/findbr.cc 2007-08-25 17:43:02.000000000 -0400
@@ -75,7 +75,7 @@
if ((**here).subckt()) {untested();
untested();
// has a subckt, and its name matches, doing fine
- CS want(CS_STRING(), local_part); // recursion
+ CS want(_CS_STRING, local_part); // recursion
CARD_LIST::fat_iterator subbrh=findbranch(want,(**here).subckt());
if (!subbrh.is_end()) {untested();
// found it in a subckt
diff -r -u gnucap-2007-08-20-orig/src/l_pmatch.cc
gnucap-2007-08-20/src/l_pmatch.cc
--- gnucap-2007-08-20-orig/src/l_pmatch.cc 2007-08-20 13:41:49.000000000
-0400
+++ gnucap-2007-08-20/src/l_pmatch.cc 2007-08-25 17:43:15.000000000 -0400
@@ -46,7 +46,7 @@
*/
int pmatch(const std::string& str1, const std::string& str2)
{
- CS cmd(CS_STRING(), str1); //call to CS member on string
+ CS cmd(_CS_STRING, str1); //call to CS member on string
if (cmd.pmatch(str2)) {
return cmd.cursor();
}else{
diff -r -u gnucap-2007-08-20-orig/src/lang_spice_commands.cc
gnucap-2007-08-20/src/lang_spice_commands.cc
--- gnucap-2007-08-20-orig/src/lang_spice_commands.cc 2007-08-20
13:41:49.000000000 -0400
+++ gnucap-2007-08-20/src/lang_spice_commands.cc 2007-08-25
17:43:27.000000000 -0400
@@ -138,7 +138,7 @@
}while (cmd.more() && !cmd.stuck(&here));
cmd.check(bWARNING, "need echo, list, or quiet");
- CS file(CS_INC_FILE(), file_name);
+ CS file(_CS_INC_FILE, file_name);
if (skip_header) { // get and store the header line
file.get_line(">>>>");
diff -r -u gnucap-2007-08-20-orig/src/main.cc gnucap-2007-08-20/src/main.cc
--- gnucap-2007-08-20-orig/src/main.cc 2007-08-20 13:41:49.000000000 -0400
+++ gnucap-2007-08-20/src/main.cc 2007-08-25 17:43:40.000000000 -0400
@@ -62,7 +62,7 @@
}
{
SET_RUN_MODE xx(rINTERACTIVE);
- CS cmd(CS_STDIN(), "");
+ CS cmd(_CS_STDIN, "");
for (;;) {itested();
if (!sigsetjmp(env.p, true)) {itested();
//try {
@@ -118,7 +118,7 @@
}else if (strcasecmp(argv[ii], "-c") == 0) {untested();
++ii;
if (ii < argc) {untested();
- CS cmd(CS_STRING(), argv[ii++]); // command line
+ CS cmd(_CS_STRING, argv[ii++]); // command line
CMD::cmdproc(cmd, &CARD_LIST::card_list);
}else{untested();
}
diff -r -u gnucap-2007-08-20-orig/src/u_parameter.h
gnucap-2007-08-20/src/u_parameter.h
--- gnucap-2007-08-20-orig/src/u_parameter.h 2007-08-20 13:41:49.000000000
-0400
+++ gnucap-2007-08-20/src/u_parameter.h 2007-08-25 16:32:34.000000000 -0400
@@ -68,7 +68,7 @@
//void operator=(const std::string& s) {untested();_s = s;}
void operator=(const std::string& s) {
- CS cmd(CS_STRING(), s); // conversion
+ CS cmd(_CS_STRING, s); // conversion
parse(cmd);
//assert(!cmd.more()); // can fail when assigning float to int
}
_______________________________________________
Gnucap-devel mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/gnucap-devel