@@ -1745,5 +1745,98 @@ TEST(GetAssignModifyRhs, Various) {
17451745 }
17461746}
17471747
1748+ TEST (GetNetVariableAssignmentLhs, Various) {
1749+ constexpr int kTag = 1 ; // value doesn't matter
1750+ const SyntaxTreeSearchTestCase kTestCases [] = {
1751+ {" " },
1752+ {" module m;\n endmodule\n " },
1753+ {" module m;\n "
1754+ " reg k;\n "
1755+ " always_comb begin\n " ,
1756+ {kTag , " k" },
1757+ " = 1;\n end\n " ,
1758+ " endmodule\n " },
1759+ {" module m;\n "
1760+ " reg k;\n "
1761+ " always_comb begin\n " ,
1762+ " k &= 1;\n end\n "
1763+ " endmodule\n " },
1764+ {" module m;\n "
1765+ " reg k;\n "
1766+ " always_comb begin\n "
1767+ " k |= 1;\n end\n "
1768+ " endmodule\n " },
1769+ {" module m;\n "
1770+ " reg k;\n "
1771+ " always_ff begin\n "
1772+ " k <= 1;\n end\n "
1773+ " endmodule\n " },
1774+ };
1775+ for (const auto &test : kTestCases ) {
1776+ TestVerilogSyntaxRangeMatches (
1777+ __FUNCTION__, test, [](const TextStructureView &text_structure) {
1778+ const auto &root = text_structure.SyntaxTree ();
1779+ const auto &net_var_assignments = SearchSyntaxTree (
1780+ *ABSL_DIE_IF_NULL (root), NodekNetVariableAssignment ());
1781+
1782+ std::vector<TreeSearchMatch> left_hand_sides;
1783+ for (const auto &assignment : net_var_assignments) {
1784+ const auto *lhs = GetNetVariableAssignmentLhs (
1785+ verible::SymbolCastToNode (*assignment.match ));
1786+ left_hand_sides.emplace_back (
1787+ TreeSearchMatch{lhs, {/* ignored context */ }});
1788+ }
1789+ return left_hand_sides;
1790+ });
1791+ }
1792+ }
1793+
1794+ TEST (GetNetVariableAssignmentOperator, Various) {
1795+ constexpr int kTag = 1 ; // value doesn't matter
1796+ const SyntaxTreeSearchTestCase kTestCases [] = {
1797+ {" " },
1798+ {" module m;\n endmodule\n " },
1799+ {" module m;\n "
1800+ " reg k;\n "
1801+ " always_comb begin\n " ,
1802+ " k " ,
1803+ {kTag , " =" },
1804+ " 1;\n end\n " ,
1805+ " endmodule\n " },
1806+ {" module m;\n "
1807+ " reg k;\n "
1808+ " always_comb begin\n " ,
1809+ " k &= 1;\n end\n "
1810+ " endmodule\n " },
1811+ {" module m;\n "
1812+ " reg k;\n "
1813+ " always_comb begin\n "
1814+ " k |= 1;\n end\n "
1815+ " endmodule\n " },
1816+ {" module m;\n "
1817+ " reg k;\n "
1818+ " always_ff begin\n "
1819+ " k <= 1;\n end\n "
1820+ " endmodule\n " },
1821+ };
1822+ for (const auto &test : kTestCases ) {
1823+ TestVerilogSyntaxRangeMatches (
1824+ __FUNCTION__, test, [](const TextStructureView &text_structure) {
1825+ const auto &root = text_structure.SyntaxTree ();
1826+ const auto &net_var_assignments = SearchSyntaxTree (
1827+ *ABSL_DIE_IF_NULL (root), NodekNetVariableAssignment ());
1828+
1829+ std::vector<TreeSearchMatch> left_hand_sides;
1830+ for (const auto &assignment : net_var_assignments) {
1831+ const auto *lhs = GetNetVariableAssignmentOperator (
1832+ verible::SymbolCastToNode (*assignment.match ));
1833+ left_hand_sides.emplace_back (
1834+ TreeSearchMatch{lhs, {/* ignored context */ }});
1835+ }
1836+ return left_hand_sides;
1837+ });
1838+ }
1839+ }
1840+
17481841} // namespace
17491842} // namespace verilog
0 commit comments