Sha256: c5186cddae8189a85bb0373a3b4702a656acfdb582d1ce81545a22d33bb6e7d7

Contents?: true

Size: 1.82 KB

Versions: 21

Compression:

Stored size: 1.82 KB

Contents

module Ruby2JS
  class Converter

    # (begin
    #   (...)
    #   (...))

    handle :begin do |*statements|
      state = @state
      props = false

      if state == :expression and statements.empty?
        puts 'null'
        return
      end

      statements.map! do |statement|
        case statement and statement.type
        when :defs, :defp
          props = true
          @ast = statement
          transform_defs(*statement.children)
        when :prop
          props = true
          statement
        else
          statement
        end
      end

      if props
        combine_properties(statements) if props
        statements.compact!
      end

      parse_all(*statements, state: state, join: @sep)
    end

    def combine_properties(body)
      (0...body.length-1).each do |i|
        next unless body[i] and body[i].type == :prop
        (i+1...body.length).each do |j|
          break unless body[j] and body[j].type == :prop

          if body[i].children[0] == body[j].children[0]
            # relocate property comment to first method
            [body[i], body[j]].each do |node|
              unless @comments[node].empty?
                node.children[1].values.first.each do |key, value| 
                  if [:get, :set].include? key and Parser::AST::Node === value
                    @comments[value] = @comments[node]
                    break
                  end
                end
              end
            end

            # merge properties
            merge = Hash[(body[i].children[1].to_a+body[j].children[1].to_a).
              group_by {|name, value| name.to_s}.map {|name, values|
              [name, values.map(&:last).reduce(:merge)]}]
            body[j] = s(:prop, body[j].children[0], merge)
            body[i] = nil
            break
          end
        end
      end
    end
  end
end

Version data entries

21 entries across 21 versions & 1 rubygems

Version Path
ruby2js-5.1.1 lib/ruby2js/converter/begin.rb
ruby2js-5.1.0 lib/ruby2js/converter/begin.rb
ruby2js-5.0.1 lib/ruby2js/converter/begin.rb
ruby2js-5.0.0 lib/ruby2js/converter/begin.rb
ruby2js-4.2.2 lib/ruby2js/converter/begin.rb
ruby2js-4.2.1 lib/ruby2js/converter/begin.rb
ruby2js-4.2.0 lib/ruby2js/converter/begin.rb
ruby2js-4.1.7 lib/ruby2js/converter/begin.rb
ruby2js-4.1.6 lib/ruby2js/converter/begin.rb
ruby2js-4.1.5 lib/ruby2js/converter/begin.rb
ruby2js-4.1.4 lib/ruby2js/converter/begin.rb
ruby2js-4.1.3 lib/ruby2js/converter/begin.rb
ruby2js-4.1.2 lib/ruby2js/converter/begin.rb
ruby2js-4.1.1 lib/ruby2js/converter/begin.rb
ruby2js-4.1.0 lib/ruby2js/converter/begin.rb
ruby2js-4.0.5 lib/ruby2js/converter/begin.rb
ruby2js-4.0.4 lib/ruby2js/converter/begin.rb
ruby2js-4.0.3 lib/ruby2js/converter/begin.rb
ruby2js-4.0.2 lib/ruby2js/converter/begin.rb
ruby2js-4.0.1 lib/ruby2js/converter/begin.rb