Skip to content

Commit d6c13c4

Browse files
authored
Merge pull request #333 from The-OpenROAD-Project-staging/filter-dot
In FilterExpr::lex allow '.' in key = value filter
2 parents 8b4c581 + e288db0 commit d6c13c4

4 files changed

Lines changed: 19 additions & 1 deletion

File tree

sdc/FilterObjects.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ FilterExpr::lex(bool bool_props_as_int)
119119
{std::regex("^\\s+"), Token::Kind::skip},
120120
{std::regex("^defined\\(([a-zA-Z_]+)\\)"), Token::Kind::defined},
121121
{std::regex("^undefined\\(([a-zA-Z_]+)\\)"), Token::Kind::undefined},
122-
{std::regex("^@?([a-zA-Z_]+) *((==|!=|=~|!~) *([0-9a-zA-Z_\\/$\\[\\]*?]+))?"), Token::Kind::predicate},
122+
{std::regex("^@?([a-zA-Z_]+) *((==|!=|=~|!~) *([0-9a-zA-Z_\\/$\\[\\]*?.]+))?"), Token::Kind::predicate},
123123
{std::regex("^(&&)"), Token::Kind::op_and},
124124
{std::regex("^(\\|\\|)"), Token::Kind::op_or},
125125
{std::regex("^(!)"), Token::Kind::op_inv},

sdc/test/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ sta_module_tests("sdc"
2525
exception_thru_net
2626
exception_thru_override
2727
exceptions
28+
filter_dot
2829
filter_query
2930
genclk_advanced
3031
leaf_pin_filter_removal

sdc/test/sdc_filter_dot.ok

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
[get_cells -filter {name =~ r.*} *]
2+
{name =~ tcdm_master_.*req_.*_i}

sdc/test/sdc_filter_dot.tcl

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# Test that '.' is allowed in filter predicate values.
2+
# Targets: FilterExpr::lex (FilterObjects.cc)
3+
source ../../test/helpers.tcl
4+
5+
read_liberty ../../test/asap7_small.lib.gz
6+
read_verilog ../../test/reg1_asap7.v
7+
link_design top
8+
create_clock -name clk -period 500 {clk1 clk2 clk3}
9+
10+
# Filter with dot in glob pattern value (no cells have literal '.' so no match)
11+
puts {[get_cells -filter {name =~ r.*} *]}
12+
report_object_full_names [get_cells -filter {name =~ r.*} *]
13+
14+
# Verify filter_expr_to_postfix parses dot-containing values
15+
puts [sta::filter_expr_to_postfix "name =~ tcdm_master_.*req_.*_i" 0]

0 commit comments

Comments
 (0)