BACKTRACE
ひとまずposition_iteratorを使って行番号を計算し、BACKTRACEルールを実装しました。
今日の差分
ビルドを通しただけで動作確認すらできていませんが、とりあえず昨日までのテストケースに影響ないのでコミットしました。
いい加減な実装なので、おそらくルールの引数に別のルールの戻り値を渡すと行番号がずれると思います。
bjam_grammar内ではposition_iteratorを使っていますが、外部インタフェースは
template<class IteratorT> struct HAMIGAKI_BJAM_DECL bjam_grammar_gen { typedef IteratorT iterator_type; static parse_info<IteratorT> parse_bjam_grammar( const iterator_type& first, const iterator_type& last, context& ctx, const std::string& filename, int line); };
のようになっていて、素の反復子を渡せるようにしました。
その結果、bjam_grammarを再帰的に適用する箇所でposition_iteratorを分解することになってしまいました。
使い勝手が悪いので後で直します。
あと、position_iteratorのファイル名って邪魔な気がします。
反復子のコピーが重くなりそうですし、一度設定したら変えることもないので、bjam_grammarの場合はcontextのフレーム情報に持たせておけば十分です。
行末の扱いもbjamと微妙に違うので、そのうち似た自作アダプタに置き換えるつもりです。