class_docstr: This interpreter provides default implementation for the methods
  interpreting AST expression into code.
  
  It can be used for the most programming languages and requires only
  language-specific instance of the CodeGenerator.
  
  !!IMPORTANT!!: Code generators used by this interpreter must know nothing
  about AST.
code: def interpret_if_expr(self, expr, if_var_name=None, **kwargs):
      if if_var_name is not None:
          var_name = if_var_name
      else:
          var_name = self._cg.add_var_declaration(expr.output_size)
  
      def handle_nested_expr(nested):
          if isinstance(nested, IfExpr):
              self._do_interpret(nested, if_var_name=var_name, **kwargs)
          else:
              nested_result = self._do_interpret(nested, **kwargs)
              self._cg.add_var_assignment(
                  var_name, nested_result, nested.output_size
              )
  
      self._cg.add_if_statement(self._do_interpret(expr.test, **kwargs))
      handle_nested_expr(expr.body)
      self._cg.add_else_statement()
      handle_nested_expr(expr.orelse)
      self._cg.add_block_termination()
  
      return var_name
  
imports: from m2cgen.assemblers import fallback_expressions
  from m2cgen.ast import BinNumExpr, CompExpr, IfExpr
  from m2cgen.interpreters.utils import CachedResult, _get_handler_name
label_desc: Use image node_id 1 for calling the ImperativeToCodeInterpreter obj's underlying member method code with example usage: obj.interpret_if_expr(expr, if_var_name) and returns: var_name