Corrected an error found by Sylvain Munaut and discussed on
open-source-silicon slack on Nov. 3 in which the simple verilog expression "assign name1 = name2[a:b]"; this revealed an error where the parsing of "name2" was being incorrectly run with GetBusTok() which must be called when the token starts with "[". This problem existed both for the left-hand-side parsing and the right-hand-side parsing, and has been fixed for both (where either side may be a subset of a bus and the other a complete bus).
This commit is contained in:
parent
3b9dca0cf2
commit
49c0de0433
|
|
@ -717,10 +717,12 @@ int GetBus(char *astr, struct bus *wb)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------
|
||||||
// Output a Verilog Module. Note that since Verilog does not describe
|
// Output a Verilog Module. Note that since Verilog does not describe
|
||||||
// low-level devices like transistors, capacitors, etc., then this
|
// low-level devices like transistors, capacitors, etc., then this
|
||||||
// format is limited to black-box subcircuits. Cells containing any
|
// format is limited to black-box subcircuits. Cells containing any
|
||||||
// such low-level devices are ignored.
|
// such low-level devices are ignored.
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
|
||||||
void VerilogModule(struct nlist *tp)
|
void VerilogModule(struct nlist *tp)
|
||||||
{
|
{
|
||||||
|
|
@ -1833,8 +1835,9 @@ skip_endmodule:
|
||||||
}
|
}
|
||||||
else { /* "assign" */
|
else { /* "assign" */
|
||||||
SkipTokComments(VLOG_PIN_CHECK_DELIMITERS);
|
SkipTokComments(VLOG_PIN_CHECK_DELIMITERS);
|
||||||
if (GetBusTok(&wb) == 0) {
|
|
||||||
char *aptr = strvchr(nexttok, '[');
|
char *aptr = strvchr(nexttok, '[');
|
||||||
|
if (((aptr == NULL) && (GetBusTok(&wb) == 0)) ||
|
||||||
|
((aptr != NULL) && (GetBus(aptr, &wb) == 0))) {
|
||||||
if (aptr != NULL) {
|
if (aptr != NULL) {
|
||||||
*aptr = '\0';
|
*aptr = '\0';
|
||||||
/* Find object of first net in bus */
|
/* Find object of first net in bus */
|
||||||
|
|
@ -1909,8 +1912,9 @@ skip_endmodule:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (GetBusTok(&wb2) == 0) {
|
|
||||||
char *aptr = strvchr(nexttok, '[');
|
char *aptr = strvchr(nexttok, '[');
|
||||||
|
if (((aptr == NULL) && (GetBusTok(&wb2) == 0)) ||
|
||||||
|
((aptr != NULL) && (GetBus(aptr, &wb2) == 0))) {
|
||||||
j = wb2.start;
|
j = wb2.start;
|
||||||
if (aptr != NULL) {
|
if (aptr != NULL) {
|
||||||
*aptr = '\0';
|
*aptr = '\0';
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue