コンパイラを VM で動かす2 - Scheme VM を書く

  • (HALT) の const compile がうまくいっていない => ok
  • #t\0 と出力がおかしい => ok
    • UCS-4 文字列長の扱いが間違っていた
  • コンパイル結果から (CONSTANT () が消えてしまう
    • 正しく read できているか? => できてない
    • read.cpp で #define SCM_SYM_QUOTE Symbol::intern(UCS4_STR("\'")) としていたが Symbol::intern(UCS4_STR("quote")) が正しかった
  • NUMBER_MINUS ではなく NUMBER_ADD が出力されてしまう => ok
    • "+" の read がうまくいかない。
    • Scm_StringToNumber のせいだった
      • strtol を使っているのだけど strtol が "+" に対してエラーではなく 0 を返してしまう。+0 と判断しているみたい。これはハマったよ。。
  • letrec のコンパイルでセグフォ
    • gensym の実装を放置していたから。
    • Gauche と同じ外部仕様にした
  • ファイルパス文字列の出力がおかしい => ok
    • write/display の違いをずっと気づきながら放置していたのでこれを機会にちゃんとやる
    • 文字列のネストが面倒だがテストを書いてから実装した
  • 正規表現リテラルの出力がおかしい。#が抜けている ← いまここ