Sha256: f4ed09672ebf61373bbd6ee7224ecde5867c925a330d0f0e83d458574a12f24c

Contents?: true

Size: 888 Bytes

Versions: 15

Compression:

Stored size: 888 Bytes

Contents

require 'opal/nodes/args/initialize_kwargs'

module Opal
  module Nodes
    # A node responsible for extracting a
    # keyword splat argument
    #
    # def m(**kwrest)
    # def m(**)
    #
    class KwrestArgNode < InitializeKwargsNode
      handle :kwrestarg

      def compile
        initialize_kw_args_if_needed

        kwrestarg_name = @sexp[1]
        extract_code = "Opal.kwrestargs($kwargs, #{used_kwargs});"

        # kwrestarg can be blank def m(**) end
        # we need to perform assignment only for named kwrestarg
        if kwrestarg_name
          var_name = variable(kwrestarg_name.to_sym)
          add_temp var_name

          line "#{var_name} = #{extract_code}"
        end
      end

      def used_kwargs
        args = scope.used_kwargs.map do |arg_name|
          "'#{arg_name}': true"
        end

        "{#{args.join ','}}"
      end
    end
  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
opal-0.10.6 lib/opal/nodes/args/kwrestarg.rb
opal-0.10.6.beta lib/opal/nodes/args/kwrestarg.rb
opal-0.10.5 lib/opal/nodes/args/kwrestarg.rb
opal-0.10.4 lib/opal/nodes/args/kwrestarg.rb
opal-0.10.3 lib/opal/nodes/args/kwrestarg.rb
opal-0.10.2 lib/opal/nodes/args/kwrestarg.rb
opal-0.10.1 lib/opal/nodes/args/kwrestarg.rb
opal-0.10.0 lib/opal/nodes/args/kwrestarg.rb
opal-0.10.0.rc2 lib/opal/nodes/args/kwrestarg.rb
opal-0.10.0.rc1 lib/opal/nodes/args/kwrestarg.rb
opal-0.10.0.beta5 lib/opal/nodes/args/kwrestarg.rb
opal-0.10.0.beta4 lib/opal/nodes/args/kwrestarg.rb
opal-0.10.0.beta3 lib/opal/nodes/args/kwrestarg.rb
opal-0.10.0.beta2 lib/opal/nodes/args/kwrestarg.rb
opal-0.10.0.beta1 lib/opal/nodes/args/kwrestarg.rb