Skip to content

operators

Analyze unary, binary, cast, and print expressions plus their assignment-like operator behavior.

Classes:

ExpressionOperatorVisitorMixin

Bases: SemanticVisitorMixinBase

Methods:

visit

visit(node: PrintExpr) -> None
Source code in packages/irx/src/irx/analysis/handlers/_expressions/operators.py
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
@SemanticAnalyzerCore.visit.dispatch
def visit(self, node: astx.PrintExpr) -> None:
    """
    title: Visit PrintExpr nodes.
    parameters:
      node:
        type: astx.PrintExpr
    """
    self.visit(node.message)
    if not self._require_value_expression(
        node.message,
        context="PrintExpr",
    ):
        self._set_type(node, astx.Int32())
        return
    message_type = self._expr_type(node.message)
    if not (
        is_string_type(message_type)
        or is_integer_type(message_type)
        or is_float_type(message_type)
        or is_boolean_type(message_type)
    ):
        self.context.diagnostics.add(
            "unsupported PrintExpr message type "
            f"{display_type_name(message_type)}",
            node=node,
            code=DiagnosticCodes.SEMANTIC_TYPE_MISMATCH,
        )
    self._set_type(node, astx.Int32())