numparam/*, drop "old style" '&' syntax

Probably an artefact of the external preprocessor implementation
  of numparam.
This syntax seems to have been a non spice macro expansion facility.
This commit is contained in:
rlar 2017-12-01 18:06:55 +01:00
parent 8022aa09a6
commit 0200d5c7e9
3 changed files with 0 additions and 194 deletions

View File

@ -9,9 +9,6 @@
/***** numparam internals ********/
typedef enum {Intro = '&'} _nIntro; /* Introduces preprocessor tokens */
/* -----------------------------------------------------------------
* I believe the entry_t should be a union of type but I need more info.
* ----------------------------------------------------------------- */

View File

@ -198,63 +198,6 @@ findsubname(dico_t *dico, SPICE_DSTRINGPTR dstr_p)
}
static void
modernizeex(SPICE_DSTRINGPTR dstr_p)
/* old style expressions &(..) and &id --> new style with braces. */
{
int i, state, ls;
char c, d;
char *s; /* current string */
SPICE_DSTRING t; /* temporary dyna string */
i = 0;
state = 0;
ls = spice_dstring_length(dstr_p);
s = spice_dstring_value(dstr_p);
/* check if string might need modernizing */
if (!memchr(s, Intro, (size_t) ls))
return;
spice_dstring_init(&t);
while (i < ls) {
c = s[i];
d = s[i + 1];
if ((!state) && (c == Intro) && (i > 0)) {
if (d == '(') {
state = 1;
i++;
c = '{';
} else if (alfa(d)) {
cadd(&t, '{');
i++;
while (alfanum(s[i])) {
cadd(&t, s[i]);
i++;
}
c = '}';
i--;
}
} else if (state) {
if (c == '(')
state++;
else if (c == ')')
state--;
if (!state) /* replace--) by terminator */
c = '}';
}
cadd(&t, c);
i++;
}
scopyd(dstr_p, &t);
spice_dstring_free(&t);
}
static char
transform(dico_t *dico, SPICE_DSTRINGPTR dstr_p, bool incontrol)
/* line s is categorized and crippled down to basic Spice
@ -284,7 +227,6 @@ transform(dico_t *dico, SPICE_DSTRINGPTR dstr_p, bool incontrol)
char *s; /* dstring value of dstr_p */
char category;
stripsomespace(dstr_p, incontrol);
modernizeex(dstr_p); /* required for stripbraces count */
s = spice_dstring_value(dstr_p);
@ -317,10 +259,6 @@ transform(dico_t *dico, SPICE_DSTRINGPTR dstr_p, bool incontrol)
if (stripbraces(dstr_p) > 0)
category = 'B'; /* priority category ! */
}
} else if (s[0] == Intro) {
/* private style preprocessor line */
s[0] = '*';
category = 'P';
} else if (toupper_c(s[0]) == 'X') {
/* strip actual parameters */
findsubname(dico, dstr_p);

View File

@ -1081,44 +1081,6 @@ double_to_string(SPICE_DSTRINGPTR qstr_p, double value)
}
/* expand parameter in string `t' to result `q' */
static bool
evaluate_variable(dico_t *dico, SPICE_DSTRINGPTR qstr_p, const char * const t, const char * const t_end)
{
entry_t *entry;
spice_dstring_reinit(qstr_p);
char *tx = copy_substring(t, t_end);
strtoupper(tx);
entry = entrynb(dico, tx);
tfree(tx);
if (!entry)
return message(dico,
"\"%.*s\" not evaluated. Lookup failure.\n", (int) (t_end - t), t);
if (entry->tp == NUPA_REAL) {
double_to_string(qstr_p, entry->vl);
}
else if (entry->tp == NUPA_STRING) {
/* suppose source text "..." at */
int j = entry->ivl + 1;
for (;;) {
char c = entry->sbbase[j++];
if ((c == '\"') || (c < ' '))
return 0;
cadd(qstr_p, c);
}
}
return 0;
}
/* transform exression in string `t' to result q */
static bool
evaluate_expr(dico_t *dico, SPICE_DSTRINGPTR qstr_p, const char *t, const char * const t_end)
@ -1231,69 +1193,6 @@ nupa_substitute(dico_t *dico, const char *s, char *r)
s = kptr + 1;
r = insertnumber(dico, r, &qstr);
} else if (c == Intro) {
/* skip "&&" which may occur in B source */
if ((s < s_end - 1) && (*s == Intro)) {
s++;
continue;
}
while ((s < s_end - 1) && (*s <= ' '))
s++;
if (*s == '(') {
/* sub-formula */
const char *kptr = s + 1;
int level = 1;
for (; *kptr; kptr++) {
char d = *kptr;
if (d == '(')
level++;
else if (d == ')')
level--;
if ((d == ')') && (level <= 0))
break;
}
if (*kptr == '\0') {
err = message(dico, "Closing \")\" not found.\n");
goto Lend;
}
err = evaluate_expr(dico, &qstr, s + 1, kptr);
if (err) {
message(dico, "Cannot compute &(expression)\n");
goto Lend;
}
s = kptr + 1;
} else {
/* simple identifier may also be string? */
/* fixme, kptr might point behind the terminating '\0' here
* causing serious troubles in evaluate_variable()
* and/or when updating s
*/
const char *kptr = s + 1;
for (; kptr < s_end; kptr++)
if (*kptr <= ' ')
break;
err = evaluate_variable(dico, &qstr, s, kptr);
if (err) {
message(dico, "Cannot compute &identifier\n");
goto Lend;
}
s = kptr;
}
r = insertnumber(dico, r, &qstr);
}
}
@ -1425,9 +1324,6 @@ nupa_assignment(dico_t *dico, const char * const s, char mode)
while ((p < s_end) && (*p <= ' '))
p++;
if (*p == Intro)
p++;
if (*p == '.') /* skip any dot keyword */
while (*p > ' ')
p++;
@ -1624,31 +1520,6 @@ nupa_subcktcall(dico_t *dico, char *s, char * const x, char * const inst_name)
char *kp = jp;
spice_dstring_reinit(&ustr);
if (*kp == Intro) {
/* handle historical syntax... */
if (alfa(kp[1])) {
kp++;
} else if (kp[1] == '(') {
/* transform to braces... */
kp++;
*kp = '{';
char *gp = kp;
int nest = 1;
while ((nest > 0) && *gp) {
gp++;
if (*gp == '(')
nest++;
else if (*gp == ')')
nest--;
}
if (*gp && (nest == 0))
*gp = '}';
}
}
if (alfanum(*kp) || *kp == '.') {
/* number, identifier */
jp = skip_non_ws(kp);