Sha256: 5b9e5df9c7ee5048f5114983cda980f4c4ae8dce3de82cc774be313abf366eec

Contents?: true

Size: 1.37 KB

Versions: 11

Compression:

Stored size: 1.37 KB

Contents

# frozen_string_literal: true

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

      def initialize(args)
        @args = []
        @optargs = []
        @restarg = nil
        @postargs = []
        @kwargs = []
        @kwoptargs = []
        @kwrestarg = nil
        @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 :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

11 entries across 11 versions & 1 rubygems

Version Path
opal-1.1.1 lib/opal/rewriters/arguments.rb
opal-1.1.1.rc1 lib/opal/rewriters/arguments.rb
opal-1.1.0 lib/opal/rewriters/arguments.rb
opal-1.1.0.rc1 lib/opal/rewriters/arguments.rb
opal-1.0.5 lib/opal/rewriters/arguments.rb
opal-1.0.4 lib/opal/rewriters/arguments.rb
opal-1.0.3 lib/opal/rewriters/arguments.rb
opal-1.0.2 lib/opal/rewriters/arguments.rb
opal-1.0.1 lib/opal/rewriters/arguments.rb
opal-1.0.0 lib/opal/rewriters/arguments.rb
opal-1.0.0.beta1 lib/opal/rewriters/arguments.rb