Friday, 2 December 2011

LLVM読み会

C++ なので泣きたくなるほど読めないです。

ExprResult Parser::ParseExpression() {
ExprResult LHS(ParseAssignmentExpression());
return ParseRHSOfBinaryExpression(move(LHS), prec::Comma);
}

って書いてあるだけなんだけど、ExprResult.h なんかない。これが、

ExprResult という型を持つ LHS 変数

と読むのは僕は苦痛。ただでさえ分かりにくいのに何故、関数呼び出しと間違うような書き方にした。

ExprResult *LHS = new ExprResult(ParseAssignmentExpression());

と同じだと思うのだけど。で、ExprResult は、

typedef ActionResult<Expr*> ExprResult;

で、ActionResult は、

template<typename PtrTy>
class ActionResult<PtrTy, true> {

ですか。gdb で、ExprResult を表示してみて中にある
uintptr_t PtrWithInvalid;
を頼りに探し当てました。typedef でgrepするという手はあったな。

困ったものだ。まぁ、でも Parser は楽勝なはずです。

No comments: