Module opshin.optimize.optimize_remove_checked_integrity_checks

Expand source code
import ast

from ..typed_util import ScopedSequenceNodeTransformer
from .analyze_integrity import is_integrity_call


class OptimizeRemoveCheckedIntegrityChecks(ScopedSequenceNodeTransformer):
    """Remove integrity checks whose arguments have already passed integrity checks."""

    step = "Removing redundant integrity checks"

    def visit_Expr(self, node: ast.Expr):
        if (
            is_integrity_call(node.value)
            and len(node.value.args) == 1
            and node.value.args[0].integrity_checked
        ):
            return None
        return node

Classes

class OptimizeRemoveCheckedIntegrityChecks

Remove integrity checks whose arguments have already passed integrity checks.

Expand source code
class OptimizeRemoveCheckedIntegrityChecks(ScopedSequenceNodeTransformer):
    """Remove integrity checks whose arguments have already passed integrity checks."""

    step = "Removing redundant integrity checks"

    def visit_Expr(self, node: ast.Expr):
        if (
            is_integrity_call(node.value)
            and len(node.value.args) == 1
            and node.value.args[0].integrity_checked
        ):
            return None
        return node

Ancestors

Class variables

var step

Inherited from: ScopedSequenceNodeTransformer.step

The type of the None singleton.

Methods

def visit(self, node)

Inherited from: ScopedSequenceNodeTransformer.visit

Visit a node.

def visit_Expr(self, node: ast.Expr)
Expand source code
def visit_Expr(self, node: ast.Expr):
    if (
        is_integrity_call(node.value)
        and len(node.value.args) == 1
        and node.value.args[0].integrity_checked
    ):
        return None
    return node