ほんとのこと知りたいだけなのに。

夏休みはもうおわり。

babel2 の コンディション

babel2(babel) の condition を眺めてみます。

GitHub - yanqirenshi/babel2: babel をイジって遊ぶためのプロジェクトです。

github.com

コンディションの構成

コンディションの構成(階層)はこんな感じ。

大きくわけて encoding と decoding の二種類あるみたいですね。

                                             +-------+
                                             | error |
                                             +-------+
                                                 |
                                      +------------------------+
                                      | character-coding-error |
                                      +------------------------+
                                                 |
                               +-----------------o------------+
                               |                              |
                    +--------------------------+   +--------------------------+
                    | character-decoding-error |   | character-encoding-error |
                    +--------------------------+   +--------------------------+
                               |
               +---------------o-------------+
               |               |             |
 +---------------------------+ | +------------------------+
 | end-of-input-in-character | | | character-out-of-range |
 +---------------------------+ | +------------------------+
                               |
           +-------------------o----------------------+
           |                                          |             encodings.lisp
 - - - - - | - - - - - - - - - - - - - - - - - - --:--|- - - - - - - - - - - - - - -
           |                  enc-unicode.lisp     :  |               enc-gbk.lisp
           |   +---------------------------+       :  |   +------------------+
           +---| invalid-utf8-starter-byte |       :  +---| invalid-gbk-byte |
           |   +---------------------------+       :  |   +------------------+
           |   +--------------------------------+  :  |   +-----------------------+
           +---| invalid-utf8-continuation-byte |  :  `---| invalid-gbk-character |
           |   +--------------------------------+  :      +-----------------------+
           |   +------------------------+          :
           `---| overlong-utf8-sequence |          :
               +------------------------+          :
symbol parent file
invalid-gbk-byte character-decoding-error enc-gbk.lisp
invalid-gbk-character character-encoding-error enc-gbk.lisp
invalid-utf8-starter-byte character-decoding-error enc-unicode.lisp
invalid-utf8-continuation-byte character-decoding-error enc-unicode.lisp
overlong-utf8-sequence character-decoding-error enc-unicode.lisp
character-coding-error error encodings.lisp
character-encoding-error character-coding-error encodings.lisp
character-decoding-error character-coding-error encodings.lisp
end-of-input-in-character character-decoding-error encodings.lisp
character-out-of-range character-decoding-error encodings.lisp

上の構成図には含めていませんが streams.lisp にもコンディションがあります。
ただ、このコンディションは streams.lisp で閉じられているので上の構成図には入れていません。
(export もされていません)

symbol parent file
in-memory-stream-error stream-error streams.lisp
in-memory-stream-closed-error in-memory-stream-error streams.lisp
wrong-element-type-stream-error stream-error streams.lisp

コンディションを発火させるオペレータ

コンディションを発火させるオペレータハ以下の二つです。

  • encoding-error
  • decoding-error

おわり

朧げですが全体像が掴めました。

これの結果で babel2.conditions を新設してそこにコンディションを分離しました。

また少しコードの見通しが良くなりました。