lib/opal/nodes/args/extract_kwoptarg.rb
# 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