2014-02-19 2 views
5

나는 문장 바로 앞에 문장을 추가하여 clang의 특정 문장을 계측해야합니다. 나는 Expr 객체에 대한 포인터를 가지고 있는데, 이것을 포함하는 문장 바로 앞에 다른 명령문을 삽입해야한다. 지금은 내가 볼 때까지 SourceLocation 포인터를 뒤로 이동시키는 해킹 접근법을 사용하고 있습니다. 또는} 또는 {. 그러나 이것은 모든 경우에 적용되지는 않습니다. 예를 들어 for 문을 계측하려고하면 실패합니다. 더 깨끗한 방법으로이를 수행 할 수있는 메소드를 제공하는 clang 클래스가 있습니까?clang을 사용하여 다른 문장 바로 앞의 문장을 계측하는 방법

편집 : 여기 내 코드 조각입니다. 포인터 역 참조를 포함하는 명령문 바로 앞에 어설 션을 삽입해야합니다.

bool MyRecursiveASTVisitor::VisitUnaryOperator(UnaryOperator *E){ 
    if (E->getOpcode() == UO_Deref){ 
     Expr *e1 = E->getSubExpr(); 
     SourceLocation SL = E->getLocStart(); 
    } 
    return true; 
} 
+0

당신이 그 소리를 사용하고 있습니까 질문 플러그인, LibTooling, libclang? – ekeren

+0

LibTooling을 사용하고 있습니다. 나는 계측을 위해 시동 코드를 사용했기 때문에 완전히 확신 할 수는 없습니다. – anirudh

답변

2

당신은 SourceRange SourceRange 클래스 SourceLocation를 반환합니다 getBegin()있다을 반환 명세서에 getSourceRange()를 사용할 수 있습니다.

당신이 https://github.com/eschulte/clang-mutate을 체크 아웃하고 거기에 예를 볼 수 있습니다

...

편집 : 당신이 체크 아웃 할 수 있습니다 됨 Stmt에서 EXPR을 추출하기 위해

는 SO How to get Stmt class object from Expr object in Clang

+0

Stmt 포인터가 없지만 명령문 안에 Expr에 대한 포인터가 있습니다. Expr 포인터를 사용하여 Stmt 포인터로 이동하는 방법이 있습니까? – anirudh

+0

@anirudh - 코드 스 니펫을 표시 할 수 있습니까? 내가 가지고있는 것을 이해하는지 모르겠습니다. – ekeren

관련 문제