Skip to content
Snippets Groups Projects
Commit eb1c83d6 authored by Frederik Hennig's avatar Frederik Hennig
Browse files

remove codegen.postprocessing

parent 575f10c2
No related merge requests found
Pipeline #75126 passed with stages
in 11 minutes and 26 seconds
from .api import real_t, Vector3, GhostLayerFieldPtr, glfield, IBlockPtr
from .postprocessing import CaptureToClass
from .sweep import Sweep
from .build_config import WalberlaBuildConfig
......@@ -9,7 +8,6 @@ __all__ = [
"GhostLayerFieldPtr",
"glfield",
"IBlockPtr",
"CaptureToClass",
"Sweep",
"WalberlaBuildConfig",
]
......
from typing import Iterable
import sympy as sp
from pystencils.types import deconstify
from pystencilssfg.ir.postprocessing import SfgDeferredNode, PostProcessingContext
from pystencilssfg.ir import (
SfgCallTreeNode,
SfgStatements,
SfgVisibility,
SfgVisibilityBlock,
SfgMemberVariable,
SfgSequence,
SfgConstructor,
)
from pystencilssfg.lang import AugExpr, SfgVar
from pystencilssfg.exceptions import SfgException
class CaptureToClass(SfgDeferredNode):
def __init__(
self, ignore: Iterable[str | SfgVar | AugExpr | sp.Symbol] = ()
) -> None:
self._ignore = set()
for ig in ignore:
if isinstance(ig, AugExpr):
self._ignore |= ig.depends
elif isinstance(ig, sp.Symbol):
self._ignore.add(ig.name)
else:
self._ignore.add(ig)
def expand(self, ppc: PostProcessingContext) -> SfgCallTreeNode:
cls = ppc.enclosing_class
if cls is None:
raise SfgException("Cannot capture variables to class in a free function")
statements: list[SfgStatements] = []
captured: list[SfgVar] = []
members_block = SfgVisibilityBlock(SfgVisibility.PRIVATE)
for var in ppc.live_variables:
if not (var in self._ignore or var.name in self._ignore):
member = SfgMemberVariable(f"{var}_", deconstify(var.dtype))
members_block.append_member(member)
captured.append(var)
statements.append(
SfgStatements(f"{var.dtype.c_string()} {var.name} {{ {member} }};", [var], [])
)
cls.append_visibility_block(members_block)
constructor_block = SfgVisibilityBlock(SfgVisibility.PUBLIC)
constructor_block.append_member(
SfgConstructor(captured, [f"{var}_ {{ {var} }}" for var in captured])
)
cls.append_visibility_block(constructor_block)
return SfgSequence(statements)
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment