Sha256: b162a61ce7b3687489a868ed6eb07c17a522cd67a9e5e83cda03820519e2cc0f

Contents?: true

Size: 1.22 KB

Versions: 25

Compression:

Stored size: 1.22 KB

Contents

require 'opal/nodes/base'

module Opal
  module Nodes
    # FIXME: needs rewrite
    class ArglistNode < Base
      handle :arglist

      def compile
        code, work = [], []

        children.each do |current|
          splat = current.first == :splat
          arg   = expr(current)

          if splat
            if work.empty?
              if code.empty?
                code << fragment("[].concat(")
                code << arg
                code << fragment(")")
              else
                code += ".concat(#{arg})"
              end
            else
              if code.empty?
                code << [fragment("["), work, fragment("]")]
              else
                code << [fragment(".concat(["), work, fragment("])")]
              end

              code << [fragment(".concat("), arg, fragment(")")]
            end

            work = []
          else
            work << fragment(", ") unless work.empty?
            work << arg
          end
        end

        unless work.empty?
          join = work

          if code.empty?
            code = join
          else
            code << fragment(".concat(") << join << fragment(")")
          end
        end

        push(*code)
      end
    end
  end
end

Version data entries

25 entries across 25 versions & 3 rubygems

Version Path
opal-0.8.1 lib/opal/nodes/arglist.rb
opal-0.8.1.rc1 lib/opal/nodes/arglist.rb
opal-wedge-0.9.0.dev lib/opal/nodes/arglist.rb
opal-0.8.0 lib/opal/nodes/arglist.rb
opal-0.8.0.rc3 lib/opal/nodes/arglist.rb
opal-0.8.0.rc2 lib/opal/nodes/arglist.rb
opal-0.8.0.rc1 lib/opal/nodes/arglist.rb
opal-0.8.0.beta1 lib/opal/nodes/arglist.rb
opal-0.7.2 lib/opal/nodes/arglist.rb
opal-0.7.1 lib/opal/nodes/arglist.rb
opal-0.7.0 lib/opal/nodes/arglist.rb
opal-0.7.0.rc1 lib/opal/nodes/arglist.rb
opal-0.7.0.beta3 lib/opal/nodes/arglist.rb
opal-0.6.3 lib/opal/nodes/arglist.rb
opal-0.7.0.beta2 lib/opal/nodes/arglist.rb
opal-cj-0.7.0.beta2 lib/opal/nodes/arglist.rb
opal-cj-0.7.0.beta1 lib/opal/nodes/arglist.rb
opal-0.7.0.beta1 lib/opal/nodes/arglist.rb
opal-0.6.2 lib/opal/nodes/arglist.rb
opal-0.6.1 lib/opal/nodes/arglist.rb