From 0f33273b6f3eb3ffc6cf91830dbe75eca792f64d Mon Sep 17 00:00:00 2001
From: Stephan Seitz <stephan.seitz@fau.de>
Date: Tue, 24 Sep 2019 14:04:02 +0200
Subject: [PATCH] Add SourceCodeComment/EmptyLine as AST nodes

---
 pystencils/astnodes.py                       | 46 ++++++++++++++++++++
 pystencils/backends/cbackend.py              |  6 +++
 pystencils_tests/test_source_code_comment.py | 30 +++++++++++++
 3 files changed, 82 insertions(+)
 create mode 100644 pystencils_tests/test_source_code_comment.py

diff --git a/pystencils/astnodes.py b/pystencils/astnodes.py
index b24138286..b9ad28e28 100644
--- a/pystencils/astnodes.py
+++ b/pystencils/astnodes.py
@@ -730,3 +730,49 @@ class DestructuringBindingsForFieldClass(Node):
 
 def get_dummy_symbol(dtype='bool'):
     return TypedSymbol('dummy%s' % uuid.uuid4().hex, create_type(dtype))
+
+
+class SourceCodeComment(Node):
+    def __init__(self, text):
+        self.text = text
+
+    @property
+    def args(self):
+        return []
+
+    @property
+    def symbols_defined(self):
+        return set()
+
+    @property
+    def undefined_symbols(self):
+        return set()
+
+    def __str__(self):
+        return "/* " + self.text + " */"
+
+    def __repr__(self):
+        return self.__str__()
+
+
+class EmptyLine(Node):
+    def __init__(self):
+        pass
+
+    @property
+    def args(self):
+        return []
+
+    @property
+    def symbols_defined(self):
+        return set()
+
+    @property
+    def undefined_symbols(self):
+        return set()
+
+    def __str__(self):
+        return ""
+
+    def __repr__(self):
+        return self.__str__()
diff --git a/pystencils/backends/cbackend.py b/pystencils/backends/cbackend.py
index 197e21d81..4e19fd67b 100644
--- a/pystencils/backends/cbackend.py
+++ b/pystencils/backends/cbackend.py
@@ -264,6 +264,12 @@ class CBackend:
     def _print_CustomCodeNode(self, node):
         return node.get_code(self._dialect, self._vector_instruction_set)
 
+    def _print_SourceCodeComment(self, node):
+        return "/* " + node.text + " */"
+
+    def _print_EmptyLine(self, node):
+        return ""
+
     def _print_Conditional(self, node):
         cond_type = get_type_of_expression(node.condition_expr)
         if isinstance(cond_type, VectorType):
diff --git a/pystencils_tests/test_source_code_comment.py b/pystencils_tests/test_source_code_comment.py
new file mode 100644
index 000000000..6cc66feb6
--- /dev/null
+++ b/pystencils_tests/test_source_code_comment.py
@@ -0,0 +1,30 @@
+# -*- coding: utf-8 -*-
+#
+# Copyright © 2019 Stephan Seitz <stephan.seitz@fau.de>
+#
+# Distributed under terms of the GPLv3 license.
+
+"""
+
+"""
+import pystencils
+import pystencils.astnodes
+
+
+def test_source_code_comment():
+
+    a, b = pystencils.fields('a,b: float[2D]')
+
+    assignments = pystencils.AssignmentCollection(
+        {a.center(): b[0, 2] + b[0, 0]}, {}
+    )
+
+    ast = pystencils.create_kernel(assignments, target='cpu')
+
+    ast.body.append(pystencils.astnodes.SourceCodeComment("Hallo"))
+    ast.body.append(pystencils.astnodes.EmptyLine())
+    ast.body.append(pystencils.astnodes.SourceCodeComment("World!"))
+    print(ast)
+    compiled = ast.compile()
+    assert compiled is not None
+    print(pystencils.show_code(ast))
-- 
GitLab