【问题标题】:llvm clang struct creating functions on the flyllvm clang struct 动态创建函数
【发布时间】:2010-04-04 05:48:31
【问题描述】:

我在 Linux 上使用 LLVM-clang。

假设在 foo.cpp 我有:

struct Foo {
  int x, y;
};

我怎样才能创建一个“神奇”的函数:

typedef (Foo) SomeFunc(Foo a, Foo b);

SomeFunc func = magic("struct Foo { int x, y; };");

这样:

func(SomeFunc a, SomeFunc b); // returns a.x + b.y;

?

注意:

所以基本上,“魔术”需要一个 char*,让 LLVM 解析它以获取 C++ 如何布局结构,然后动态创建一个返回 a.x + b.y; 的函数

【问题讨论】:

  • 请修改您的代码。很多不一致。
  • clang 有一个解析器库,它应该能够做到这一点。您可以在程序中使用它来将该字符串文字解析为翻译单元,并在完成解析后使其回调您的函数,以便您可以发出正确的代码。
  • @kennyTM:不一致的地方在哪里?

标签: c++ jit llvm


【解决方案1】:

如果你真的想做这种事情,你必须在整个 CLang 中链接,并学习如何使用它复杂且不断变化的 API。你确定你真的需要它吗?

【讨论】:

    【解决方案2】:

    C++,作为一种编译语言(通常),不能做你想让它做的事情,因为在运行时,编译器不再需要为你的 @ 进行解析和代码创建。 987654321@ 功能。这是编译语言和解释语言之间的根本区别。

    如果您真的想要按照您的要求做,实际上,您必须编写一个解析器来解析 C++ 结构定义并弄清楚 LLVM 如何在记忆。但是,这可能不是您真正想要做的。

    您在这里要解决的更大问题是什么?听起来好像您可以使用模板来做您想做的事——沿着这些思路:

    template <class T>
    int magic(T a, T b)
    {
        return a.x + b.x;
    }
    

    【讨论】:

      猜你喜欢
      • 2015-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-09
      • 1970-01-01
      • 2018-11-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多