TaeGit
TaeGit
TaeGit
전체 방문자
오늘
어제
  • 분류 전체보기 (26)
    • Dev (26)
      • Language (8)
      • Blockchain (11)
      • Contribution (5)
      • Review (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • GitHub

인기 글

태그

  • nft
  • Metaplex
  • Candy Machine
  • contribution
  • Rust 프로그래밍
  • Rust Programming
  • DAPP
  • Solana
  • Block chain
  • Rust

최근 댓글

최근 글

hELLO · Designed By 정상우.
TaeGit

TaeGit

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

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

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

 

개요

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
    'Dev/Contribution' 카테고리의 다른 글
    • [RustPython] fcntl.ioctl 수정하기
    • [RustPython] sslError 클래스에 library, reason 속성 추가하기
    • [RustPython] Set타입 fn update 수정하기
    • [RustPython] StopIteration 수정하기
    TaeGit
    TaeGit

    티스토리툴바