class Opal::Nodes::ArrayNode

Public Instance Methods

compile() click to toggle source
# File lib/opal/nodes/array.rb, line 10
def compile
  return push('[]') if children.empty?

  code, work = [], []

  children.each do |child|
    splat = child.type == :splat
    part  = expr(child)

    if splat
      if work.empty?
        if code.empty?
          code << fragment('[].concat(') << part << fragment(')')
        else
          code << fragment('.concat(') << part << fragment(')')
        end
      else
        if code.empty?
          code << fragment('[') << work << fragment(']')
        else
          code << fragment('.concat([') << work << fragment('])')
        end

        code << fragment('.concat(') << part << fragment(')')
      end
      work = []
    else
      work << fragment(', ') unless work.empty?
      work << part
    end
  end

  unless work.empty?
    join = [fragment('['), work, fragment(']')]

    if code.empty?
      code = join
    else
      code.push([fragment('.concat('), join, fragment(')')])
    end
  end

  push code
end