Merge branch 'master' into netgen-1.5

This commit is contained in:
Tim Edwards 2026-06-29 02:00:02 -04:00
commit 5e48c4e876
4 changed files with 41 additions and 11 deletions

View File

@ -1 +1 @@
1.5.321
1.5.322

View File

@ -7897,6 +7897,7 @@ int MatchPins(struct nlist *tc1, struct nlist *tc2, int dolist)
j = 0;
for (ob2 = tc2->cell; ob2 != NULL; ob2 = ob2->next) {
char *name1, *name2, *aptr1 = NULL, *aptr2 = NULL;
char delim1, delim2;
if (!IsPort(ob2)) break;
@ -7920,8 +7921,8 @@ int MatchPins(struct nlist *tc1, struct nlist *tc2, int dolist)
/* matchfunc(). */
if ((tc1->flags & CELL_PLACEHOLDER) || (tc2->flags && CELL_PLACEHOLDER)) {
aptr1 = strchr(name1, '[');
aptr2 = strchr(name2, '[');
aptr1 = get_array_delimiter(name1, &delim1);
aptr2 = get_array_delimiter(name2, &delim2);
if ((aptr1 != NULL) && (aptr2 == NULL)) {
*aptr1 = '\0';
@ -7934,8 +7935,8 @@ int MatchPins(struct nlist *tc1, struct nlist *tc2, int dolist)
if (!IsPort(ob3)) break;
if (ob3 == ob1) continue;
if (!strncmp(ob3->name, name1, strlen(name1)) &&
*(ob3->name + strlen(name1)) == '[') {
*aptr1 = '[';
is_delimiter(*(ob3->name + strlen(name1)))) {
*aptr1 = delim1;
break;
}
}
@ -7953,8 +7954,8 @@ int MatchPins(struct nlist *tc1, struct nlist *tc2, int dolist)
if (!IsPort(ob3)) break;
if (ob3 == ob2) continue;
if (!strncmp(ob3->name, name2, strlen(name2)) &&
*(ob3->name + strlen(name2)) == '[') {
*aptr2 = '[';
is_delimiter(*(ob3->name + strlen(name2)))) {
*aptr2 = delim2;
break;
}
}
@ -7964,8 +7965,8 @@ int MatchPins(struct nlist *tc1, struct nlist *tc2, int dolist)
if ((*matchfunc)(name1, name2)) {
if (aptr1) *aptr1 = '[';
if (aptr2) *aptr2 = '[';
if (aptr1) *aptr1 = delim1;
if (aptr2) *aptr2 = delim2;
/* If both sides have unconnected nodes, then pins with */
/* matching names are an automatic match. Otherwise, if */
@ -8120,8 +8121,8 @@ int MatchPins(struct nlist *tc1, struct nlist *tc2, int dolist)
}
}
if (bangptr2) *bangptr2 = '!';
if (aptr1) *aptr1 = '[';
if (aptr2) *aptr2 = '[';
if (aptr1) *aptr1 = delim1;
if (aptr2) *aptr2 = delim2;
j++;
}
}

View File

@ -282,6 +282,33 @@ int matchfilenocase(char *st1, char *st2, int f1, int f2)
return 1;
}
/* Delimiter matching---Find an opening delimiter in a string. */
/* Return the position of the first opening delimeter in the string, */
/* like strchr(). Place the actual delimeter character in *delim. */
char *get_array_delimiter(char *name, char *delim)
{
char *stest = name;
while (*stest != '\0')
{
if (to_lower[*stest] == '<') {
*delim = *stest;
return stest;
}
stest++;
}
return NULL;
}
/* Delimiter parsing---Check if a character is an opening array delimiter. */
/* Return TRUE if the character is an opening delimiter, FALSE if not. */
int is_delimiter(char testc)
{
return (to_lower[testc] == '<') ? TRUE : FALSE;
}
#ifdef HAVE_MALLINFO
void PrintMemoryStats(void)
{

View File

@ -309,6 +309,8 @@ extern int match(char *, char *);
extern int matchnocase(char *, char *);
extern int matchfile(char *, char *, int, int);
extern int matchfilenocase(char *, char *, int, int);
extern int is_delimiter(char);
extern char *get_array_delimiter(char *, char *);
extern void GarbageCollect(void);
extern void InitGarbageCollection(void);