[ruby-dev:49791] [Ruby trunk Bug#12748] irb の評価結果が2回表示されます

From: dogatana@...
Date: 2016-09-11 09:49:45 UTC
List: ruby-dev #49791
Issue #12748 has been updated by Toshihiko Ichida.


io.c の io_fwrite() に問題があるようです。

この関数内で #ifdef _WIN32 内の、rb_w32_write_console() と、その下の io_binwrite() の両方が呼び出されるために、2回出力されています。
リダイレクトすると片方だけになります。

~~~
  > ruby -e 'p 1'            
  # io_fwrite: rb_w32        
  handle: 14c                
  dwMode: 7                  
  1# io_fwrite: io_binwrite  
  # io_fwrite: rb_w32        
  handle: 14c                
  dwMode: 7                  
                             
  # io_fwrite: io_binwrite   
  1                          
                             
  > ruby -e 'p 1' > dump.txt 
  # io_fwrite: io_binwrite   
  # io_fwrite: io_binwrite  
~~~ 

同様の記述が rb_write_error_str() にもあり、こちらも確認が必要かもしれません。
rb_w32_write_console() と コンソール出力かどうかの判定方法が異なるのが気になります。

win32.c の rb_w32_write_console() を眺めたところ、ENABLE_VIRTUAL_TERMINAL_PROCESSING を判定しているので、色出力を対応するための処理のようですね。
2.4 からの追加でしょうか。



----------------------------------------
Bug #12748: irb の評価結果が2回表示されます
https://bugs.ruby-lang.org/issues/12748#change-60470

* Author: Toshihiko Ichida
* Status: Feedback
* Priority: Normal
* Assignee: 
* ruby -v: ruby 2.4.0preview2 (2016-09-09 trunk 56129) [i386-mswin32_140]  
* Backport: 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN
----------------------------------------
irbを実行すると次のように評価結果が2回表示されます。
副作用のある呼び出しをしても副作用そのものは1回だけ実行されているので、表示上だけの問題でないかと思います。

作成: Visual Studio 2015 Community
実行: Windows 10 Pro 64bit


~~~
*****@*****-PC C:\usr\local\bin          
> irb                                    
irb(main):001:0> irb(main):001:0> 1      
=> 1                                     
=> 1                                     
irb(main):002:0> irb(main):002:0> 1 + 2  
=> 3                                     
=> 3                                     
irb(main):003:0> irb(main):003:0> "ruby" 
=> "ruby"                                
=> "ruby"                                
irb(main):004:0> irb(main):004:0> exit  
~~~ 



-- 
https://bugs.ruby-lang.org/

In This Thread

Prev Next