From dd19905b20082e5c0eff7cab384e55b69de16c6d Mon Sep 17 00:00:00 2001
From: Frederik Hennig <frederik.hennig@fau.de>
Date: Thu, 13 Feb 2025 14:00:57 +0100
Subject: [PATCH] quick-fix: print base classes

---
 src/pystencilssfg/emission/file_printer.py    |  5 ++++-
 .../source/SimpleClasses.harness.cpp          |  3 +++
 .../generator_scripts/source/SimpleClasses.py | 21 ++++++++++---------
 3 files changed, 18 insertions(+), 11 deletions(-)

diff --git a/src/pystencilssfg/emission/file_printer.py b/src/pystencilssfg/emission/file_printer.py
index 8216a7b..6ab98eb 100644
--- a/src/pystencilssfg/emission/file_printer.py
+++ b/src/pystencilssfg/emission/file_printer.py
@@ -154,7 +154,10 @@ class SfgFilePrinter:
                 return code
 
             case SfgClassBody(cls, vblocks):
-                code = f"{cls.class_keyword} {cls.name} {{\n"
+                code = f"{cls.class_keyword} {cls.name}"
+                if cls.base_classes:
+                    code += " : " + ", ".join(cls.base_classes)
+                code += " {\n"
                 vblocks_str = [self._visibility_block(b) for b in vblocks]
                 code += "\n\n".join(vblocks_str)
                 code += "\n};\n"
diff --git a/tests/generator_scripts/source/SimpleClasses.harness.cpp b/tests/generator_scripts/source/SimpleClasses.harness.cpp
index ecfc065..176f05e 100644
--- a/tests/generator_scripts/source/SimpleClasses.harness.cpp
+++ b/tests/generator_scripts/source/SimpleClasses.harness.cpp
@@ -7,4 +7,7 @@ int main(void){
     Point p { 3, 1, -4 };
 
     assert(p.getX() == 3);
+
+    SpecialPoint q { 0, 1, 2 };
+    assert(q.getY() == 1);
 }
diff --git a/tests/generator_scripts/source/SimpleClasses.py b/tests/generator_scripts/source/SimpleClasses.py
index 454f1a2..26502f0 100644
--- a/tests/generator_scripts/source/SimpleClasses.py
+++ b/tests/generator_scripts/source/SimpleClasses.py
@@ -11,18 +11,19 @@ with SourceFileGenerator() as sfg:
 
     sfg.klass("Point")(
         sfg.public(
-            sfg.constructor(x, y, z)
-            .init(x_)(x)
-            .init(y_)(y)
-            .init(z_)(z),
-
+            sfg.constructor(x, y, z).init(x_)(x).init(y_)(y).init(z_)(z),
             sfg.method("getX", returns="const int64_t", const=True, inline=True)(
                 "return this->x_;"
-            )
+            ),
         ),
-        sfg.private(
-            x_,
-            y_,
-            z_
+        sfg.protected(x_, y_, z_),
+    )
+
+    sfg.klass("SpecialPoint", bases=["public Point"])(
+        sfg.public(
+            "using Point::Point;",
+            sfg.method("getY", returns="const int64_t", const=True, inline=True)(
+                "return this->y_;"
+            ),
         )
     )
-- 
GitLab