ruby-trunk-changes r50373 - r50382

今日は主に Windows の VC の新しいバージョンへの対応がありました。

kazu: r50373 2015-04-23 22:17:06 +0900

r50372 の ChangeLog エントリの typo 修正。

naruse: r50374 2015-04-24 04:51:18 +0900

Windows 版の MSVC 14 向けの修正。新しいコンパイラおよび runtime のサポートのための変更がいくつか続きます。 tzname や daylight というシンボルが _tzname と _daylight と改名されていたそうでマクロで別名を定義するようにしているようです。 また win32/rtname.cmd で vcruntime140.dll に対応するようにしています。

svn: r50375 2015-04-24 04:51:37 +0900

version.h の日付更新。

ko1: r50376 2015-04-24 05:40:19 +0900

gc.c で gc_mark_roots() で PRINT_ROOT_TICKS が有効な時のデバッグ用の出力を atexit(3) で登録する処理を前に移動して、また USE_TICK_T の条件として PRINT_ROOT_TICKS も追加しています。

naruse: r50377 2015-04-24 07:58:05 +0900

Windows 版の dupfd() や rb_w32_wopen() で _osfile() というマクロ(?)を利用して fd のフラグをセットしていたのを _set_osflags() を利用するように修正しています。これも MSVC14 向けの修正の一貫だと思われます。

naruse: r50378 2015-04-24 07:58:11 +0900

これも MSVC14 向けの修正です。 Windows で stdio の FILE 構造体の内容をのぞき見て利用していたところが遮蔽されるようになったそうなので、vcruntime_file という型を定義して共用体を利用して内容を取得するようにしています。なんか union の使いかたが知らない方法のような。なんだろこれ。
また _filbuf() と _flsbuf() というマクロ? 関数? が MSVC14 でなくなったそうで替わりに _fgetc_nolock() と _fputc_nolock() を利用するようにしています。

naruse: r50379 2015-04-24 08:41:10 +0900

同じく MSVC14 向けの対応のための準備かもしれないと思いますが、Windows の IO で排他処理のために EnterCriticalSection()/LeaveCriticalSection() を呼び出す部分を rb_acrt_lowio_lock_fh()/rb_acrt_lowio_unlock_fh() というマクロに括り出すリファクタリング

naruse: r50380 2015-04-24 08:41:16 +0900

bcc でのビルドは既にサポートをやめている(bcc ディレクトリは削除済み)ので win32/win32.c に残っていた #ifdef __BORLANDC__ なソースコードを削除しています。

usa: r50381 2015-04-24 10:44:12 +0900

win32/win32.c の rb_w32_getc() と rb_w32_putc() を削除しています。Windows 版で getc(3)/getchar(3)/putc(3)/putchar(3)/fgetc(3)/fputc(3) などを独自実装にしていたのをやめています。割り込みまわりの処理の関係で遅くなるのをさけるために独自実装していたのだけどもう今は必要なくなった、というような議論が Twitter 上でされていたような気がします。

nobu: r50382 2015-04-24 13:16:13 +0900

pioinfo_extra という __pioinfo の中の構造体のレイアウトを推測して保持しておく変数の参照は mingw でも必要ということでマクロ定義しています。すごいことしてますね。