2007-06-01から1ヶ月間の記事一覧

bjam_dump

デバッガでbjamの変数を見ていると、クラスのオブジェクトを辿るのが面倒だったので、変数の内容をHTMLに出力して、オブジェクトらしき文字列を見つけたらリンクを張るツールbjam_dumpを作りました。 出力されるHTMLは次のようになります。 name values __fi…

BBv2解析メモ その1

Jambase bjam実行ファイルに組み込み ARGV[0]にbjamが含まれているかBOOST_ROOTが定義(BBv1互換)されていればbjamモード、それ以外の場合はjamモード 作業ディレクトリからルートへ向かって順にboost-build.jamを検索する 見つからない場合はBBv1互換のためB…

Boost.Optional on Visual Studio IDE

以前書いた、Boost.Optionalの中身がVisual Studioのデバッガで覗けなくて不便という件ですが、調べたらそのものズバリな話題が少し前にMLに投稿されていました。 boost::optional<*>{ preview ( #if( !$c.m_initialized ) ( #( "Uninitialized" ) ) #else (…

パース成功

ようやくBBv2が動くようになりました。(パースフェーズのみ) 最後に引っかかったのはtypoでした。 以下、修正箇所です。 actionsのみ設定されたルールの呼び出しに対応 正規表現のエスケープ処理を修正 置換ミスでruleがrule_nocalcになっていたのを修正 あ…

型チェック

BBv2でテストしていたところ、ルールの引数に型チェックの機能があることを知りました。 class.jamのテストを参考に名前と書式から想像して、 import "class" : new ; class class_a { rule __init__ { } } class class_b { rule __init__ { } } # class_aの…

続 正規表現の差異

またもや正規表現の仕様の違いでハマりました。 Bjamの正規表現はドキュメントにはegrepのものと書いてあって、実際には拡張POSIX表現の一部を含んでいます。 それで、Boost.Regexのフォーマットにextendedを指定していたのですが、重大な違いがありました。…

正規表現の差異

ルール名の検索周りの修正とorderモジュールの実装をしました。 orderモジュール ネイティブルールはこれで全部です。 今日ハマったのは次の正規表現です。 ([Jj]amfile(.jam|.v2|)|user-config.jam|site-config.jam|project-root.jam)"|"の候補に空文字列が…

ネイティブルール実装中

BBv2でテストしながら、ネイティブルールを実装中です。 今日は以下のモジュールを実装しました。 sequence set path property-set テストで文法や組み込みルールのバグや未実装項目も見つかったので、あわせて対応しています。 BINDRULEの呼び出しに対応 イ…

regexモジュール

BBv2のjamファイルでテストしつつバグをつぶしていったところ、ようやく次のメッセージまで辿り着きました。 error: missing native rule 'regex.transform' error: or interface version of that rule is too low error: your version of bjam is likely ou…

マルチスレッドと環境変数

BBv2のjamファイルでテストしようと思ったら、環境変数をサポートしていなくて全然動きませんでした。 というわけでbjam::contextに環境変数を追加しました。 get_environment_strings() predefined_variables.hppの差分 環境変数の一覧は、WindowsではGetEn…

NATIVE_RULE

BACKTRACEの修正とネイティブルール関連処理の追加を行いました。 ルール呼び出し時の行番号設定忘れを修正 再帰的なルール呼び出しで行番号がずれる問題を修正 rule_definitionをshared_ptrでなく、そのまま管理するように変更 組み込みルール"NATIVE_RULE"…

line_counting_iterator

position_iteratorの代用品としてline_counting_iteratorを作りました。 <hamigaki/iterator/line_counting_iterator.hpp> Boost.Spiritのposition_iteratorにはファイル名が邪魔という以外にも、BidirectionalやRandom Accessの反復子に適用すると、iterator_categoryが継承されるにも関わらず--や+=で行番</hamigaki/iterator/line_counting_iterator.hpp>…

続 BACKTRACE

line_counting_iteratorが出来たので、bjam_grammarで使っていたposition_iteratorをline_counting_iteratorで置き換えました。 差分 ついでにインクルードの前後でフレームのファイル名が切り替わるように修正しました。

BACKTRACE

ひとまずposition_iteratorを使って行番号を計算し、BACKTRACEルールを実装しました。 今日の差分 ビルドを通しただけで動作確認すらできていませんが、とりあえず昨日までのテストケースに影響ないのでコミットしました。 いい加減な実装なので、おそらくル…

行数のカウント

引き続き、組み込みルールを実装中です。 UPDATE DELETE_MODULE CALLER_MODULE 現在、コールスタックを返すBACKTRACEルールを実装しているところなのですが、これまで行数をカウントしていなくて、どう実装すべきか悩んでいます。 Boost.Spirit的には、反復…

REG_EXPAND_SZ

W32_GETREGとSHELL/COMMANDを実装しました。 SHELLとCOMMANDコマンドは同じもので、コマンドシェルを起動して標準出力の結果を返すルールです。 これは、Hamigaki.Processを使えば簡単に実装できます。 一方、W32_GETREGはレジストリの読み出しを行う組み込…

Fedora7に移行

Linuxテスト環境をインストールしたっきりすっかり忘れていたFedora7に移行しました。 Fedora7付属のBoostは残念ながら1.33.1なのですが、1.34のアーカイブを展開して、BBv2の環境を整えました。 ↓久々のRegression Testsの結果です。 http://hamigaki.sourc…

アーカイブとビルド

Cygwinでのbjamの挙動が変だったので調査しました。 どうもCygwinのbjam(BBv1)でライブラリをビルドし、それをリンクする実行ファイルがあった場合、ライブラリのソースが一切変更されていなくても常にビルドされてしまいます。 これだと、Hamigaki.Bjamのよ…

組み込みルール実装中

ひたすらbjamの組み込みルールを実装していました。 組み込みルールPWDとSORTを追加 組み込みルールNORMALIZE_PATHを追加 組み込みルールCALCを追加 ALWAYS等、ターゲットのフラグを設定するルールを追加 これだけ実装してもまだ半分ぐらいです。 現在、DEPE…

MATCH再び

bjamの文法はほとんど実装できたので、組み込みルールを実装しています。 今日はGLOB、GLOB-RECURSIVELY、MATCHを実装しました。 GLOB、GLOB-RECURSIVELYの差分 MATCHの差分 どれも旧バージョンで一度実装していますが、POSIX対応で若干修正が入っています。…

get_message_iterator

なんとなくWindowsのメッセージループを反復子にするアイデアを思いついたので書いてみました。 役に立つかは不明です。 以下、コード。

事前定義変数

bjam_grammarに事前定義変数を追加しました。 差分 以前のバージョンと違い、今回はLinuxでも動かないとダメなので、JAMUNAME等POSIX用の機能にも対応しています。 さて、事前定義変数を実装していて奇妙な仕様を見つけました。 bootstrap.jamで、 if $(JAM_…

include

予定通り、bjam_grammarにinclude文を実装しました。 差分 bjamのincludeはLOCATEとSEARCHの2つの変数で制御されます。 インクルードするファイルを決定する際、LOCATEが定義されていればLOCATEのディレクトリだけを探し、SEARCHが定義されている場合はSEAR…

classの実装

bjam_grammarにclassを実装しました。 class文の差分 組み込みルールINSTANCEの差分 class作成時に実際にやっていることは、 「class@クラス名」のモジュールを作る モジュール内に変数__name__(クラス名)と__bases__(基底クラス名のリスト)を設定する 基底…

RULENAMES/VARNAMES/IMPORT

タイトル通り、組み込みルールRULENAMES/VARNAMES/IMPORTを実装しました。 RULENAMES/VARNAMESの差分 IMPORTの差分 RULENAMESはモジュール内のルール名のリストを返すルールで、VARNAMESはそれの変数名バージョンです。 一方、IMPORTは他のモジュールからル…

eval_with_variables_d

今日はコードの整理と実装し忘れていたローカル変数の実装をしました。 差分 bjamではローカル変数の宣言以降の文を評価する間、変数をすりかえることで実装しているので、eval_with_variables_dディレクティブを用意しました。 local_set_stmt = keyword_p(…

eval_on_target_d

ターゲット関連の文法を実装しました。 ターゲット指定付き代入文を実装 on文を実装 funcルールのターゲット指定に対応 代入文は代入先の変数テーブルを換えるだけですが、残り2つはターゲットの指定が再帰的に適用されるため、module文のときと同じように…

switch文の実装

bjam_grammarにswitch文を実装しました。 差分 セマンティックアクションを付ける前は、 switch_stmt = keyword_p("switch") >> list >> keyword_p("{") >> cases >> keyword_p("}") ; cases = *case_ ; case_ = keyword_p("case") >> arg_p >> keyword_p(":…

テスト追加

bjamで式や文が全て値を持つということを踏まえ、ルールの戻り値の仕組みを変えました。 これまで戻り値はフレーム情報に持たせていましたが、bjam_grammar自体にクロージャを設定して、それを戻り値として使うようにしました。 これに伴い、parse_bjam_gram…

ルールの戻り値

ルール展開とルール名に対する変数展開を実装しました。 今日の差分 ルール展開の仕様を調べていて、ルールの戻り値の扱いが想像していたものとかなり違うことが分かりました。 bjamでは、他のいくつかのスクリプト言語のように最後に評価した式/文/ブロック…