babel2(babel) の condition を眺めてみます。
GitHub - yanqirenshi/babel2: babel をイジって遊ぶためのプロジェクトです。
コンディションの構成
コンディションの構成(階層)はこんな感じ。
大きくわけて 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
を新設してそこにコンディションを分離しました。
また少しコードの見通しが良くなりました。