• Koichi ITO's avatar
    Make `Array#*` the CRuby compatible behavior when giving a string argument · 182096d8
    Koichi ITO authored
    ## Summary
    
    This following is a behavior from CRuby 1.8.7 to 3.1.0.
    
    ```console
    % ruby -ve "p ['a', 'b', 'c']*''"
    ruby 1.8.7 (2013-12-22 patchlevel 375) [i686-darwin13.0.2]
    "abc"
    
    % ruby -ve "p ['a', 'b', 'c']*''"
    ruby 3.1.0p0 (2021-12-25 revision fb4df44d16) [x86_64-darwin19]
    "abc"
    ```
    
    ### Before (mruby 3.0.0)
    
    mruby unexpectedly gives the TypeError.
    
    ```ruby
    ['a', 'b', 'c']*'' #=> String cannot be converted to Integer (TypeError)
    ```
    
    ### After
    
    This PR makes mruby behave compatible with CRuby.
    
    ```ruby
    ['a', 'b', 'c']*'' #=> 'abc'
    ```
    
    As far as I checked, the behavior is unspecified when `Array#*`'s argument
    is not an instance of Integer class in X 3017 : 2013 (ISO/IEC 30170 : 2012).
    
    ## Additional Information
    
    I noticed this difference by the following idiom when writing ASCII art code
    using Ruby.
    
    ```ruby
    %w(foo bar baz)*''
    ```
    
    e.g. TRICK (https://github.com/tric)
    182096d8
array.rb 11.3 KB