diff options
| author | Xavier Claessens <xavier.claessens@collabora.com> | 2023-10-09 22:01:22 -0400 |
|---|---|---|
| committer | Xavier Claessens <xavier.claessens@collabora.com> | 2024-02-26 10:03:51 -0500 |
| commit | 6cce6c51bf2ae4430d40331717bba8963ac475d8 (patch) | |
| tree | 7e086f57176254526ab704f229224b7b49a530eb | |
| parent | cbf23f5eba4c2a323c31ff2bc0b6698789f5998a (diff) | |
| download | meson-6cce6c51bf2ae4430d40331717bba8963ac475d8.tar.gz | |
cargo: Builder: Add support for "+", "+=", "if" and "foreach"
| -rw-r--r-- | mesonbuild/cargo/builder.py | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/mesonbuild/cargo/builder.py b/mesonbuild/cargo/builder.py index 17b4ca52c..ad2c76066 100644 --- a/mesonbuild/cargo/builder.py +++ b/mesonbuild/cargo/builder.py @@ -167,3 +167,45 @@ class Builder: block = mparser.CodeBlockNode(self._token('node', '')) block.lines = lines return block + + def plus(self, lhs: mparser.BaseNode, rhs: mparser.BaseNode) -> mparser.ArithmeticNode: + """Create an addition node + + :param lhs: The left of the addition + :param rhs: The right of the addition + :return: The ArithmeticNode + """ + return mparser.ArithmeticNode('add', lhs, self._symbol('+'), rhs) + + def plusassign(self, value: mparser.BaseNode, varname: str) -> mparser.PlusAssignmentNode: + """Create a "+=" node + + :param value: The value to add + :param varname: The variable to assign + :return: The PlusAssignmentNode + """ + return mparser.PlusAssignmentNode(self.identifier(varname), self._symbol('+='), value) + + def if_(self, condition: mparser.BaseNode, block: mparser.CodeBlockNode) -> mparser.IfClauseNode: + """Create a "if" block + + :param condition: The condition + :param block: Lines inside the condition + :return: The IfClauseNode + """ + clause = mparser.IfClauseNode(condition) + clause.ifs.append(mparser.IfNode(clause, self._symbol('if'), condition, block)) + clause.elseblock = mparser.EmptyNode(-1, -1, self.filename) + return clause + + def foreach(self, varnames: T.List[str], items: mparser.BaseNode, block: mparser.CodeBlockNode) -> mparser.ForeachClauseNode: + """Create a "foreach" loop + + :param varnames: Iterator variable names (one for list, two for dict). + :param items: The list of dict to iterate + :param block: Lines inside the loop + :return: The ForeachClauseNode + """ + varids = [self.identifier(i) for i in varnames] + commas = [self._symbol(',') for i in range(len(varnames) - 1)] + return mparser.ForeachClauseNode(self._symbol('foreach'), varids, commas, self._symbol(':'), items, block, self._symbol('endforeach')) |
