lib/opal/nodes/args/extract_kwoptarg.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true

require 'opal/nodes/base'

module Opal
  module Nodes
    module Args
      # This node is responsible for extracting a single
      # optional keyword argument from $kwargs
      #
      # $kwargs always exist (as argument when inlining is possible
      # and as a local variable when it's not)
      #
      class ExtractKwoptarg < Base
        handle :extract_kwoptarg
        children :lvar_name, :default_value

        def compile
          helper :hash_get
          key_name = @sexp.meta[:arg_name]
          scope.used_kwargs << key_name

          add_temp lvar_name

          line "#{lvar_name} = $hash_get($kwargs, #{key_name.to_s.inspect});"

          return if default_value.children[1] == :undefined

          push "if (#{lvar_name} == null) #{lvar_name} = ", expr(default_value)
        end
      end
    end
  end
end