Skip to content

base

Hold analyzer state, semantic sidecar helpers, and shared traversal utilities that specialized visitor mixins build on.

Classes:

SemanticAnalyzerCore

SemanticAnalyzerCore(
    *,
    context: SemanticContext | None = None,
    session: CompilationSession | None = None,
)

Bases: BaseVisitor

Provide shared semantic-analysis state and helper behavior for the specialized visitor mixins that implement node-specific rules. attributes: context: type: SemanticContext session: type: CompilationSession | None factory: type: SemanticEntityFactory registry: type: SemanticRegistry bindings: type: VisibleBindings

Methods:

Source code in src/irx/analysis/handlers/base.py
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
def __init__(
    self,
    *,
    context: SemanticContext | None = None,
    session: CompilationSession | None = None,
) -> None:
    """
    title: Initialize SemanticAnalyzerCore.
    parameters:
      context:
        type: SemanticContext | None
      session:
        type: CompilationSession | None
    """
    self.session = session
    self.context = context or SemanticContext()
    if session is not None:
        self.context.diagnostics = session.diagnostics
    self.factory = SemanticEntityFactory(self.context)
    self.registry = SemanticRegistry(self.context, self.factory)
    self.bindings = VisibleBindings(
        context=self.context,
        factory=self.factory,
        bindings=(
            session.visible_bindings if session is not None else None
        ),
    )

analyze

analyze(node: AST) -> AST
Source code in src/irx/analysis/handlers/base.py
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
def analyze(self, node: astx.AST) -> astx.AST:
    """
    title: Analyze one AST root.
    parameters:
      node:
        type: astx.AST
    returns:
      type: astx.AST
    """
    if isinstance(node, astx.Module):
        parsed_module = ParsedModule(node.name, node)
        self.analyze_parsed_module(parsed_module, predeclared=False)
    else:
        with self.context.scope("module"):
            self.visit(node)
    self.context.diagnostics.raise_if_errors()
    return node

analyze_parsed_module

analyze_parsed_module(
    parsed_module: ParsedModule, *, predeclared: bool
) -> Module
Source code in src/irx/analysis/handlers/base.py
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
def analyze_parsed_module(
    self,
    parsed_module: ParsedModule,
    *,
    predeclared: bool,
) -> astx.Module:
    """
    title: Analyze one parsed module.
    parameters:
      parsed_module:
        type: ParsedModule
      predeclared:
        type: bool
    returns:
      type: astx.Module
    """
    with self.context.in_module(parsed_module.key):
        self._visit_module(parsed_module.ast, predeclared=predeclared)
    return parsed_module.ast

visit

visit(node: AST) -> None
Source code in src/irx/analysis/handlers/base.py
1330
1331
1332
1333
1334
1335
1336
1337
1338
@dispatch
def visit(self, node: astx.AST) -> None:
    """
    title: Visit generic AST nodes.
    parameters:
      node:
        type: astx.AST
    """
    self._visit_plain_typed_node(node)

SemanticVisitorMixinRuntimeBase

SemanticVisitorMixinTypingBase

Methods:

visit

visit(node: AST) -> None
Source code in src/irx/analysis/handlers/base.py
71
72
73
74
75
76
77
78
def visit(self, node: astx.AST) -> None:
    """
    title: Visit AST nodes.
    parameters:
      node:
        type: astx.AST
    """
    raise NotImplementedError