Sha256: c2d2bd6d4cc93c39c9fd5551da9a24cb71c0b1b5c47550e769dd387eb4f331d0

Contents?: true

Size: 1.05 KB

Versions: 13

Compression:

Stored size: 1.05 KB

Contents

# frozen_string_literal: true

require 'opal/nodes/base'

module Opal
  module Nodes
    module Args
      # This node is responsible for extracting a splat argument from post-arguments
      #
      # args_to_keep is the number of required post-arguments
      #
      #   def m(*a, b, c, d); end
      # becomes something like:
      #   a = post_args[0..-3]
      #   post_args = post_args[-3..-1]
      #
      class ExtractRestarg < Base
        handle :extract_restarg
        children :name, :args_to_keep

        def compile
          if name
            add_temp name

            if args_to_keep == 0
              # no post-args, we are free to grab everything
              line "#{name} = $post_args;"
            else
              line "#{name} = $post_args.splice(0, $post_args.length - #{args_to_keep});"
            end
          elsif args_to_keep != 0
            # def m(*, a)
            # We still have to "cut" our splat
            line "$post_args.splice(0, $post_args.length - #{args_to_keep});"
          end
        end
      end
    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
opal-1.2.0 lib/opal/nodes/args/extract_restarg.rb
opal-1.2.0.beta1 lib/opal/nodes/args/extract_restarg.rb
opal-1.1.1 lib/opal/nodes/args/extract_restarg.rb
opal-1.1.1.rc1 lib/opal/nodes/args/extract_restarg.rb
opal-1.1.0 lib/opal/nodes/args/extract_restarg.rb
opal-1.1.0.rc1 lib/opal/nodes/args/extract_restarg.rb
opal-1.0.5 lib/opal/nodes/args/extract_restarg.rb
opal-1.0.4 lib/opal/nodes/args/extract_restarg.rb
opal-1.0.3 lib/opal/nodes/args/extract_restarg.rb
opal-1.0.2 lib/opal/nodes/args/extract_restarg.rb
opal-1.0.1 lib/opal/nodes/args/extract_restarg.rb
opal-1.0.0 lib/opal/nodes/args/extract_restarg.rb
opal-1.0.0.beta1 lib/opal/nodes/args/extract_restarg.rb