def translate_isinstance(builder: IRBuilder, expr: CallExpr, callee: RefExpr) -> Optional[Value]: # Special case builtins.isinstance if (len(expr.args) == 2 and expr.arg_kinds == [ARG_POS, ARG_POS] and isinstance(expr.args[1], (RefExpr, TupleExpr))): irs = builder.flatten_classes(expr.args[1]) if irs is not None: return builder.builder.isinstance_helper(builder.accept(expr.args[0]), irs, expr.line) return None
def translate_isinstance(builder: IRBuilder, expr: CallExpr, callee: RefExpr) -> Optional[Value]: if (len(expr.args) == 2 and expr.arg_kinds == [ARG_POS, ARG_POS] and isinstance(expr.args[1], (RefExpr, TupleExpr))): # Special case for builtins.isinstance # Prevent coercions on the thing we are checking the instance of - there is no need to # coerce something to a new type before checking what type it is, and the coercion could # lead to bugs. builder.types[expr.args[0]] = AnyType(TypeOfAny.from_error) irs = builder.flatten_classes(expr.args[1]) if irs is not None: return builder.builder.isinstance_helper(builder.accept(expr.args[0]), irs, expr.line) return None