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 |