class Opal::Rewriters::InlineArgs::Initializer

Constants

STEPS

Attributes

initialization[R]
inline[R]

Public Class Methods

new(args, type:) click to toggle source
# File lib/opal/rewriters/inline_args.rb, line 87
def initialize(args, type:)
  @args = Arguments.new(args.children)

  @inline = []
  @initialization = []

  @type = type

  STEPS.each do |step|
    send(step)
  end

  if @initialization.any?
    @initialization = s(:begin, *@initialization)
  else
    @initialization = nil
  end
end

Public Instance Methods

args_to_keep() click to toggle source
# File lib/opal/rewriters/inline_args.rb, line 202
def args_to_keep
  @args.postargs.length
end
extract_args() click to toggle source
# File lib/opal/rewriters/inline_args.rb, line 118
def extract_args
  @args.args.each do |arg|
    if @type == :iter
      # block args are not required,
      # so we need to tell compiler that required args
      # must be initialized with nil-s
      @initialization << arg.updated(:initialize_iter_arg)
    else
      # required inline def argument like 'def m(req)'
      # no initialization is required
    end
    @inline << arg
  end
end
extract_blockarg() click to toggle source
# File lib/opal/rewriters/inline_args.rb, line 106
def extract_blockarg
  if (arg = @args.blockarg)
    @initialization << arg.updated(:extract_blockarg)
  end
end
extract_kwargs() click to toggle source
# File lib/opal/rewriters/inline_args.rb, line 152
def extract_kwargs
  @args.kwargs.each do |arg|
    @initialization << arg.updated(:extract_kwarg)
  end
end
extract_kwoptargs() click to toggle source
# File lib/opal/rewriters/inline_args.rb, line 158
def extract_kwoptargs
  @args.kwoptargs.each do |arg|
    @initialization << arg.updated(:extract_kwoptarg)
  end
end
extract_kwrestarg() click to toggle source
# File lib/opal/rewriters/inline_args.rb, line 164
def extract_kwrestarg
  if (arg = @args.kwrestarg)
    @initialization << arg.updated(:extract_kwrestarg)
  end
end
extract_optargs() click to toggle source
# File lib/opal/rewriters/inline_args.rb, line 178
def extract_optargs
  has_post_args = @args.has_post_args?
  @args.optargs.each do |arg|
    if has_post_args
      # optional post argument like 'def m(opt = 1, a)'
      arg_name, default_value = *arg
      @initialization << arg.updated(:extract_post_optarg, [arg_name, default_value, args_to_keep])
      @inline << s(:fake_arg)
    else
      # optional inline argument like 'def m(a, opt = 1)'
      @inline << arg.updated(:arg)
      @initialization << arg.updated(:extract_optarg)
    end
  end
end
extract_post_args() click to toggle source
# File lib/opal/rewriters/inline_args.rb, line 170
def extract_post_args
  # post arguments must be extracted with an offset
  @args.postargs.each do |arg|
    @initialization << arg.updated(:extract_post_arg)
    @inline << s(:fake_arg)
  end
end
extract_restarg() click to toggle source
# File lib/opal/rewriters/inline_args.rb, line 194
def extract_restarg
  if (arg = @args.restarg)
    arg_name = arg.children[0]
    @initialization << arg.updated(:extract_restarg, [arg_name, args_to_keep])
    @inline << s(:fake_arg)
  end
end
initialize_shadowargs() click to toggle source
# File lib/opal/rewriters/inline_args.rb, line 112
def initialize_shadowargs
  @args.shadowargs.each do |arg|
    @initialization << arg.updated(:initialize_shadowarg)
  end
end
prepare_kwargs() click to toggle source
# File lib/opal/rewriters/inline_args.rb, line 139
def prepare_kwargs
  return unless @args.has_any_kwargs?

  if @args.can_inline_kwargs?
    @inline << s(:arg, :'$kwargs')
  else
    @initialization << s(:extract_kwargs)
    @inline << s(:fake_arg)
  end

  @initialization << s(:ensure_kwargs_are_kwargs)
end
prepare_post_args() click to toggle source
# File lib/opal/rewriters/inline_args.rb, line 133
def prepare_post_args
  if @args.has_post_args?
    @initialization << s(:prepare_post_args, @args.args.length)
  end
end