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
개요
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로 감싼다.

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

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

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

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


'Dev > Contribution' 카테고리의 다른 글
| [RustPython] fcntl.ioctl 수정하기 (1) | 2022.09.01 |
|---|---|
| [RustPython] sslError 클래스에 library, reason 속성 추가하기 (0) | 2022.08.19 |
| [RustPython] Set타입 fn update 수정하기 (0) | 2022.08.07 |
| [RustPython] StopIteration 수정하기 (0) | 2022.08.07 |