diff --git a/pystencils/astnodes.py b/pystencils/astnodes.py index 38bb9883dbbe5c7d3ca1450840f1f331e4efc4ef..d9867fed68748e47cb56e40a8ba0f8b013ba6a05 100644 --- a/pystencils/astnodes.py +++ b/pystencils/astnodes.py @@ -718,5 +718,48 @@ class DestructuringBindingsForFieldClass(Node): return self.body.atoms(arg_type) | {s for s in self.symbols_defined if isinstance(s, arg_type)} -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 5616a724d8ab3264d257c7175a14e9be4184fedf..4b077651c8e17778106f51237c973d7c9097316f 100644 --- a/pystencils/backends/cbackend.py +++ b/pystencils/backends/cbackend.py @@ -251,6 +251,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 0000000000000000000000000000000000000000..28b6768b328c55639ae0cd74136ebf99be37eb0b --- /dev/null +++ b/pystencils_tests/test_source_code_comment.py @@ -0,0 +1,38 @@ +# -*- 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)) + + +def main(): + test_source_code_comment() + + +if __name__ == '__main__': + main()