(self)
return None
Detects if there is any bitwise operation in the function.

        :return: Tags.
Detects if there is any bitwise operation in the function.
Detects if there is any bitwise operation in the function .
def has_bitshifts(self):
        """
        Detects if there is any bitwise operation in the function.

        :return: Tags.
        """

        def _has_bitshifts(expr):
            if isinstance(expr, pyvex.IRExpr.Binop):
                return expr.op.startswith("Iop_Shl") or expr.op.startswith("Iop_Shr") \
                       or expr.op.startswith("Iop_Sar")
            return False

        found_bitops = False

        for block in self._function.blocks:
            if block.size == 0:
                continue
            for stmt in block.vex.statements:
                if isinstance(stmt, pyvex.IRStmt.Put):
                    found_bitops = found_bitops or _has_bitshifts(stmt.data)
                elif isinstance(stmt, pyvex.IRStmt.WrTmp):
                    found_bitops = found_bitops or _has_bitshifts(stmt.data)

            if found_bitops:
                break

        if found_bitops:
            return { CodeTags.HAS_BITSHIFTS }
        return None
def has_bitshifts ( self ) : def _has_bitshifts ( expr ) : if isinstance ( expr , pyvex . IRExpr . Binop ) : return expr . op . startswith ( "Iop_Shl" ) or expr . op . startswith ( "Iop_Shr" ) or expr . op . startswith ( "Iop_Sar" ) return False found_bitops = False for block in self . _function . blocks : if block . size == 0 : continue for stmt in block . vex . statements : if isinstance ( stmt , pyvex . IRStmt . Put ) : found_bitops = found_bitops or _has_bitshifts ( stmt . data ) elif isinstance ( stmt , pyvex . IRStmt . WrTmp ) : found_bitops = found_bitops or _has_bitshifts ( stmt . data ) if found_bitops : break if found_bitops : return { CodeTags . HAS_BITSHIFTS } return None