Source code for crosstl.backend.DirectX.DirectxAst

"""DirectX/HLSL AST Node definitions"""

from ..common_ast import (
    ASTNode,
    ShaderNode,
    StructNode,
    EnumNode,
    TypeAliasNode,
    FunctionNode,
    VariableNode,
    AssignmentNode,
    BinaryOpNode,
    UnaryOpNode,
    FunctionCallNode,
    MemberAccessNode,
    ArrayAccessNode,
    IfNode,
    ForNode,
    WhileNode,
    DoWhileNode,
    SwitchNode,
    CaseNode,
    ReturnNode,
    TernaryOpNode,
    VectorConstructorNode,
    BreakNode,
    ContinueNode,
    CastNode,
    AttributeNode,
    PreprocessorNode,
    TextureSampleNode,
)

# DirectX-specific nodes


[docs] class CbufferNode(StructNode): """HLSL constant-buffer declaration with named member variables.""" def __init__(self, name, members): super().__init__(name, members) def __repr__(self): return f"CbufferNode(name={self.name}, members={self.members})"
[docs] class PragmaNode(ASTNode): """Preprocessor pragma directive preserved in the HLSL AST.""" def __init__(self, directive, value=None): self.directive = directive self.value = value def __repr__(self): return f"PragmaNode(directive={self.directive}, value={self.value})"
[docs] class IncludeNode(ASTNode): """HLSL include directive with system/local include metadata.""" def __init__(self, path, is_system=False): self.path = path self.is_system = is_system def __repr__(self): return f"IncludeNode(path={self.path}, is_system={self.is_system})"
[docs] class SwitchStatementNode(ASTNode): """Legacy switch statement node used by older HLSL parser paths.""" def __init__(self, expression, cases): self.expression = expression self.cases = cases def __repr__(self): return f"SwitchStatementNode(expression={self.expression}, cases={self.cases})"
[docs] class SwitchCaseNode(ASTNode): """Legacy switch case node with default-case tracking.""" def __init__(self, case_value, statements, is_default=False): self.case_value = case_value self.statements = statements self.is_default = is_default def __repr__(self): return f"SwitchCaseNode(case_value={self.case_value}, statements={len(self.statements)}, is_default={self.is_default})"