summaryrefslogtreecommitdiff
path: root/mesonbuild/cargo
diff options
context:
space:
mode:
authorCharles Brunet <charles.brunet@optelgroup.com>2023-08-25 09:24:17 -0400
committerCharles Brunet <charles.brunet@optelgroup.com>2023-09-11 07:51:18 -0400
commit02ff9553dbe09f3f2b7a93221dfd28fc53926d0e (patch)
treedb0538dd14ef75976480db4a3b0b2dd0424ed939 /mesonbuild/cargo
parentf13260dd43771bd7e9594cbad942b7d9aa4292fc (diff)
downloadmeson-02ff9553dbe09f3f2b7a93221dfd28fc53926d0e.tar.gz
parser: add SymbolNode to preserve operators
Diffstat (limited to 'mesonbuild/cargo')
-rw-r--r--mesonbuild/cargo/builder.py20
1 files changed, 12 insertions, 8 deletions
diff --git a/mesonbuild/cargo/builder.py b/mesonbuild/cargo/builder.py
index 6ef66eeca..9c650b945 100644
--- a/mesonbuild/cargo/builder.py
+++ b/mesonbuild/cargo/builder.py
@@ -28,6 +28,10 @@ def _token(tid: str, filename: str, value: mparser.TV_TokenTypes) -> mparser.Tok
return mparser.Token(tid, filename, -1, -1, -1, (-1, -1), value)
+def _symbol(filename: str, val: str) -> mparser.SymbolNode:
+ return mparser.SymbolNode(_token('', filename, val))
+
+
def string(value: str, filename: str) -> mparser.StringNode:
"""Build A StringNode
@@ -67,7 +71,7 @@ def array(value: T.List[mparser.BaseNode], filename: str) -> mparser.ArrayNode:
"""
args = mparser.ArgumentNode(_token('array', filename, 'unused'))
args.arguments = value
- return mparser.ArrayNode(args, -1, -1, -1, -1)
+ return mparser.ArrayNode(_symbol(filename, '['), args, _symbol(filename, ']'), -1, -1, -1, -1)
def identifier(value: str, filename: str) -> mparser.IdNode:
@@ -97,7 +101,7 @@ def method(name: str, id_: mparser.IdNode,
args.arguments = pos
if kw is not None:
args.kwargs = {identifier(k, id_.filename): v for k, v in kw.items()}
- return mparser.MethodNode(id_.filename, -1, -1, id_, identifier(name, id_.filename), args)
+ return mparser.MethodNode(id_.filename, -1, -1, id_, _symbol(id_.filename, '.'), identifier(name, id_.filename), _symbol(id_.filename, '('), args, _symbol(id_.filename, ')'))
def function(name: str, filename: str,
@@ -117,7 +121,7 @@ def function(name: str, filename: str,
args.arguments = pos
if kw is not None:
args.kwargs = {identifier(k, filename): v for k, v in kw.items()}
- return mparser.FunctionNode(filename, -1, -1, -1, -1, identifier(name, filename), args)
+ return mparser.FunctionNode(filename, -1, -1, -1, -1, identifier(name, filename), _symbol(filename, '('), args, _symbol(filename, ')'))
def equal(lhs: mparser.BaseNode, rhs: mparser.BaseNode) -> mparser.ComparisonNode:
@@ -127,7 +131,7 @@ def equal(lhs: mparser.BaseNode, rhs: mparser.BaseNode) -> mparser.ComparisonNod
:param rhs: the right hand side of the equal
:return: A compraison node
"""
- return mparser.ComparisonNode('==', lhs, rhs)
+ return mparser.ComparisonNode('==', lhs, _symbol(lhs.filename, '=='), rhs)
def or_(lhs: mparser.BaseNode, rhs: mparser.BaseNode) -> mparser.OrNode:
@@ -137,7 +141,7 @@ def or_(lhs: mparser.BaseNode, rhs: mparser.BaseNode) -> mparser.OrNode:
:param rhs: The Right of the Node
:return: The OrNode
"""
- return mparser.OrNode(lhs, rhs)
+ return mparser.OrNode(lhs, _symbol(lhs.filename, 'or'), rhs)
def and_(lhs: mparser.BaseNode, rhs: mparser.BaseNode) -> mparser.AndNode:
@@ -147,7 +151,7 @@ def and_(lhs: mparser.BaseNode, rhs: mparser.BaseNode) -> mparser.AndNode:
:param rhs: The right of the And
:return: The AndNode
"""
- return mparser.AndNode(lhs, rhs)
+ return mparser.AndNode(lhs, _symbol(lhs.filename, 'and'), rhs)
def not_(value: mparser.BaseNode, filename: str) -> mparser.NotNode:
@@ -157,7 +161,7 @@ def not_(value: mparser.BaseNode, filename: str) -> mparser.NotNode:
:param filename: the string filename
:return: The NotNode
"""
- return mparser.NotNode(_token('not', filename, ''), value)
+ return mparser.NotNode(_token('not', filename, ''), _symbol(filename, 'not'), value)
def assign(value: mparser.BaseNode, varname: str, filename: str) -> mparser.AssignmentNode:
@@ -168,7 +172,7 @@ def assign(value: mparser.BaseNode, varname: str, filename: str) -> mparser.Assi
:param filename: The filename
:return: An AssignmentNode
"""
- return mparser.AssignmentNode(filename, -1, -1, identifier(varname, filename), value)
+ return mparser.AssignmentNode(filename, -1, -1, identifier(varname, filename), _symbol(filename, '='), value)
def block(filename: str) -> mparser.CodeBlockNode: