일본 한달살이 19일차 (5월 16일)

아침은 간단하게 고기 먹었다.

점심은 적당히 먹었고, 저녁은 사온 카레에 고기추가해서 먹었다.


작업 일지

SWC minifier 버그 수정 1

repro를 클론해서 디버깅용 로그를 여기저기 추가했다. 그러다가 CSL.parseXml이라는 함수에 console.log를 추가하니까 작동했다. 이것은 CSL.parseXml 압축이 잘못되었고, console.log로 인해 해당 함수 내의 변수 분석 결과가 바뀌면 버그가 사라진다는 의미이므로, 저 함수만 보면 된다.

저 함수만 떼와서 테스트 케이스를 만들었다.

아예

return [][0];

이 생겨버린다. 디버깅을 해보니

    var _obj = { children: [] };
    var _stack = [_obj.children];
    // 처리 코드

    return _obj.children[0];

에서 hoist_props 패스가 _obj_obj_children 으로 바꾸고 배열 inlining 과정에서 var _stack = [_obj_children]; 를 고려하지 않는 게 문제였다. [_obj_children] 을 고려하게 바꾸니까 이슈가 해결됐다.

SWC Minifier 버그 수정 2

hoist_props 패스가 eval의 존재 여부를 따지지 않고 변수를 추가해버려서 발생하는 문제였다.

swc_core PR 업데이트

이슈 몇개 triage하다가 minifier PR들이 머지됐길래 swc_core 버전 업데이트 PR에 관련된 패치들을 추가했다.

@swc/core 패키지 정리

swc 메인 레포지토리를 제대로 된 모노레포로 만들기 위한 PR이다.

터보팩 Tree shaking PR

  function sendReady(): Promise<void> {
    const length = Buffer.from([0, 0, 0, 0]);
    return new Promise((resolve, reject) => {
      socket.write(length, (err) => {
        console.trace(`sendReady callback 1 ${err}`)
        process.stderr.write(`TURBOPACK_OUTPUT_D\n`);
        process.stdout.write(`TURBOPACK_OUTPUT_D\n`);

        console.trace(`sendReady callback 2 ${err}`)

        if (err != null) {
          reject(err);
        } else {
          resolve();
        console.trace(`sendReady callback done`)
        }
      });
    });
  }

디버깅을 위해서 로그를 추가하다가 process.stdout.write 이 아예 반환을 하지 않는다는 것을 알게 됐다.