mirror of
https://github.com/YosysHQ/yosys
synced 2025-11-07 14:55:07 +00:00
libparse: fix space before closing paren in expressions
This commit is contained in:
parent
547e254a9b
commit
4fac7a1b20
2 changed files with 9 additions and 4 deletions
|
|
@ -191,7 +191,7 @@ LibertyExpression LibertyExpression::parse(Lexer &s, int min_prio) {
|
|||
char c = s.peek();
|
||||
auto lhs = LibertyExpression{};
|
||||
|
||||
while (isspace(c)) {
|
||||
while (isspace(c) || c == '"') {
|
||||
if (s.empty())
|
||||
return lhs;
|
||||
s.next();
|
||||
|
|
@ -221,7 +221,6 @@ LibertyExpression LibertyExpression::parse(Lexer &s, int min_prio) {
|
|||
warn(ss.str());
|
||||
return lhs;
|
||||
}
|
||||
|
||||
while (true) {
|
||||
if (s.empty())
|
||||
break;
|
||||
|
|
@ -264,9 +263,10 @@ LibertyExpression LibertyExpression::parse(Lexer &s, int min_prio) {
|
|||
s.next();
|
||||
c = s.peek();
|
||||
}
|
||||
if (char_is_nice_binop(c)) {
|
||||
if (char_is_nice_binop(c) || c == ')') {
|
||||
// We found a real binop, so this space wasn't an AND
|
||||
// and we just discard it as meaningless whitespace
|
||||
// Closing paren is also always terminating here
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ namespace RTLIL {
|
|||
void checkAll(std::initializer_list<std::string> expressions, std::string expected) {
|
||||
for (const auto& e : expressions) {
|
||||
auto helper = LibertyExpression::Lexer(e);
|
||||
auto tree_s = LibertyExpression::parse(helper).str();
|
||||
auto tree_s = LibertyExpression::parse(helper).sexpr_str();
|
||||
EXPECT_EQ(tree_s, expected);
|
||||
}
|
||||
}
|
||||
|
|
@ -82,6 +82,11 @@ namespace RTLIL {
|
|||
}, "(and (pin \"x\")\n"
|
||||
" (not (pin \"y\")))"
|
||||
);
|
||||
checkAll({
|
||||
"( D & EN )",
|
||||
}, "(and (pin \"D\")\n"
|
||||
" (pin \"EN\"))"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue