gpt4 book ai didi

clang - 评估 clang 工具中的常量表达式

转载 作者:行者123 更新时间:2023-12-04 00:44:38 30 4
gpt4 key购买 nike

我正在编写一个 Clang 工具,并且试图弄清楚如何在访问程序 AST 的情况下评估字符串文字。给定以下程序:

class DHolder { 
public:
DHolder(std::string s) {}
};

DHolder x("foo");

我在 Clang 工具中有以下代码:
const CXXConstructExpr *ctor = ... // constructs `x` above
const Expr *expr = ctor->getArg(0); // the "foo" expression
???

如何从 Expr 获取代表 "foo"在我的工具中将字符串文字转换为实际的 C++ 字符串?我试图做类似的事情:
// From ExprConstant.cpp
Evaluate(result, info, expr);

但我不知道如何初始化 resultinfo参数。

有什么线索吗?

最佳答案

我意识到这是一个老问题,但我刚才在无法使用 stringLiteral() 时遇到了这个问题。绑定(bind)到任何参数(代码不是 C++11)。例如,我有一个 CXXMMemberCallExpr :

addProperty(object, char*, char*, ...); // has 7 arguments, N=[0,6]

AST 转储显示 StringLiteral 之前是 CXXBindTemporaryExpr .因此,为了让我的 memberCallExpr 查询使用 hasArgument(N,expr()) 进行绑定(bind),我用 bindTemporaryExpr() 包装了我的查询(为了便于阅读,此处显示在单独的行中):
memberCallExpr(
hasArgument(6, bindTemporaryExpr(
hasDescendant(stringLiteral().bind("argument"))
)
)
)

关于clang - 评估 clang 工具中的常量表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18486082/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com