class Opal::Rewriters::Arguments

def can_inline_kwargs?

def can_inline_kwargs?
  @optargs.empty? && @restarg.nil? && @postargs.empty?
end

def has_any_kwargs?

def has_any_kwargs?
  @kwargs.any? || @kwoptargs.any? || !@kwrestarg.nil?
end

def has_post_args?

def has_post_args?
  !@restarg.nil? || @postargs.any? || (has_any_kwargs? && !can_inline_kwargs?)
end

def initialize(args)

def initialize(args)
  @args = []
  @optargs = []
  @restarg = nil
  @postargs = []
  @kwargs = []
  @kwoptargs = []
  @kwrestarg = nil
  @kwnilarg = false
  @shadowargs = []
  @blockarg = nil
  args.each do |arg|
    case arg.type
    when :arg, :mlhs
      (@restarg || @optargs.any? ? @postargs : @args) << arg
    when :optarg
      @optargs << arg
    when :restarg
      @restarg = arg
    when :kwarg
      @kwargs << arg
    when :kwoptarg
      @kwoptargs << arg
    when :kwnilarg
      @kwnilarg = true
    when :kwrestarg
      @kwrestarg = arg
    when :shadowarg
      @shadowargs << arg
    when :blockarg
      @blockarg = arg
    else
      raise "Unsupported arg type #{arg.type}"
    end
  end
end