English 中文(简体)
创建有叮结的函数参数
原标题:Creating parameters for a function with clang
  • 时间:2012-05-25 01:44:01
  •  标签:
  • llvm
  • clang

我有源代码 看起来像这个,

void update();

void update()
{
}

我试图用叮当解析这个代码 并修改这个代码。

typedef float v4sf attribute ((vector_size(16)));
void update(v4sf& v1, v4sf& v2);

void update(v4sf& v1, v4sf& v2)
{
}

我在写作的函数里 读了下图

MyRecursiveASTVisitor::VisitFunctionDecl(FunctionDecl *f) 

函数Decl 已经设置了Params () 方法, 我可以用它来使用。 我不得不用这个方法创建参数 。

  static ParmVarDecl *Create(ASTContext &C, DeclContext *DC,
                             SourceLocation StartLoc,
                             SourceLocation IdLoc, IdentifierInfo *Id,
                             QualType T, TypeSourceInfo *TInfo,
                             StorageClass S, StorageClass SCAsWritten,
                             Expr *DefArg);

创建函数的前四个参数可以从 函数 Decl 中获取。 我不知道其余的参数必须是什么 。

我如何创建类型, 并在叮当中为它们指定值? 类型不需要嵌入, 也可以像转换源代码中添加的( v4sf) 一样 。

这是(使用叮当方法)进行变换还是我可以使用 Rebread. InsertText () 来添加参数?

最佳回答

Clang 的设计不是为了支持其 AST 的突变,也不支持将 AST 重新导出为源代码( 保留注释、 宏和预处理指令 )。 添加 AST 节点可能会手工违反 AST 变量, 可能导致崩溃 。 您应该使用 < code> refrict 来根据您从 AST 中提取的信息对源代码进行重写 。

如果您仍然想要进行 AST 修改, 您应该重建您想要修改的 AST 部分, 而不是修改它。 重建的步骤应该通过在 < code> Sema 上调用方法来进行, 该方法知道如何在建设 AST 时提供合适的变量 。

问题回答

暂无回答




相关问题
How to generate LLVM IR with ANTLR and C target

im currently trying to generate LLVM IR with ANTLR3. But the problem ist, that i need the C target (C++ would be better but is not working yet, or is it?) but from C i can t call the LLVM C++ API for ...

How to build LLVM using GCC 4 on Windows?

I have been able to build LLVM 2.6 (the llvm-2.6.tar.gz package) using MinGW GCC 3.4.5. I haven t tested properly, but it seems to work. The trouble is, I have libraries of my own which don t build ...

Pros/Cons of Static and Dynamic Instrumentation

There are many static and dynamic instrumentation tools. Soot is a static instrumentation tool for Java bytecode. Pin and Valgrind are dynamic instrumentation tools for binaries. What are pros and ...

Bootstrapping a language on LLVM

I m bootstrapping a programming language compiler on top of LLVM. Currently I m mostly done writing a compiler for a subset of C which is self-compiling. When I m finished with that, I ll bootstrap ...

Call LLVM Jit from c program

I have generated a bc file with the online compiler on llvm.org, and I would like to know if it is possible to load this bc file from a c or c++ program, execute the IR in the bc file with the llvm ...

LLVM MinGW installation on Vista?

From llvm.org I ve downloaded llvm-2.6-x86-mingw32.tar.bz2 into c:llvm and llvm-gcc-4.2-2.6-x86-mingw32-tar.bz2 into c:llvm-gcc as well as setup a desktop shortcut the following batch file in c:...

热门标签