diff --git a/VERSION b/VERSION index b05db56..194f066 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.5.257 +1.5.258 diff --git a/base/flatten.c b/base/flatten.c index 1f3b7dc..d24da24 100644 --- a/base/flatten.c +++ b/base/flatten.c @@ -1948,6 +1948,33 @@ PrematchLists(char *name1, int file1, char *name2, int file2) break; } } + + /* Do NOT remove shorting devices that */ + /* connect two ports. Otherwise the */ + /* port lists get screwed up. It is */ + /* better in that case to force the */ + /* cells to be declared mismatched. */ + /* This is ignored for a top-level cell */ + /* because it will just show up as a */ + /* port mismatch error as it should. */ + + if (!(tc1->flags & CELL_TOP) && + (ecomp->cell1->class != CLASS_ISOURCE)) { + int found1 = FALSE; + int found2 = FALSE; + for (ob2 = tc1->cell; ob2; ob2 = ob2->next) { + if (!IsPort(ob2)) break; + else if (ob2->node == node1) + found1 = TRUE; + else if (ob2->node == node2) + found2 = TRUE; + if (found1 && found2) { + found = FALSE; + break; + } + } + } + if (found) break; } if (found) { diff --git a/base/netfile.c b/base/netfile.c index 9fcc41e..41bbad5 100644 --- a/base/netfile.c +++ b/base/netfile.c @@ -611,7 +611,8 @@ void SpiceTokNoNewline(void) } /*----------------------------------------------------------------------*/ -/* Skip to the next token, ignoring any C-style comments. */ +/* Skip to the next token, ignoring any C-style comments and verilog */ +/* "(* ... *)"-style comments. */ /*----------------------------------------------------------------------*/ void SkipTokComments(char *delimiter) @@ -627,6 +628,11 @@ void SkipTokComments(char *delimiter) SkipTok(delimiter); if (nexttok) SkipTok(delimiter); } + else if (match(nexttok, "(*")) { + while (nexttok && !match(nexttok, "*)")) + SkipTok(delimiter); + if (nexttok) SkipTok(delimiter); + } else break; } } @@ -731,7 +737,7 @@ char *strdtok(char *pstring, char *delim1, char *delim2) if (*s == '\\') { s++; while (*s != '\0') { - if ((*s == ' ') || (*s == '\\')) { + if ((*s == ' ') || ((*s == '\\') && (*(s + 1) == '\0'))) { s++; break; }