ruby-trunk-changes r40634 - r40646

今日は文字列リテラル内の変数埋め込み構文で不正な変数名をエラーにせずただの文字列にする変更と、Socket.getifaddrs という新しいメソッドの追加がありました。

nobu:r40634 2013-05-10 23:56:37 +0900

r38034 のあたりで構文解析時の lexer の状態を定数からビットフラグに変更した際に、状態のチェックに IS_lex_state_for() というマクロでチェックするようにしていたのをキーワード引数関係の部分でも利用するようにしています。まだフラグが必要ない状態のところは直接比較していたので、この後のコミットのためのリファクタリングかと思いましたが、どうも関係なさそうですね。

nobu:r40635 2013-05-10 23:56:40 +0900

r40607 で文字列リテラル内の #$var, #@var, #@@var のような変数の展開の構文で変数名のところに変数名として使えない記号などが表われた時にエラーになるように修正していたのですが、まつもとさんがその場合は単に文字列として解釈するようにして欲しいというオーダーがあって再修正しています。 [ruby-core:54885] [Bug #8375]

akr:r40636 2013-05-11 00:49:56 +0900

gc.h でマシンスタックの伸長方向についての判定のためのマクロ定義にインラインアセンブラを使っているため、条件コンパイルで分岐しているところの条件に defined(_ILD32) を追加しています。 x32 という x86_64 だけどポインタが 32bit のアーキテクチャで動作できるようにしているそうです。

svn:r40637 2013-05-11 00:50:02 +0900

version.h の日付更新。

akr:r40638 2013-05-11 11:50:35 +0900

IO#fcntl でファイルロックのテストをするテストメソッドを x86_64-linux アーキテクチャのみで実行していたのですが x32 という x86_64 だけどポインタが 32bit のアーキテクチャではスキップするようにしています。

akr:r40639 2013-05-11 17:32:26 +0900

拡張ライブラリ socket に Socket.getifaddrs というメソッドを新設しています。 これは getifaddrs(3) のラッパで、Socket::Ifaddr というネットワークインタフェースの情報を保持するクラスを追加してその配列を返すようにしています。これによりローカルアドレスとそのネットワークインタフェースの対応やネットマスク、Macアドレスの対応などがわかるようになります。 ifconfig の結果を parse してゴニョゴニョやってたりしたのが簡単にできるようになるんじゃないかと思います。 [ruby-core:54777] [Feature #8368]

nobu:r40640 2013-05-11 17:50:40 +0900

r40639 で新規追加されたファイルの svn property 設定。

akr:r40641 2013-05-11 19:20:38 +0900

NEWS ファイルに r40639 で追加した Socket.getifaddrs を新機能として追記しています。

naruse:r40642 2013-05-11 19:51:22 +0900

r39930 で Rinda::RingServer のテストで IPv6ローカルアドレスを除外しようとして Socket.ip_address_list を使っていたところを追加された Socket.getifaddrs で書き換えています。

akr:r40643 2013-05-11 21:02:08 +0900

r40642 で書き替えた Rinda::RingServer のテストに Socket.getifaddrs を使ったところでデバッグ用の p での出力を追加しています。 Travis-CI でエラーになったのでその調査の為とのこと。

akr:r40644 2013-05-11 22:04:39 +0900

拡張ライブラリ socket の ext/socket/raddrinfo.c でコンパイラの警告除去のため socklen_t 型のサイズの比較演算子による条件に明示的キャストを追加しています。

akr:r40645 2013-05-11 22:08:59 +0900

r40642 で Rinda::RingServer のテストに Socket.getifaddrs を使ったのが Travis-CI で失敗していた件の修正。OpenVZ の venet0 インタフェースは Socket::Ifaddr の addr が nil でかえってくることがあったので、スキップするようにしています。不要になったデバッグプリントを消しています。

naruse:r40646 2013-05-11 23:07:20 +0900

拡張ライブラリ socket で r40639 で Socket.getifaddrs の追加のために Socket::Addrinfo の実装に追加した struct sockaddr_dl を利用したコードが Windows の MSVC では strct sockaddr_dl が存在するものの内容が異なるようでコンパイルエラーになるため、構造体が存在しないものとして扱うように ext/socket/rubysocket.h で HAVE_TYPE_STRUCT_SOCKADDR_DL マクロを削除するようにしています。