Closed thom17 closed 5 months ago
get_definition의 동작 원리는 node.referenced 를 기반으로 완성된 body를 찾아가는 것 같다. Expr과 같은 어떠한 메서드를 호출하는 경우 호출하는 메서드에 대한 선언 식 (헤더)가 referenced에 등록된다. 이를 get_definition 을 호출 할 경우 찾아지는 경우에 원본의 node.get_definifition이 동작한다.
'node->ref->def == node->def'
허나 항상 ref가 헤더 def가 cpp 인 건 아니다. (ref 가 cpp인 경우 확인함. 아마도 동일 파일 코드나 cpp 인라인 함수?)
무튼 이로서 call 관계 정보 개선을 위해서는 ref를 반영해야하며 이는 메서드의 시그니쳐 정규화가 필요하다. (추후에 oms 를 통해 업데이트 하면 그만이니까)
SrcName 관련하여 에러가 발생
SrcName 관련 하여 전체적인 태스트 진행 jupyter/all_node_test.ipynb
이 문제는 커밋 내용에서 진행 중
하나의 Node에 대하여
is_def = node.is_definition
is_dec = node.klind.is_declaration
if is_def:
assert is_dec, "Definition Node이면서 dec 노드가 아닐 수 는 없다."
Token을 사용하여 head와 cpp의 시그니쳐 통일
문자+문자 사이는 공백 기호가 조합된 경우 붙여서 출력 (문자+기호 / 기호+기호) 하나의 Argment가 완료된후 ", " 추가 기본 값 정보는 없음
이로서 완성되지 않은 (get_definifition)으로 추적할 수 없는 노드도 src_name은 추적이 가능해짐. To do : 다음 할일은 이미 생성된 노드에 대하여 갱신 기능 필요
Clang을 통한 srcName 처리 이력
1. Best는
clangCursor.displayname
으로 시그니처를 처리 (가장 간단)std
와 같은 기본 및 외부 라이브러리가 인식되지 않을 경우int
로 출력됨2. 파일의 시그니처 부분을 직접 읽어서 파싱
cpp
/.h 파일 중 선택이 필요함const int* pData, int x
vsconst int * pData , int y
*
의 위치와 같은 사소한 문제는 발생 가능따라서
clangCursor.get_definition()
을 사용하기로 함.cpp
중 한 곳에서만 완전한 메서드 정의가 이루어짐.CToothDoc* GetToothDoc() { return _pToothDoc; }
get_definition
을 사용하면null
임 (헤더 파일 하나에서는 선언문이 없으니)cpp
에서get_definition
을 사용하여 헤더 측 선언에 접근 가능함따라서
cpp
측은 기본적으로 헤더를 포함하니까 항상get_definition
를 호출하여 이를 기준으로 OMS 맵핑, 즉srcName
을 매핑하기로 함.