Dev/Contribution

[RustPython] traceback.tb_next mutable 하게 만들기

TaeGit 2022. 8. 21. 22:41

Merged PR

  • Update traceback.tb_next to be writable.
 

Update `traceback.tb_next` to be writable. by tgsong827 · Pull Request #4087 · RustPython/RustPython

Resolves #3857

github.com

 

개요

tracebacktb_next라는 속성을 갖고 있다.
tb_next 속성은 read 하는 것만 가능했고, 이를 writable 하게 만든 내용이다.

 

과정

분석

RustPython에서 tracback을 구현하는 Rust 구조체는 PyTraceback이다.
PyTracebacktb_next 메소드를 갖고 있는데, 이는 tb_next 속성을 호출할 때 사용된다.
tb_next 메소드를 호출하게 되면 PyTraceback 갖고있는 Option<PyTracebackRef> 타입의 next 값을 반환한다.
이렇게, tb_next 속성을 호출해 값을 get 하는 구현이 있지만, tb_next 속성에 값을 set 하는 구현은 없다.

 

수정

먼저, PyTraceback 구조체가 갖고 있는 next 변수를 mutable하게 만들기 위해 PyMutex로 감싼다.

 

생성자에서도 PyMutex를 이용해 아래와 같이 바꿔준다.

 

그리고, tb_next 속성을 호출하는 함수를 수정하고, setter 함수를 만들어 준다.

 

추가로, 그 외의 tracebacknext 변수를 사용해서 영향받는 코드들을 고쳐 준다.


PyMutexRustMutex를 감싸는 타입이며,
Mutex가 갖고 있는 값을 얻기 위해선 기본적으로 아래처럼 .lock() 을 호출해야 한다.

 

마지막으로, 관련된 실패 테스트 코드들을 테스트한 후 주석을 제거해 마무리한다.