"""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})"