コンパイラ作成(53) 負数の計算

今回の目標

前回、不十分だった負数の計算を確かめるよ。

// 負数
int main()
{
    printf("%d\n",(10-20)/2);
}

この計算が間違ってたと思うよ。

古いバージョンでテスト

一個前のバージョンでテストしてみる。

~/myc$ git worktree add old HEAD^
Preparing old (identifier old)
HEAD is now at 3725e47 引数のある関数の定義に対応
~/myc$ cd old
~/myc/old$ cp ../i32.myc .
~/myc/old$ ./myc.rb i32.myc
~/myc/old$ ./i32
2147483643
~/myc/old$ cd ..
~/myc$ rm -r old
~/myc$ git worktree prune
~/myc$ 

gitで一個古いバージョンを取り出して試してみたら見事計算結果が間違ってたよ。gitを上手く使うとこういうテストが簡単にできるのは良いね。使った古いバージョンは即削除。そうしないとゴミが残って後でこれ必要なものだったっけって悩むことになるからね。

新しいバージョンでテスト

負数の計算に対応したバージョンで同じのをコンパイルしてみるよ。

~/myc$ myc i32.myc
~/myc$ ./i32
-5
~/myc$

計算結果が正しくなったよ。本当は昨日の内にここまでやりたかったんだけど、頭が働かなくてだめだったよ。さて次は何やろうかな。