Sha256: d8f46b3f620b8700a99a5057ee440f0f2a9399be8c210332810e2e101aae0a77

Contents?: true

Size: 1.46 KB

Versions: 29

Compression:

Stored size: 1.46 KB

Contents

# frozen_string_literal: true

module Opal
  module Rewriters
    class Arguments
      attr_reader :args, :optargs, :restarg, :postargs,
        :kwargs, :kwoptargs, :kwrestarg, :kwnilarg,
        :shadowargs, :blockarg

      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

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

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

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

Version data entries

29 entries across 29 versions & 1 rubygems

Version Path
opal-1.8.3.rc1 lib/opal/rewriters/arguments.rb
opal-1.8.2 lib/opal/rewriters/arguments.rb
opal-1.8.1 lib/opal/rewriters/arguments.rb
opal-1.8.0 lib/opal/rewriters/arguments.rb
opal-1.8.0.beta1 lib/opal/rewriters/arguments.rb
opal-1.7.4 lib/opal/rewriters/arguments.rb
opal-1.8.0.alpha1 lib/opal/rewriters/arguments.rb
opal-1.7.3 lib/opal/rewriters/arguments.rb
opal-1.7.2 lib/opal/rewriters/arguments.rb
opal-1.7.1 lib/opal/rewriters/arguments.rb
opal-1.7.0 lib/opal/rewriters/arguments.rb
opal-1.7.0.rc1 lib/opal/rewriters/arguments.rb
opal-1.6.1 lib/opal/rewriters/arguments.rb
opal-1.6.0 lib/opal/rewriters/arguments.rb
opal-1.6.0.rc1 lib/opal/rewriters/arguments.rb
opal-1.6.0.alpha1 lib/opal/rewriters/arguments.rb
opal-1.5.1 lib/opal/rewriters/arguments.rb
opal-1.5.0 lib/opal/rewriters/arguments.rb
opal-1.5.0.rc1 lib/opal/rewriters/arguments.rb
opal-1.4.1 lib/opal/rewriters/arguments.rb