From 7fa9087c61df4c52d299ad8e748ee73a252c2832 Mon Sep 17 00:00:00 2001
From: Dominic Kempf <dominic.kempf@iwr.uni-heidelberg.de>
Date: Thu, 14 Apr 2016 14:15:55 +0200
Subject: [PATCH] Allow a list of generables when creating class members

---
 python/dune/perftool/cgen/clazz.py           | 14 +++++++++++---
 python/dune/perftool/pdelab/localoperator.py |  4 ++--
 2 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/python/dune/perftool/cgen/clazz.py b/python/dune/perftool/cgen/clazz.py
index 0fa4b5b0..fa00c0a1 100644
--- a/python/dune/perftool/cgen/clazz.py
+++ b/python/dune/perftool/cgen/clazz.py
@@ -36,13 +36,21 @@ class ClassMember(Generable):
         self.member = member
         self.access = access
 
-        assert isinstance(member, Generable)
+        # We only consider a Generable or a list thereof as member
+        from collections import Iterable
+        assert isinstance(member, Generable) or (isinstance(member, Iterable) and all(isinstance(m, Generable) for m in member))
 
     def generate(self):
         yield "\n\n"
         yield "{}:\n".format(access_modifier_string(self.access))
-        for line in self.member.generate():
-            yield line + '\n'
+
+        if isinstance(self.member, Generable):
+            for line in self.member.generate():
+                yield line + '\n'
+        else:
+            for generable in self.member:
+                for line in generable.generate():
+                    yield line + '\n'
 
 
 class Constructor(Generable):
diff --git a/python/dune/perftool/pdelab/localoperator.py b/python/dune/perftool/pdelab/localoperator.py
index bb2cd648..f56a7159 100644
--- a/python/dune/perftool/pdelab/localoperator.py
+++ b/python/dune/perftool/pdelab/localoperator.py
@@ -118,8 +118,8 @@ def generate_kernel(integrand=None, measure=None):
 class AssemblyMethod(ClassMember):
     def __init__(self, signature, kernel):
         from loopy import generate_code
-        from cgen import LiteralLines
-        content = LiteralLines('\n' + '\n'.join(signature) + '\n' + generate_code(kernel)[0])
+        from cgen import LiteralLines, Block
+        content = [LiteralLines('\n' + '\n'.join(signature)), Block([LiteralLines('\n' + generate_code(kernel)[0])])]
         ClassMember.__init__(self, content)
 
 
-- 
GitLab