message: Refactor recursing lambda
  Summary: Change the setup of a lambda in `ControlFlowGraph` that needs recursion. Avoid the std::function for performance reasons as well as for stack legibility.
diff: @@ -1622,9 +1622,11 @@ MethodItemEntry* ControlFlowGraph::create_catch(
  // throw edge indices.
  //
  // We stop early if we find find an equivalent linked list of catch entries
  - std::function<MethodItemEntry*(const EdgeVector::iterator&)> add_catch;
  - add_catch = [this, &add_catch, &throws_end, catch_to_containing_block](
  + auto add_catch = [this, &throws_end, catch_to_containing_block](
  const EdgeVector::iterator& it) -> MethodItemEntry* {
  + auto add_catch_impl = [this, &throws_end, catch_to_containing_block](
  + const EdgeVector::iterator& it,
  + const auto& lambda_ref) -> MethodItemEntry* {
  if (it == throws_end) {
  return nullptr;
  }
  @@ -1634,8 +1636,8 @@ MethodItemEntry* ControlFlowGraph::create_catch(
  // Is there already a catch here that's equivalent to the catch we would
  // create?
  if (mie.type == MFLOW_CATCH &&
  - catch_entries_equivalent_to_throw_edges(&mie, it, throws_end,
  - *catch_to_containing_block)) {
  + catch_entries_equivalent_to_throw_edges(
  + &mie, it, throws_end, *catch_to_containing_block)) {
  // The linked list of catch entries starting at `mie` is equivalent to
  // the rest of `throws` from `it` to `end`. So we don't need to create
  // another one, use the existing list.
  @@ -1644,7 +1646,7 @@ MethodItemEntry* ControlFlowGraph::create_catch(
  }
  // We recurse and find the next catch before creating this catch because
  // otherwise, we could create a cycle of the catch entries.
  - MethodItemEntry* next = add_catch(std::next(it));
  + MethodItemEntry* next = lambda_ref(std::next(it), lambda_ref);
  // create a new catch entry and insert it into the bytecode
  auto new_catch = new MethodItemEntry(edge->m_throw_info->catch_type);
  @@ -1653,6 +1655,8 @@ MethodItemEntry* ControlFlowGraph::create_catch(
  catch_to_containing_block->emplace(new_catch, catch_block);
  return new_catch;
  };
  + return add_catch_impl(it, add_catch_impl);
  + };
  return add_catch(throws.begin());
  }
  