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

Merged PR

Update traceback.tb_next to be writable


개요

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


과정

분석

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


수정

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

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

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

추가로, 그 외의 traceback의 next 변수를 사용해서 영향받는 코드들을 고쳐 준다. PyMutex는 Rust의 Mutex를 감싸는 타입이며, Mutex가 갖고 있는 값을 얻기 위해선 기본적으로 아래처럼 .lock() 을 호출해야 한다. 4.png

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

6.png