首页 > 解决方案 > 用于协同 C++ 代码的 clang API 和工具

问题描述

假设我们有一个很大的代码库和一个string blockRead()执行一些阻塞 IO 的函数。我希望将此函数更改为协程my_task<string> coroRead()并使用 clang 自动重构整个代码库以co_await coroRead()使用blockRead(). 当然,困难而乏味的部分是遍历调用图来协调所有调用函数。例如

块1.cc

#include "block_io.h"

int f1() {
  auto x = blockRead();
  return stoi(x);
}

块1.h

int f1();

块2.cc

#include "block1.cc"

int f2() {
  return f1() + 1;
}

应该变成类似

coro1.cc

#include "coro_io.h"
#include "coro.h"

my_task<int> f1() {
  auto x = co_await coroRead();
  co_return stoi(x);
}

coro1.h

#include "coro.h"
my_task<int> f1();

coro2.cc

#include "coro1.h"

my_task<int> f2() {
  co_return (co_await f1()) + 1;
}

clang 生态系统有点混乱,所以我希望了解哪些 API 可能对解决这个问题有用。

标签: c++clangautomated-refactoring

解决方案


推荐阅读