Sha256: 86bf4a69465a1e374a28093f6dcb76151d3a6cf0cbfb615d77df82e793125b12

Contents?: true

Size: 1.76 KB

Versions: 738

Compression:

Stored size: 1.76 KB

Contents

# frozen_string_literal: true

module Parser

  class StaticEnvironment
    FORWARD_ARGS = :FORWARD_ARGS
    ANONYMOUS_BLOCKARG = :ANONYMOUS_BLOCKARG
    ANONYMOUS_RESTARG = :ANONYMOUS_RESTARG
    ANONYMOUS_KWRESTARG = :ANONYMOUS_KWRESTARG

    def initialize
      reset
    end

    def reset
      @variables = Set[]
      @stack     = []
    end

    def extend_static
      @stack.push(@variables)
      @variables = Set[]

      self
    end

    def extend_dynamic
      @stack.push(@variables)
      @variables = @variables.dup

      self
    end

    def unextend
      @variables = @stack.pop

      self
    end

    def declare(name)
      @variables.add(name.to_sym)

      self
    end

    def declared?(name)
      @variables.include?(name.to_sym)
    end

    def declare_forward_args
      declare(FORWARD_ARGS)
    end

    def declared_forward_args?
      declared?(FORWARD_ARGS)
    end

    def declare_anonymous_blockarg
      declare(ANONYMOUS_BLOCKARG)
    end

    def declared_anonymous_blockarg?
      declared?(ANONYMOUS_BLOCKARG)
    end

    def parent_has_anonymous_blockarg?
      @stack.any? { |variables| variables.include?(ANONYMOUS_BLOCKARG) }
    end

    def declare_anonymous_restarg
      declare(ANONYMOUS_RESTARG)
    end

    def declared_anonymous_restarg?
      declared?(ANONYMOUS_RESTARG)
    end

    def parent_has_anonymous_restarg?
      @stack.any? { |variables| variables.include?(ANONYMOUS_RESTARG) }
    end

    def declare_anonymous_kwrestarg
      declare(ANONYMOUS_KWRESTARG)
    end

    def declared_anonymous_kwrestarg?
      declared?(ANONYMOUS_KWRESTARG)
    end

    def parent_has_anonymous_kwrestarg?
      @stack.any? { |variables| variables.include?(ANONYMOUS_KWRESTARG) }
    end

    def empty?
      @stack.empty?
    end
  end

end

Version data entries

738 entries across 738 versions & 11 rubygems

Version Path
affixapi-1.1.102 vendor/bundle/ruby/3.3.0/gems/parser-3.3.0.5/lib/parser/static_environment.rb
affixapi-1.1.101 vendor/bundle/ruby/3.3.0/gems/parser-3.3.0.5/lib/parser/static_environment.rb
affixapi-1.1.100 vendor/bundle/ruby/3.3.0/gems/parser-3.3.0.5/lib/parser/static_environment.rb
affixapi-1.1.99 vendor/bundle/ruby/3.3.0/gems/parser-3.3.0.5/lib/parser/static_environment.rb
affixapi-1.1.94 vendor/bundle/ruby/3.3.0/gems/parser-3.3.0.5/lib/parser/static_environment.rb
affixapi-1.1.93 vendor/bundle/ruby/3.3.0/gems/parser-3.3.0.5/lib/parser/static_environment.rb
affixapi-1.1.92 vendor/bundle/ruby/3.3.0/gems/parser-3.3.0.5/lib/parser/static_environment.rb
affixapi-1.1.91 vendor/bundle/ruby/3.3.0/gems/parser-3.3.0.5/lib/parser/static_environment.rb
affixapi-1.1.90 vendor/bundle/ruby/3.3.0/gems/parser-3.3.0.5/lib/parser/static_environment.rb
affixapi-1.1.89 vendor/bundle/ruby/3.3.0/gems/parser-3.3.0.5/lib/parser/static_environment.rb
affixapi-1.1.88 vendor/bundle/ruby/3.3.0/gems/parser-3.3.0.5/lib/parser/static_environment.rb
affixapi-1.1.87 vendor/bundle/ruby/3.3.0/gems/parser-3.3.0.5/lib/parser/static_environment.rb
affixapi-1.1.86 vendor/bundle/ruby/3.3.0/gems/parser-3.3.0.5/lib/parser/static_environment.rb
affixapi-1.1.85 vendor/bundle/ruby/3.3.0/gems/parser-3.3.0.5/lib/parser/static_environment.rb
affixapi-1.1.84 vendor/bundle/ruby/3.3.0/gems/parser-3.3.0.5/lib/parser/static_environment.rb
affixapi-1.1.83 vendor/bundle/ruby/3.3.0/gems/parser-3.3.0.5/lib/parser/static_environment.rb
cybrid_api_bank_ruby-0.115.125 vendor/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/static_environment.rb
cybrid_api_id_ruby-0.115.125 vendor/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/static_environment.rb
cybrid_api_organization_ruby-0.115.125 vendor/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/static_environment.rb
cybrid_api_bank_ruby-0.115.124 vendor/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/static_environment.rb