lib/opal/nodes/args/kwarg.rb



# frozen_string_literal: true
require 'opal/nodes/args/initialize_kwargs'

module Opal
  module Nodes
    # A node responsible for extracting a
    # single *required* keyword argument
    #
    # def m(kw: )
    #
    class KwargNode < InitializeKwargsNode
      handle :kwarg
      children :lvar_name

      def compile
        key_name = @sexp.meta[:arg_name]

        initialize_kw_args_if_needed

        add_temp lvar_name

        line "if (!Opal.hasOwnProperty.call($kwargs.$$smap, '#{key_name}')) {"
        line "  throw Opal.ArgumentError.$new('missing keyword: #{key_name}');"
        line "}"
        line "#{lvar_name} = $kwargs.$$smap[#{key_name.to_s.inspect}];"

        scope.used_kwargs << key_name
      end
    end
  end
end