Add a negation operator
[fur] / transformation.py
index 1fe7dc9..d680145 100644 (file)
@@ -16,6 +16,13 @@ CStringLiteral = collections.namedtuple(
     ],
 )
 
+CNegationExpression = collections.namedtuple(
+    'CNegationExpression',
+    [
+        'value',
+    ],
+)
+
 CAdditionExpression = collections.namedtuple(
     'CAdditionExpression',
     [
@@ -79,6 +86,9 @@ BUILTINS = {
 }
 
 def transform_expression(builtin_dependencies, expression):
+    if isinstance(expression, parsing.FurNegationExpression):
+        return transform_negation_expression(builtin_dependencies, expression)
+
     if isinstance(expression, parsing.FurFunctionCallExpression):
         return transform_function_call_expression(builtin_dependencies, expression)
 
@@ -103,6 +113,9 @@ def transform_expression(builtin_dependencies, expression):
         right=transform_expression(builtin_dependencies, expression.right),
     )
 
+def transform_negation_expression(builtin_dependencies, negation_expression):
+    return CNegationExpression(value=transform_expression(builtin_dependencies, negation_expression.value))
+
 def transform_function_call_expression(builtin_dependencies, function_call):
     if function_call.name in BUILTINS.keys():
         builtin_dependencies.add(function_call.name)