code: def SETUP_WITH(self, instr):
      with_block = self.make_block(to=instr.to, inclusive=False)
  
      assert with_block.pop().opname == "LOAD_CONST"
      assert with_block.pop().opname == "POP_BLOCK"
  
      with_cleanup = self.ilst.pop(0)
      assert with_cleanup.opname == "WITH_CLEANUP"
      end_finally = self.ilst.pop(0)
      assert end_finally.opname == "END_FINALLY"
  
      with_ = self.decompile_block(
          with_block, stack_items=["WITH_BLOCK"]
      ).stmnt()
  
      if (
          isinstance(with_[0], _ast.Assign)
          and with_[0].value == "WITH_BLOCK"
      ):
          assign = with_.pop(0)
          as_ = assign.targets[0]
      else:
          as_ = None
  
      body = with_
  
      expr = self.ast_stack.pop()
  
      with_ = _ast.With(
          context_expr=expr,
          optional_vars=as_,
          body=body,
          lineno=instr.lineno,
          col_offset=0,
      )
  
      self.ast_stack.append(with_)
  
imports: from __future__ import print_function
  from __future__ import division
  from __future__ import absolute_import
  import opcode
  import _ast
  from ..bytecodetools.instruction import Instruction
  from ..asttools.visitors.print_visitor import print_ast
  from ..utils import py3op, py2op, py3
label_desc: Use image node_id 31 for calling the CtrlFlowInstructions obj's underlying member method code with example usage: obj.SETUP_WITH(instr) without return types